Voglio eseguire uno script su disconnessione delle cuffie, ma rinuncio all'idea di un polling costante dello stato quando c'è già del codice eseguito quando viene modificato.
Voglio eseguire uno script su disconnessione delle cuffie, ma rinuncio all'idea di un polling costante dello stato quando c'è già del codice eseguito quando viene modificato.
Risposte:
Nella maggior parte dei sistemi, se non in tutti, ACPI può gestire questo evento. Per testarlo:
acpi_listen
Scollega e ricollega le cuffie, uscita di esempio: (il microfono / le orecchie condividono lo stesso jack sul mio laptop)
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
Metti your-script.sh
dentro/etc/acpi/
Aggiungi un file trigger di evento per il tuo script in /etc/acpi/events/
event=jack/headphone HEADPHONE unplug
action=/etc/acpi/your-script.sh
Controlla gli altri file lì per imparare da.
Potrebbe essere necessario riavviare il acpid
servizio per ricaricare le regole modificate/etc/acpi/events/
sudo service acpid restart
Riferimento: man acpid
DBUS_SESSION_BUS_ADDRESS
variabile di ambiente in un file nel tuo homedir con uno script iniziato con ~/.config/autostart/dbus.desktop
. Quindi puoi scappare su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."
da/etc/acpi/your-script.sh
La versione corrente dello script ora contiene un sleep 0.25
comando.
sleep
è basato sul timer, quindi non utilizza alcun ciclo di elaborazione durante il sonno ...
Usa un po 'di CPU per impostare il timer, ma sleep 1
(sleep 1 secondo), sleep 60
(sleep per un minuto) e sleep 86400
(sleep per un giorno) usano tutti lo stesso numero di cicli CPU.
L'utilizzo di ACPI è tuttavia la soluzione perfetta poiché ACPI è guidato dagli eventi anziché dal polling.