Welcher Code wird ausgeführt, wenn die Kopfhörer nicht angeschlossen sind?

9

Ich möchte ein Skript ausführen, wenn die Kopfhörer getrennt werden, aber ich lehne die Idee ab, den Status ständig abzufragen, wenn bereits Code ausgeführt wird, wenn er geändert wird.

int_ua
quelle

Antworten:

9

In den meisten Systemen, wenn nicht allen, kann ACPI dieses Ereignis verarbeiten. Um das zu testen:

  1. Lauf acpi_listen
  2. Kopfhörer ausstecken und wieder einstecken, Beispielausgabe: (Mikrofon / Ohren teilen sich die gleiche Buchse an meinem Laptop)

    jack/headphone HEADPHONE unplug
    jack/microphone MICROPHONE unplug
    jack/headphone HEADPHONE plug
    jack/microphone MICROPHONE plug
    
  3. Setzen Sie your-script.shein/etc/acpi/

  4. Fügen Sie eine Ereignisauslösedatei für Ihr Skript in hinzu /etc/acpi/events/

    event=jack/headphone HEADPHONE unplug
    action=/etc/acpi/your-script.sh
    

    Überprüfen Sie die anderen Dateien dort, um daraus zu lernen.

  5. Möglicherweise müssen Sie den acpidDienst neu starten , um geänderte Regeln erneut zu laden/etc/acpi/events/

    sudo service acpid restart
    

Referenz: man acpid

user.dz
quelle
Jetzt muss ich nur noch herausfinden, wie dbus mit ACPI-Skripten funktioniert, aber das ist eine andere Frage.
int_ua
2
@int_ua Sie müssen DBUS_SESSION_BUS_ADDRESSdie Umgebungsvariable mit einem Skript, mit dem begonnen wurde, in eine Datei in Ihrem Homedir schreiben ~/.config/autostart/dbus.desktop. Dann können Sie su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."von/etc/acpi/your-script.sh
Germar
Hey, ich habe ein Skript geschrieben, um eine Benachrichtigung anzuzeigen. Befolgte genau das, was du gesagt hast. Mein Skript führt Benachrichtigungs-Senden "Kopfhörer verbunden" beim Plug-Ereignis aus. Aber es scheint nicht zu funktionieren. askubuntu.com/questions/877804/…
Thewebjackal
1

Die aktuelle Version Ihres Skripts enthält jetzt einen sleep 0.25Befehl.

sleepist timerbasiert, verwendet also keine Verarbeitungszyklen im Schlaf…

Es wird zwar ein sehr kleines Stück CPU zum Einrichten des Timers verwendet, aber sleep 1(1 Sekunde schlafen), sleep 60(eine Minute sleep 86400schlafen ) und (einen Tag schlafen) verwenden alle die gleiche Anzahl von CPU-Zyklen.

Die Verwendung von ACPI ist jedoch die perfekte Lösung, da ACPI ereignisgesteuert statt abrufgesteuert ist.

Fabby
quelle