Saya telah menulis 'daemon' kecil di bash yang akan beralih ke headphone jika terdeteksi, dan jika tidak, beralih ke speaker USB eksternal dengan PulseAudio.
Apa yang saya cari adalah beberapa cara untuk mendapatkan pemberitahuan tentang perubahan pada file /proc/asound/card0/codec#0
, seperti inotifywait
halnya pada file nyata (mempertimbangkan file di bawah / proc sebagai "file semu").
Saya menemukan kode saya sedikit gila, karena berjalan sleep 1
dengan awk
untuk sepanjang hari, yaitu 86.400 kali sehari :)
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
Apa yang saya cari adalah sesuatu seperti (contoh ini tidak berfungsi):
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
Dengan cara ini perintah-perintah di dalam loop akan dijalankan hanya ketika ada perubahan nyata pada $codec
file.
/proc
, Anda mungkin dapat memicu skrip Anda dengan aturan udev , yang akan sangat ideal. Yang kurang ideal adalah betapa membosankannya membuat aturan udev;)
top
dan monitor sistem GUI banyak membaca lebih dari itu dari/proc
pada interval pendek. Tentu saja, mereka mungkin melakukannya jauh lebih efisien sebagai executable yang dikompilasi, tetapi intinya adalah: mencari informasi adalah tugas bersama.