Shutdown per Power Button

Aus CyberWiki
Zur Navigation springen Zur Suche springen

Diese Beschreibung bezieht sich sich nicht auf den Raspberry Pi, sondern auf einen Server mit Debian Bullseye.
Ziel ist das Abschalten des Rechners durch Druck auf den Einschaltknopf und ohne zuvor ein Login durchzuführen. Hat man eine grafische Oberfläche installiert, kann man versuchen, über das Energiemenü das gewünschte Verhalten einzustellen.
Falls man bei einem Test aber festgestellt hat, dass nach einem kurzen Druck auf den Power Button nichts passiert, kann man dieser Anleitung folgen. Es ist keineswegs ratsam mehrere Sekunden auf den Power Button zu drücken, denn das heißt abschalten durch Stromentzug und ist nicht ratsam.

Server mittels ACPI herunterfahren

Zuerst wird ACPI installiert:

$ sudo apt-get install acpid

Das sollte es eigentlich gewesen sein. Falls aber durch Test nach wie vor nichts passiert, kann man einen Workaround implementieren. Informationen findet man z.B. hier: https://www.geeksforgeeks.org/acpid-command-in-linux-with-examples/
Die Konfigurationsfiles findet man hier:

/etc/acpi bzw.
/etc/acpi/events

In dem Ordner events befindet sich die Datei powerbtn-acpi-support mit folgendem Inhalt:

event=button[ /]power
action=/etc/acpi/powerbtn-acpi-support.sh

D.h. der event ist der Druck auf den Power Button, die action ist die Ausführung der bash-Prozedur. Man kann nun überprüfen, ob diese Prozedur überhaupt ausgeführt wird. Dazu stoppen wir acpid im Hintergrund, starten den daemon im Vordergrund und schalten auch das Logging ein:

sudo service acpid stop
sudo acpid -f -l

Damit läuft acpid im Terminalfenster. Jetzt sollte bei Druck auf den Power Button etwas passieren. In meinem Fall erscheint zweimal die Meldung

received input layer event "button/power PBTN 00000080 00000000"
rule from /etc/acpi/events/powerbtn-acpi-support matched
executing action "/etc/acpi/powerbtn-acpi-support.sh"
action exited with status 0
1 total rule matched
completed input layer event "button/power PBTN 00000080 00000000"

Das bedeutet, dass die Prozedur powerbtn-acpi-support.sh durchlaufen wird, die aber nicht bis zum shutdown-Befehl kommt, sondern zuvor durch if-Abfragen mit exit 0 verlassen wird. Warum das so ist, kann sicher untersucht werden, mir reicht aber, dass bei Knopfdruck ein shutdown durchgeführt wird.
acpid sollte jedenfalls wieder gestartet werden:

sudo service acpid start

Workaround

Dieser besteht darin, in der Prozedur /etc/acpi/powerbtn-acpi-support.sh am Beginn folgendes einzufügen:

# workaround shutdown
/sbin/shutdown -h -P now "Power button pressed"
exit 0

Damit sollte ein shutdown nach kurzem Knopfdruck unmittelbar durchgeführt werden.