Bash'da, tespit edilirlerse kulaklıklara geçecek ve değilse, PulseAudio ile harici bir USB hoparlöre geçecek küçük bir 'arka plan programı' yazdım.
Aradığım şey, dosyadaki değişikliklerin bildirimini almanın bir yoludur /proc/asound/card0/codec#0
, tıpkı inotifywait
gerçek dosyalarda olduğu gibi (/ proc altındaki dosyaları "sözde dosyalar" olarak kabul etmek).
O çalışır, çünkü benim kod biraz deli bulmak sleep 1
ile awk
86400 kere bir gün bütün gün, için :)
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
Aradığım şey şudur (bu örnek işe yaramaz):
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
Bu şekilde, döngü içindeki komutlar yalnızca $codec
dosyada gerçek değişiklikler olduğunda çalıştırılır .
/proc
, muhtemelen komut dosyanızı bir udev kuralıyla tetikleyebilirsiniz , ki bu oldukça idealdir. Daha az ideal udev kuralları ile gelmek ne kadar sıkıcı olabilir;)
top
GUI sistemi monitörleri gibi şeyler/proc
kısa aralıklarla çok daha fazlasını okuyor . Tabii ki, muhtemelen derlenmiş yürütülebilir dosyalar olarak çok daha verimli bir şekilde yaparlar, ancak asıl nokta: bilgi yoklaması yaygın bir görevdir.