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 inotifywaithalnya pada file nyata (mempertimbangkan file di bawah / proc sebagai "file semu").
Saya menemukan kode saya sedikit gila, karena berjalan sleep 1dengan awkuntuk 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 $codecfile.
/proc, Anda mungkin dapat memicu skrip Anda dengan aturan udev , yang akan sangat ideal. Yang kurang ideal adalah betapa membosankannya membuat aturan udev;)
topdan monitor sistem GUI banyak membaca lebih dari itu dari/procpada interval pendek. Tentu saja, mereka mungkin melakukannya jauh lebih efisien sebagai executable yang dikompilasi, tetapi intinya adalah: mencari informasi adalah tugas bersama.