web-dev-qa-db-ja.com

ヘッドフォンの切断時に自動的にミュートする方法は?または、システムイベントリスナーにbashスクリプトをタップする方法は?

Ubuntuがsoundを切断するたびにheadphonesをミュートしていると、周囲は毎回異なりますが(例:昼/夜)、同じ出力ボリュームなので、私の人生は楽になります。

そのためのスクリプトを理解することはできますが、Ubuntu event listenerとの相互作用がないわけではありません。今のところそれについて何も知りません。

私はどちらかの主題の解決策またはヒントを感謝しますが、packageのインストールではなく、非常に単純なことで、これらの束はupdateを長すぎます。


実際、接続時にUSBマウス設定を自動調整する(地獄がリセットされるのですか?)、接続時にGSMモデムを自動的に有効にするなど、reaction to eventsの知識が足りない多くのソリューションを作成します。

6
Esamo

まず、ターミナルでalsamixerプログラムを開きます(Ctrl + Alt + T)。

enter image description here

自動ミュートが有効になっているかどうかを確認します。左右のキーを使用して上下に移動し、上下に値を切り替えることができます。 Escで終了します。

これで、ヘッドフォンなしでサウンドをミュートし、ヘッドフォンを接続し、再度取り外した場合、スピーカーからの音はミュートのままになります。少なくとも私のマシンでは、自動ミュートが有効になっていると、スピーカーをミュートのままにできますが、ヘッドフォンを接続するとサウンドを出力できます。

5

簡潔な答え

  1. 通知を表示するには、notify-osd Sudo apt install notify-osdをインストールする必要があります
  2. <my_name>.shディレクトリにテキストファイル/home/<user_name>/を作成します。そして、ファイルchmod +x /home/<user_name>/<my_name>.shに実行許可を追加します
  3. 以下のテキストを<my_name>.shファイルに貼り付けます

    #!/bin/bash
    acpi_listen | while IFS= read -r line;
    do
        if [ "$line" = "jack/headphone HEADPHONE plug" ]
        then
           amixer -D Pulse set Master mute
           notify-send "headphones connected. Sound is muted"
        Elif [ "$line" = "jack/headphone HEADPHONE unplug" ]
        then
           amixer -D Pulse set Master mute
           notify-send "headphones disconnected.  Sound is muted"
        fi
    done
    
  4. Startup Configurations Linuxシステムのメニュー(ubuntu、kubuntu、xubuntuなど)に移動します。 /home/<user_name>/<my_name>.shファイルをautostartwithに設定します。デスクトップ環境(xfce、KDE、Gnomeなど)。

警告! KDEを使用する場合DON NOT"Start script before KDE"または"Application"のファイルをbash /home/<user_name>/<my_name>.shで追加します。
スクリプトとして(シナリオ)および"Start WITH KDE"を使用します。
IFすでに行っている場合は、ctrl + alt + F2を押して、ユーザーとしてログインし、rm /home/<user_name>/<my_name>.shを削除します。削除する権限がない場合は、mount -o remount, rw /を削除する前にディスクを再マウントしてください。

スクリプトを編集する方法

一部のLinuxベースのシステムcache自動起動スクリプト。つまり、/home/<user_name>/<my_name>.shおよびlogout / loginまたはrestartシステムを編集しても、スクリプトは同じままです。
KDEでは、キャッシュされたスクリプトシンボリックリンクは/home/<user_name>/.config/autostart-scripts/<my_name>.shにあります。 <my_name>.shファイル、logout / loginシステムを手動で削除し、スクリプトをautostartに再度追加し、logout / loginを再度追加します。
私にはKDEバグのようです。他のDE(xfce、Gnomeなど)について知らない

知っておくべきこと

上記のコードでは、テキストは"jack/headphone HEADPHONE plug"として表示されます。ヘッドフォンのイベント名です。

