J'ai écrit un petit `` démon '' en bash qui passera aux écouteurs s'ils sont détectés, et sinon, passer à un haut-parleur USB externe avec PulseAudio.
Ce que je recherche, c'est un moyen d'obtenir une notification des modifications sur le fichier /proc/asound/card0/codec#0
, tout comme inotifywait
les vrais fichiers (en considérant les fichiers sous / proc comme des "pseudo-fichiers").
Je trouve mon code un peu fou, car il fonctionne sleep 1
avec awk
toute la journée, soit 86400 fois par jour :)
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
Ce que je recherche, c'est quelque chose comme (cet exemple ne fonctionne pas):
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 cette façon, les commandes à l'intérieur de la boucle ne seraient exécutées que lorsqu'il y aurait de réels changements dans le $codec
fichier.
/proc
, vous pouvez probablement déclencher votre script avec une règle udev , ce qui serait plutôt idéal. Moins idéal est à quel point il peut être fastidieux d'élaborer des règles udev;)
top
et les moniteurs de système GUI lisent beaucoup plus que cela/proc
à de courts intervalles. Bien sûr, ils le font probablement beaucoup plus efficacement en tant qu'exécutables compilés, mais le fait est que: rechercher des informations est une tâche courante.