ヘッドフォンのプラグを抜いてミュートしますか?


10

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




ここで無限ループを使用せずに回答を投稿しました-askubuntu.com/a/1005144/470017
Al.G.

回答:


10

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

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

# 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

ヘッドフォンの取り外し/接続時に音量レベルを自動的に変更するにはどうすればよいですか?


これはMint 17.3で完全に動作します。ありがとう!
Briscoooe

4
whileバックグラウンドで継続的に実行される無限ループ(少しのスリープ命令もなし)を含むスクリプトを持つことは、理想的なソリューションとはほど遠いものです。これは、CPUとバッテリーキラーであることに加えて、醜くハックな回避策です。私はそれを試して、5%の一定のCPU使用率(ブラウザー、spotify、ターミナル、IDE、テレグラム、およびその他のアプリを開いた状態)の通常の状況から、45%の一定のCPU使用率に移行しました。
LeartS

@LearlSが指摘するように、このソリューションはひどく悪い市民です。これをしないでください。良い市民の解決策についてはacpi_listen、この回答のリンクの1つで提案されているように、を使用してください。
Don Hatch

0

これは私にとってUbuntu 14.04で機能しました:

「ヘッドフォンを外してミュートしてください。ヘッドフォンを挿入して音量を上げてください。ヘッドフォンを取り外してミュートを確認してください。」

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


0

ubuntu-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

この答えとそれから来た答えはどちらも悪い市民です。それらは機能しているように見えますが、拡張できないシステムリソースを占有しています。このようなプログラムをいくつか同時に実行すると、システムが破壊されます。これをしないでください。代わりに、acpi_listenまたは類似のソリューションの1つを使用できます。
ドンハッチ

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.