Ho scritto un piccolo 'demone' in bash che passerà alle cuffie se vengono rilevate e, in caso contrario, passerà a un altoparlante USB esterno con PulseAudio.
Quello che sto cercando è un modo per ottenere la notifica delle modifiche al file /proc/asound/card0/codec#0
, proprio come inotifywait
sui file reali (considerando i file in / proc come "pseudo-file").
Trovo il mio codice un po 'folle, perché si corre sleep 1
con awk
per tutta la giornata, che è 86400 volte al giorno :)
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
Quello che sto cercando è qualcosa di simile (questo esempio non funziona):
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
In questo modo i comandi all'interno del ciclo verrebbero eseguiti solo in presenza di modifiche reali sul $codec
file.
/proc
, probabilmente puoi attivare il tuo script con una regola udev , che sarebbe piuttosto ideale. Meno ideale è quanto possa essere noioso elaborare regole udev;)
top
e i monitor di sistema della GUI leggono molto più di questo da/proc
brevi intervalli. Naturalmente, probabilmente lo fanno in modo molto più efficiente come eseguibili compilati, ma il punto è: il polling per le informazioni è un compito comune.