ヘッドフォンが検出されるとヘッドフォンに切り替わり、検出されない場合はPulseAudioを備えた外部USBスピーカーに切り替える小さな「デーモン」をbashで作成しました。
私が探して/proc/asound/card0/codec#0
いるのinotifywait
は、実際のファイルと同じように、ファイルの変更の通知を取得する方法です(/ procの下のファイルを「疑似ファイル」と見なす)。
私は私のコードが少し狂っています、なぜならそれは一日中実行sleep 1
さawk
れます、それは1日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
システムモニターのようなものは/proc
、短い間隔でそれよりもずっと多くを読みます。もちろん、コンパイルされた実行可能ファイルとして、おそらくはるかに効率的に実行しますが、ポイントは次のとおりです。情報のポーリングは一般的なタスクです。