Eu escrevi um pequeno 'daemon' no bash que mudará para os fones de ouvido se forem detectados e, caso contrário, mudará para um alto-falante USB externo com o PulseAudio.
O que estou procurando é uma maneira de obter uma notificação de alterações no arquivo /proc/asound/card0/codec#0
, assim como inotifywait
ocorre nos arquivos reais (considerando os arquivos em / proc como "pseudo-arquivos").
I encontrar o meu código um pouco insano, porque ele é executado sleep 1
com awk
para todo o dia, que é 86400 vezes por dia :)
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
O que estou procurando é algo como (este exemplo não 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
Dessa forma, os comandos dentro do loop seriam executados apenas quando houver alterações reais no $codec
arquivo.
/proc
, provavelmente você pode acionar seu script com uma regra do udev , o que seria bastante ideal. Menos ideal é como tedioso pode ser chegando com as regras do udev;)
top
monitores do sistema GUI leem muito mais do que isso/proc
em intervalos curtos. Obviamente, eles provavelmente o fazem com muito mais eficiência como executáveis compilados, mas o ponto é: pesquisar informações é uma tarefa comum.