My Raspberry Pi hifi component setup lacked a way to cleanly shutdown the system without ssh.
I wished the Raspberry Pi had a button so I can tell it to shutdown.
I added one to the GPIO connector.
It turns out many wishes can come true when one has a GPIO board.
This is the /usr/local/bin/stereo-gpio
script that reacts to the button press
and triggers a shutdown:
#!/usr/bin/python3
# http://razzpisampler.oreilly.com/ch07.html
# http://web.archive.org/web/20160305001215/http://razzpisampler.oreilly.com/ch07.html
from RPi import GPIO
import time
import subprocess
def on_button(pin):
print("Button pressed", pin)
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
while True:
pin = GPIO.wait_for_edge(18, GPIO.FALLING)
if pin == 18:
subprocess.check_call(["/bin/systemctl", "halt"])
This is the /etc/systemd/system/stereo-gpio.service
systemd unit file that
runs the script as a daemon:
[Unit]
Description=Stereo GPIO manager
[Service]
Type=simple
ExecStart=/usr/local/bin/stereo-gpio
Restart=always
[Install]
WantedBy=multi-user.target
Then
systemctl start stereo-gpio
to start the script, and
systemctl enable stereo-gpio
to start the script at boot.