web-dev-qa-db-ja.com

ヘッドフォンプラグインイベントのスクリプトを作成するときに発生する可能性のある競合状態

現在、ヘッドフォンのプラグイン/アウトイベントのスクリプトを作成しようとしています。これをacpiイベントとして非常に簡単にスクリプト化できることがわかりました。

イベント/etc/acpi/events/を使用してevent=jack[ /]headphoneにファイルを作成しました。このファイルは、スクリプトを呼び出すだけです。

また、ヘッドホンが現在接続されているかどうかに関する情報を保持するファイルと正確な行も決定しました。ファイル/proc/asound/card0/codec#0では、特定のPin-ctls:は、接続されている場合は0x00であり、接続されていない場合は0x40: OUTです。

ここで問題が発生するのは、ヘッドフォンジャックの現在のステータスを確認すると、acpiイベントがトリガーされるとすぐに、codec#0ファイルに現在の値がすでに含まれているのでしょうか。ここで競合状態が発生する可能性がありますか?それともそのように使用しても安全ですか?

2
boolean.is.null

ジャックの特定のplug/unplugイベントをチェックすることで、問題を簡単に回避できることがわかりました。以下の解決策は、ジャックが抜かれたときに音をミュートする特定のジャックイベントに関する情報をスクリプトに提供します。

/etc/acpi/events/jack

event=jack[ /]headphone
action=/etc/acpi/actions/jack.sh "%e"

/etc/acpi/actions/jack.sh

#!/bin/bash

event=$(echo "$1" | cut -d " " -f 3)

case "$event" in
    plug)
        ;;
    unplug)
    amixer set Master mute
        ;;
    *)  
        #null
esac
0
boolean.is.null