Skript ausführen, wenn der Netzschalter gedrückt wird

Skript ausführen, wenn der Netzschalter gedrückt wird

Wenn ich den Einschaltknopf drücke, möchte ich ein Skript ausführen. Für dieses Szenario sagen wir file.sh. Wenn ich also den Einschaltknopf drücke, möchte ich file.sh und nur file.sh ausführen.

Die meisten Lösungen, die ich gefunden habe, beinhalteten das Bearbeiten von /etc/acpi/powerbtn.sh, aber diese Datei existiert auf meinem System nicht. (Ich verwende Ubuntu 19.04.) Ich habe versucht, sie zu erstellen und mit dem Standardinhalt zu füllen, aber es hat nicht funktioniert. Ich habe auch versucht, mit auf Tastendrücke zu warten acpi_listen, aber beim Drücken der Tasten passierte nichts. Ich weiß also nicht, ob ich es einfach falsch gemacht habe oder was. Ich habe versucht, mit zu verwenden xev, das zwar Tastenereignisse aufnahm, aber nichts registrierte, als ich den Einschaltknopf drückte.

Weiß jemand, wie das geht oder was ich falsch mache?

PS: Ich sollte erwähnen, dass ich eine Lösung bevorzuge, die über die Befehlszeile ausgeführt werden kann, idealerweise eine ohne Software von Drittanbietern. Danke.


Ähnliche Frage, aber ohne Lösungen:

https://askubuntu.com/questions/473693/run-a-script-when-power-button-is-pushed

Suche im Grunde nach dem Linux-Äquivalent dessen, was sie hier gemacht haben:

https://stackoverflow.com/questions/12434863/executing-a-batch-script-on-windows-shutdown


BEARBEITEN: Folgendes bekomme ich vom Syslog:

Feb 9 13:01:01 joe-Aspire-E5-576G gnome-session-binary[1624]: Entering running state

Und dies ist meine Datei in Ereignissen:

event=button/power action=/home/ragnvaldr/Desktop/test/sc.sh `

Antwort1

Ihre Frage wird beantwortet imBEISPIELAbschnitt von man acpid. Ich werde mich Ihren Bedürfnissen anpassen.

  • Erstellen Sie rooteine Datei mit dem Namen /etc/acpi/events/powerund dem Inhalt etwa:
event=button/power
action=/usr/bin/logger "ACPI_POWER_BTTN_TEST: %e"
  • Dann renne service acpid restart.

  • Verfolgen Sie die syslogDatei folgendermaßen/usr/bin/tail -f /var/log/syslog

  • Drücken Sie die Einschalttaste, um Ihre Testnachricht anzuzeigen syslog.

  • Ändern Sie die action=Zeile in der powerDatei entsprechend, damit sie auf Ihr benutzerdefiniertes Skript verweist.

Fehlerbehebung:

  1. acpidÜberprüfen Sie nach dem Neustart acpidmithilfe des pidof acpidBefehls, ob es tatsächlich ausgeführt wird.

  2. Funktioniert Ihr Skript wie erwartet? Verwenden Sie vollständige Pfadnamen für Befehle in Ihrem Skript.nichtNehmen Sie einen beliebigen Wert für an PATH.

  3. Im obigen Beispiel habe ich den /usr/bin/loggerBefehl verwendet, um auf einfache Weise irgendwo etwas zu protokollieren ( /var/log/syslog). Alternativ können Sie /tmpzu Testzwecken auch etwas in eine Datei unter schreiben.

  4. Es wurde (von @nathan) berichtet, dass einige Fenstermanager auch den Einschaltknopf erfassen. Es kann hilfreich sein, sicherzustellen, dass /etc/systemd/logind.confdie Zeile vorhanden ist HandlePowerKey=ignore, sodass systemd-logind.serviceder Einschaltknopf ignoriert wird.

Antwort2

Suche im Grunde nach dem Linux-Äquivalent dessen, was sie hier gemacht haben:https://stackoverflow.com/questions/12434863/executing-a-batch-script-on-windows-shutdown

Wenn Sie dies tun möchten, können Sie Skripte ausführen, wenn das System heruntergefahren wird (oder in den Ruhezustand versetzt wird), indem Sie densystemdInfrastruktur.

verwandte Informationen