web-dev-qa-db-ja.com

ヘッドフォンのプラグを抜いて音を消しますか?

ヘッドフォンを取り外して(電話のように)サウンドを停止してスピーカーから再生するたびに、コンピューターのサウンドをミュートする方法はありますか?

10
Dandyman

アンプラグを検出する方法

基本的に私のために働いたのは:

# 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

https://unix.stackexchange.com/questions/25776/detecting-headphone-connection-disconnection-in-linux

ヘッドフォンの取り外し/接続時に音量レベルを自動的に変更する方法

10
con-f-use

Ubuntu-16.10については、これにほとんど変更を加えませんでした answer

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
0
Abhishek

イベントの問題/etc/acpi/handler.shでキャッチしている場合は、私の answer を参照してください。また、デバイスコードなし as Node 0x16です。

0
Kuzeyeu Siarhei

これはUbuntu 14.04で私のために働いた:

「ヘッドフォンをミュートにして消音します。ヘッドフォンを挿入して音量を上げます。ヘッドフォンを取り外して消音を確認します。」

クレジット: https://www.reddit.com/r/LifeProTips/comments/369k76/lpt_request_automaticly_mute_laptop_after_headset/ のRevDrStrangelove

0
mcaleaa