Scripting

編寫耳機外掛事件腳本時可能出現的競爭條件

  • January 20, 2016

我目前正在嘗試編寫耳機外掛/輸出事件的腳本。我發現我可以很容易地把它寫成一個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

引用自:https://unix.stackexchange.com/questions/248331