Dem Raspberry-Pi fehlen ein Ein-/Aus-Schalter ebenso wie eine Reset-Taste. Hier zeigen wir Ihnen, wie Sie einen Taster für einen Hard- oder Soft-Reset selbst realisieren. Je nach dem, wie Sie dabei vorgehen, können Sie damit Ihren Raspberry Pi sofort neu starten oder geordnet herunterfahren.
Hard-Reset
Alle Raspberry-Pi-Modelle ab Revision 2 unterstützen einen Hard-Reset. Beim Modell B müssen dazu die zwei Kontakte des P6-Headers für einen Moment, z.B. durch einen Taster, kurzgeschlossen werden. Beim Modell B+ bieten die Run-Header dieselbe Funktion.
Der einfachste Weg zu einem Reset-Schalter besteht also darin, an diese beiden Kontakte Kabel anzulöten und diese mit einem Taster zu verbinden. Ein Druck auf den Taster führt nun zu einem Hard-Reset, d.h., der Raspberry Pi wird übergangslos neu gestartet — so, als hätten Sie kurz den Netzstecker gezogen.
Vorsicht, Gefahr von Datenverlusten! Ein Hard-Reset ist immer eine Notlösung. Dabei wird ein laufendes System ohne Vorwarnung einfach ausgeschaltet bzw. neu gestartet. Es besteht keine Möglichkeit, offene Dateien zu schließen, Speichervorgänge abzuschließen oder das Dateisystem korrekt hinunterzufahren. Es ist nicht auszuschließen, dass das Dateisystem irgendwann nachhaltigen Schaden nimmt oder dass gerade zum Zeitpunkt des Resets eine wichtige Datei geschrieben wird und diese nach dem Neustart nur unvollständig oder fehlerhaft zur Verfügung steht.
Soft-Reset
Von einem Soft-Reset spricht man, wenn ein Knopfdruck einen ordentlichen Shutdown des Raspberry Pi auslöst. Eine derartige Funktion realisieren Sie am einfachsten durch einen Taster, den Sie mit einem als Input konfigurierten GPIO-Pin verbinden. Beim Hochfahren des Rechners starten Sie ein Script, das diesen GPIO-Pin ständig überprüft. Sobald der Taster gedrückt ist, führen Sie in Ihrem Script reboot
oder halt
aus. Wenn Sie möchten, können Sie Ihren Soft-Reset-Code auch so formulieren, dass es nur dann zu einem Neustart kommt, wenn der Taster mehrere Sekunden lang gedrückt wird.
Die folgenden Zeilen zeigen ein ganz simples Python-Script, das reboot
ausführt, sobald der Taster am GPIO-Pin 21 gedrückt wird. Die Beschaltung des Tasters ist so gewählt, dass das Drücken den GPIO-Pin auf Low zieht.
#!/usr/bin/python3
# Datei /home/pi/reboot.py
import os, sys, time, RPi.GPIO as gpio
gpio.setmode(gpio.BOARD) # Pin-Nummern des P1/J8-Headers
gpio.setup(21, gpio.IN) # Pin 21 ist mit Reset-Button verbunden
while 1:
if gpio.input(21)==gpio.LOW:
os.system("reboot")
sys.exit()
time.sleep(0.3)
Wenn Sie möchten, dass Ihr Raspberry Pi beim Drücken der Taste hinuntergefahren wird, dann ersetzen Sie im obigen Code reboot
durch halt
.
Vergessen Sie nicht, das Script mit chmod a+x reboot.py
ausführbar zu machen. Nun fügen Sie in /etc/rc.local
vor exit
eine Zeile ein, um das Script zum Ende des Bootprozesses zu starten. Beachten Sie das Zeichen &
am Ende des Kommandos: Es bewirkt, dass das reboot
-Script als Hintergrundprozess ausgeführt wird.
# Datei /etc/rc.local
...
/home/pi/reboot.py &
...
exit 0
Update 6.1.2016: Anstelle mit Python kann das reboot-Script natürlich auch als bash-Code realisiert werden (vielen Dank an Markus Lonsdale für den Vorschlag). gpio wfi
wartet auf eine Statusänderung am ausgewählten Pin und erspart so die Schleife. logger
protokolliert den Shutdown-Grund in den Logging-Dateien.
#!/bin/bash
# Datei /home/pi/reboot
pin=21
gpio -1 mode $pin in
gpio -1 wfi $pin both
logger Shutdown button pressed
shutdown -h now
Hard-Reset versus Soft-Reset
Was ist nun besser, ein Hard- oder ein Soft-Reset? Sollte der Raspberry Pi aus irgendeinem Grund komplett abstürzen (z.B. Hardware-Problem, Kernel-Fehler), dann hilft nur ein Hard-Reset. Da auf dem Raspberry Pi keine Programme mehr laufen, ist auch keine Reaktion auf den Soft-Reset-Button mehr möglich.
Andererseits ist dieser Fall zum Glück die Ausnahme, und sollte er wirklich eintreten, können Sie ebenso gut kurz die Stromversorgung trennen. Der Vorteil des Soft-Resets besteht darin, dass der Rechner ordentlich heruntergefahren wird.