Chcę wykonać skrypt na słuchawkach rozłączonych, ale nie podoba mi się pomysł ciągłego odpytywania o status, gdy kod jest już wykonywany po jego zmianie.
Chcę wykonać skrypt na słuchawkach rozłączonych, ale nie podoba mi się pomysł ciągłego odpytywania o status, gdy kod jest już wykonywany po jego zmianie.
Odpowiedzi:
W większości systemów, jeśli nie wszystkie, ACPI może obsłużyć to zdarzenie. Aby to sprawdzić:
acpi_listen
Odłącz i ponownie podłącz słuchawki, przykładowe wyjście: (mikrofon / uszy współdzielą to samo gniazdo w moim laptopie)
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
umieścić your-script.sh
w/etc/acpi/
Dodaj plik wyzwalacza zdarzenia dla skryptu w /etc/acpi/events/
event=jack/headphone HEADPHONE unplug
action=/etc/acpi/your-script.sh
Sprawdź inne pliki, z których możesz się uczyć.
Może być konieczne ponowne uruchomienie acpid
usługi, aby ponownie załadować zmienione reguły w/etc/acpi/events/
sudo service acpid restart
Odniesienie: man acpid
DBUS_SESSION_BUS_ADDRESS
zmienną środowiskową do pliku w swoim katalogu głównym za pomocą skryptu uruchomionego ~/.config/autostart/dbus.desktop
. Następnie można uruchomić su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."
z/etc/acpi/your-script.sh
Obecna wersja skryptu zawiera teraz sleep 0.25
polecenie.
sleep
jest oparty na zegarze, więc nie używa żadnych cykli przetwarzania podczas snu…
Używa bardzo małej ilości procesora do skonfigurowania timera, ale sleep 1
(spać 1 sekundę), sleep 60
(spać przez minutę) i sleep 86400
(spać przez jeden dzień) wszystkie używają tej samej liczby cykli procesora.
Korzystanie z ACPI jest jednak idealnym rozwiązaniem, ponieważ ACPI jest sterowane zdarzeniami zamiast odpytywania.