编写耳机插件事件脚本时可能出现竞争条件

编写耳机插件事件脚本时可能出现竞争条件

我目前正在尝试编写耳机插入/拔出事件的脚本。我发现我可以很容易地将其编写为一个acpi事件。

/etc/acpi/events/我用 event创建了一个文件event=jack[ /]headphone,然后它只调用我的脚本。

我还确定了文件和确切的行,其中包含有关耳机当前是否插入的信息。该文件中的/proc/asound/card0/codec#0一项具体内容Pin-ctls:0x00是否插入和0x40: OUT拔出。

现在我看到的问题是,当我检查耳机插孔的当前状态时,一旦触发 acpi 事件,文件是否codec#0已经包含当前值?我这里可能有竞争条件吗?或者这样使用安全吗?

答案1

我发现通过检查插孔上的特定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

相关内容