헤드폰을 뽑을 때마다 (휴대폰처럼) 사운드를 멈춘 다음 스피커에서 재생할 때마다 컴퓨터에서 사운드를 끄는 방법이 있습니까?
답변
플러그를 뽑는 방법
기본적으로 나를 위해 일한 것은 다음과 같습니다.
# 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
답변
이것은 우분투 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