Scripting
編寫耳機外掛事件腳本時可能出現的競爭條件
我目前正在嘗試編寫耳機外掛/輸出事件的腳本。我發現我可以很容易地把它寫成一個
acpi
事件..
/etc/acpi/events/
我在event中創建了一個文件event=jack[ /]headphone
,然後它只呼叫我的腳本。我還確定了文件和確切的行,其中包含有關耳機目前是否插入的資訊。在文件中,
/proc/asound/card0/codec#0
一項具體Pin-ctls:
是0x00
是否插入和0x40: OUT
拔出。現在我看到的問題是,當我檢查耳機插孔的目前狀態時,一旦觸發 acpi 事件,
codec#0
文件是否已經包含目前值?我可能在這裡有比賽條件嗎?或者這樣使用安全嗎?
我發現通過檢查千斤頂上的特定
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