헤드폰 플러그인 이벤트를 스크립팅할 때 발생할 수 있는 경쟁 조건

헤드폰 플러그인 이벤트를 스크립팅할 때 발생할 수 있는 경쟁 조건

현재 헤드폰 연결/분리 이벤트를 스크립팅하려고 합니다. 나는 이것을 acpi이벤트로 쉽게 프로그래밍할 수 있다는 것을 알았습니다.

/etc/acpi/events/이벤트가 포함된 파일을 만든 event=jack[ /]headphone다음 스크립트를 호출합니다.

또한 헤드셋이 현재 연결되어 있는지 여부에 대한 정보가 포함된 파일과 정확한 라인을 식별했습니다. 문서의 /proc/asound/card0/codec#0구체적인 내용 중 하나 는 플러그가 연결되어 있는지 여부 Pin-ctls:입니다 .0x000x40: 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

관련 정보