イベントを表示するには:
1。コンソールに入力acpi_listen
2。 Plugおよびnplugヘッドフォン(または別のデバイス)
3。 consoleにイベント名が表示されます。下のテキストのようなものになります

    user@user-PC:~$ acpi_listen
    jack/headphone HEADPHONE unplug
    jack/microphone MICROPHONE unplug
    jack/headphone HEADPHONE plug
    jack/microphone MICROPHONE plug

上記のスクリプトのイベント名異なるの場合、それらをconsole出力からのイベント名に置き換えます。

ACPIとイベント

ACPIイベントを表示してテストするには、evtestSudo apt install evtestを使用できます

    user@user-PC:~$ Sudo evtest
    No device specified, trying to scan all of /dev/input/event*
    Available devices:
    /dev/input/event0:      Lid Switch
    /dev/input/event1:      Power Button
    /dev/input/event2:      Power Button
    /dev/input/event3:      AT Translated Set 2 keyboard
    /dev/input/event4:      Video Bus
    /dev/input/event5:      SynPS/2 Synaptics TouchPad
    /dev/input/event6:      COMPANY USB Device
    /dev/input/event7:      COMPANY USB Device
    /dev/input/event8:      COMPANY USB Device
    /dev/input/event9:      HP Wireless hotkeys
    /dev/input/event10:     HDA Intel HDMI HDMI/DP,pcm=3
    /dev/input/event11:     HDA Intel HDMI HDMI/DP,pcm=7
    /dev/input/event12:     HDA Intel HDMI HDMI/DP,pcm=8
    /dev/input/event13:     HDA Intel HDMI HDMI/DP,pcm=9
    /dev/input/event14:     HDA Intel HDMI HDMI/DP,pcm=10
    /dev/input/event15:     HDA Intel PCH Mic
    /dev/input/event16:     HDA Intel PCH Headphone
    /dev/input/event17:     HP WMI hotkeys
    /dev/input/event18:     HP Webcam: HP Webcam
    Select the device event number [0-18]: 16
    Input driver version is 1.0.1
    Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
    Input device name: "HDA Intel PCH Headphone"
    Supported events:
    Event type 0 (EV_SYN)
    Event type 5 (EV_SW)
        Event code 2 (SW_HEADPHONE_INSERT) state 1
    Properties:
    Testing ... (interrupt to exit)
    Event: time 1522588668.319567, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 0
    Event: time 1522588668.319567, -------------- SYN_REPORT ------------                      
    Event: time 1522588670.035275, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 1       
    Event: time 1522588670.035275, -------------- SYN_REPORT ------------

何らかの理由で/etc/acpi/events/jackが機能しません。おそらくCONFIG_SND_HDA_INPUT_JACKオプションが間違っています。その使用をテストするには

    Sudo grep CONFIG_SND_HDA_INPUT_JACK /boot/config-$(uname -r)

私の答えは this answerに基づいています。

1
Kuzeyeu Siarhei

ヘッドフォンのプラグ/アンプラグイベントのACPIリスナーを設定することで、これを自動化できます。

$ grep headphone /etc/acpi/handler.sh -A 11                                                                                                         
    jack/headphone)                                                                                                                                 
        case "$3" in
            plug)
                logger "Headphones plugged"
                amixer sset 'Headphone' 30%
                ;;
            unplug)
                logger "Headphones unplugged"
                amixer sset 'Speaker' 30%
                ;;
    esac
    ;;
$ systemctl restart acpid

別の方法:
/etc/acpi/handler.shを変更する代わりに、/etc/acpi/events/に別の構成ファイルを作成し、これらのイベントを処理する独自のスクリプトを指定できます。デフォルトの構成をテンプレートとして使用します。

$ cat /etc/acpi/events/anything                                                                                                                     
# Pass all events to our one handler script                                                                                                         
event=.*
action=/etc/acpi/handler.sh %e

詳細については、man acpidをご覧ください。

0
Al.G.