헤드폰에서 소리가 나지 않습니까? 헤드폰을 뽑을 때마다

헤드폰을 뽑을 때마다 (휴대폰처럼) 사운드를 멈춘 다음 스피커에서 재생할 때마다 컴퓨터에서 사운드를 끄는 방법이 있습니까?



답변

플러그를 뽑는 방법

기본적으로 나를 위해 일한 것은 다음과 같습니다.

# 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

답변

당신이 이벤트를 잡기에 문제가 있다면 /etc/acpi/handler.sh대답 을 참조하십시오 . 또한 장치 코드 가 없습니다 Node 0x16.