Je veux exécuter un script sur la déconnexion des écouteurs, mais je n'apprécie pas l'idée d' une interrogation constante de l'état lorsqu'il y a déjà du code exécuté lorsqu'il est modifié.
Je veux exécuter un script sur la déconnexion des écouteurs, mais je n'apprécie pas l'idée d' une interrogation constante de l'état lorsqu'il y a déjà du code exécuté lorsqu'il est modifié.
Réponses:
Dans la plupart des systèmes, sinon tous, ACPI peut gérer cet événement. Pour tester cela:
acpi_listen
Débranchez et rebranchez le casque, exemple de sortie: (le micro / les oreilles partagent la même prise sur mon ordinateur portable)
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
mettre your-script.sh
en/etc/acpi/
Ajoutez un fichier déclencheur d'événement pour votre script dans /etc/acpi/events/
event=jack/headphone HEADPHONE unplug
action=/etc/acpi/your-script.sh
Vérifiez les autres fichiers qui s'y trouvent.
Vous devrez peut-être redémarrer le acpid
service pour recharger les règles modifiées dans/etc/acpi/events/
sudo service acpid restart
Référence: man acpid
DBUS_SESSION_BUS_ADDRESS
variable environ dans un fichier de votre homedir avec un script commencé par ~/.config/autostart/dbus.desktop
. Ensuite, vous pouvez exécuter à su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."
partir de/etc/acpi/your-script.sh
La version actuelle de votre script contient désormais une sleep 0.25
commande.
sleep
est basé sur une minuterie, donc n'utilise aucun cycle de traitement pendant le sommeil ...
Il utilise un tout petit peu de CPU pour configurer la minuterie, mais sleep 1
(sommeil 1 seconde), sleep 60
(sommeil pendant une minute) et sleep 86400
(sommeil pendant une journée) utilisent tous le même nombre de cycles CPU.
L'utilisation d'ACPI est cependant la solution parfaite car ACPI est piloté par les événements plutôt que par les sondages.