헤드폰을 뽑을 때마다 (휴대폰처럼) 사운드를 멈춘 다음 스피커에서 재생할 때마다 컴퓨터에서 사운드를 끄는 방법이 있습니까?
헤드폰을 뽑을 때마다 (휴대폰처럼) 사운드를 멈춘 다음 스피커에서 재생할 때마다 컴퓨터에서 사운드를 끄는 방법이 있습니까?
답변:
기본적으로 나를 위해 일한 것은 다음과 같습니다.
# When plugged in:
cat /proc/asound/card0/codec#0 > pluggedin.txt
# When not plugged in:
cat /proc/asound/card0/codec#0 > notplugged.txt
# Then compare the differences
diff pluggedin.txt notplugged.txt
나에게 차이점은 'Amp-Out vals'의 'Node 0x16'에 있습니다.
Node 0x16 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out Node 0x16 [PinComplex] wcaps 0x40058d: Stereo Amp-Out
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 Amp-Out caps:ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80] | Amp-Out vals: [0x00 0x00]
그래서 나는 발견 된 차이를 기반으로 탐지를 기반으로했습니다.
이 지식으로 백그라운드에서 스크립트를 실행할 수 있습니다. 플러그를 뽑으면 스크립트는 amixer sset Master playback 0%
다른 명령을 사용하여 스피커를 음소거합니다 .
#!/bin/bash
# This scripts detecs unplugging headphones.
oldstatus="unrelated string"
while [ 1 ]; do
# The following line has to be changed depending on the difference (use diff) in '/proc/asound/card0/code#0'
status=$(grep -A 4 'Node 0x16' '/proc/asound/card0/codec#0' | grep 'Amp-Out vals: \[0x80 0x80\]')
if [ "$status" != "$oldstatus" ]; then
if [ -n "$status" ]; then
echo "Plugged in"
amixer sset Master playback 80% # Set volume to 80%
oldstatus="$status"
else
echo "Unplugged"
amixer sset Master playback 0% # Mute
oldstatus="$status"
fi
fi
done
chmod +x scriptname.sh
시작 응용 프로그램에서 실행 가능하게 만들 수 있습니다 . 그러나 자신의 차이를 찾아서 분리 감지를 조정해야합니다 /proc/asound/card0/codec#0
(여러 사운드 카드의 경우 숫자를 변경할 수도 있음).
관련된 링크들:
https://wiki.ubuntu.com/Audio/PreciseJackDetectionTesting
/unix/25776/detecting-headphone-connection-disconnection-in-linux
while
백그라운드에서 연속적으로 실행 되는 무한 루프 (작은 수면 명령없이)가 있는 스크립트를 갖는 것은 이상적인 솔루션과는 거리가 멀다. CPU 및 배터리 킬러뿐만 아니라 추악하고 해킹 된 해결 방법입니다. 나는 그것을 시도하고 일정한 5 % CPU 사용률 (브라우저, spotify, 터미널, IDE, Telegram 및 기타 응용 프로그램이 열린 상태)에서 45 % 일정한 CPU 사용으로 정상 상태에서 갔다.
acpi_listen
경우이 답변의 링크 중 하나에서 제안 된대로을 사용 하십시오.
이것은 우분투 14.04에서 나를 위해 일했습니다.
"헤드폰을 끈 상태에서 음소거하십시오. 헤드폰을 삽입하고 볼륨을 높이십시오. 헤드폰을 분리하고 음소거를 확인하십시오."
크레딧 : https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/에 RevDrStrangelove
우분투 -16.10의 경우이 답변을 거의 변경하지 않았습니다 .
oldresult="Some Random String"
while [ 1 ]; do
# incase of plugged out result will contain some data
result=$(grep "EAPD 0x2: EAPD" /proc/asound/card0/codec#0)
# checking for oldresult if not same then only go inside
if [ "$oldresult" != "$result" ]; then
oldresult=$result
if [[ -z "$result" ]]; then
notify-send "Plugged In"
amixer sset Master playback 80% # Set volume to 80%
else
notify-send "Plugged Out"
amixer sset Master playback 0% # Set volume to 0%
fi
fi
done