나는 bash에서 작은 '데몬'을 작성하여 헤드폰이 감지되면 헤드폰으로 전환하고 그렇지 않은 경우 PulseAudio를 사용하여 외부 USB 스피커로 전환합니다.
내가 찾고있는 것은 실제 파일에서 /proc/asound/card0/codec#0
와 마찬가지로 파일의 변경 사항을 알 수있는 방법입니다 inotifywait
(/ proc의 파일을 "의사 파일"로 간주).
이 실행되기 때문에 나는 내 코드 비트 정신을 찾을 수 sleep 1
와 awk
86400 번 날 하루 종일을위한 :)
while sleep 1; do
_1=${_2:-}
_2=$(awk '/Pin-ctls/{n++;if(n==4)print}' '/proc/asound/card0/codec#0')
[[ ${_1:-} = $_2 ]] ||
if [[ $_2 =~ OUT ]]; then
use_speakers
else
use_internal
fi
done
내가 찾고있는 것은 다음과 같습니다 (이 예제는 작동하지 않습니다).
codec=/proc/asound/card0/codec#0
while inotifywait $codec; do
if [[ $(awk '/Pin-ctls/{n++;if(n==4)print}' $codec) =~ OUT ]]; then
use_speakers
else
use_internal
fi
done
이런 식으로 루프 내부의 명령은 $codec
파일 에 실제 변경 사항이있을 때만 실행됩니다 .
/proc
아마도 udev 규칙으로 스크립트를 트리거 할 수 있습니다 . 덜 이상적은 udev 규칙을 따르는 것이 지루한 일이다;)
top
GUI 시스템 모니터와 같은 것들은/proc
짧은 간격에서 그것보다 훨씬 더 많은 것을 읽습니다 . 물론 컴파일 된 실행 파일로 훨씬 더 효율적으로 수행 할 수 있지만 요점은 다음과 같습니다. 정보 폴링은 일반적인 작업입니다.