He escrito un pequeño 'demonio' en bash que cambiará a los auriculares si se detectan, y si no, cambiará a un altavoz USB externo con PulseAudio.
Lo que estoy buscando es alguna forma de recibir notificaciones de cambios en el archivo /proc/asound/card0/codec#0
, al igual inotifywait
que en los archivos reales (considerando que los archivos bajo / proc son como "pseudo-archivos").
Encuentro mi código un poco loco, porque funciona sleep 1
con awk
todo el día, es decir 86400 veces al día :)
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
Lo que estoy buscando es algo como (este ejemplo no funciona):
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
De esta forma, los comandos dentro del bucle se ejecutarán solo cuando haya cambios reales en el $codec
archivo.
/proc
, probablemente puedas activar tu script con una regla udev , lo cual sería bastante ideal. Menos ideal es lo tedioso que puede ser crear reglas de udev;)
top
y los monitores del sistema GUI leen mucho más que eso/proc
a intervalos cortos. Por supuesto, probablemente lo hacen de manera mucho más eficiente como ejecutables compilados, pero el punto es: la búsqueda de información es una tarea común.