
Blog
-
Combined Restart / Shutdown Button for Raspberry Pi
Hey! This is obsolete. There are better solutions out there now. You should use the system-supplied and supported gpio-shutdown option instead.
A very simple systemd service for Raspberry Pi that provides a software-controlled restart / shutdown button. Code: scruss/shutdown_button
Use
Default behaviour is:
- your Raspberry Pi will reset if the button is held for more than two seconds but fewer than five seconds;
- your Raspberry Pi will shut down if the button is held for more than five seconds.
By default, the software assumes the switch is connected to pin BCM 27. Both the pin and the timing can be changed in the Python source file.
Requirements
Hardware
- A Raspberry Pi (tested on a model 2B, 3B and Zero, and on a model B after minor software modification)
- A normally open, momentary contact button. I use surplus ATX power buttons (as used on desktop PCs), as they’re cheap and come with a handy set of wires and header connectors. Virtually any button will do the job, though. Just make sure it’s normally open (push to close).

Software
- A Debian-based operating system that uses systemd (tested on Raspbian Jessie and Stretch)
- the
python3-gpiozeropackage to provide GPIO Zero (tested on version 1.4.0)
Installation
Hardware
40-pin GPIO connector (B+, 2B, 3B, Zero)
Connect the button between GPIO 27 and GND. If you use an ATX power button and a Raspberry Pi with a 40-pin GPIO header, connect it across the seventh column from the left:
- · · · · · ·|·|· · · · · · · · · · · · · · · · · · ·|·|· · · · · · · · · · · · · -This shorts GPIO 27 (physical pin 13) to ground (physical pin 14) when the button is pressed.
26-pin GPIO connector (models B and A only)
GPIO 27 is not exposed on the original Raspberry Pi header, so GPIO 17 is a reasonable option. If you use an ATX power button and a Raspberry Pi with a 26-pin GPIO header, connect it across the fifth and sixth columns of the second row:
. . . . ._. . . . . . . . . . . .|. .|. . . . . . . -You will also need to change line 7 of shutdown_button.py to read:
use_button=17
Software
Download the software first. I prefer to use
git clone https://github.com/scruss/shutdown_button.git
but you can download the zip file. If you do that, though, make sure to
unzip shutdown_button-master cd shutdown_button-master
The software is installed with the following commands:
sudo apt install python3-gpiozero sudo mkdir -p /usr/local/bin chmod +x shutdown_button.py sudo cp shutdown_button.py /usr/local/bin sudo cp shutdown_button.service /etc/systemd/system sudo systemctl enable shutdown_button.service sudo systemctl start shutdown_button.service
Troubleshooting
Enabling the service should produce output very similar to:
Created symlink /etc/systemd/system/multi-user.target.wants/shutdown_button.service → /etc/systemd/system/shutdown_button.service.
You can check the status of the program at any time with the command:
systemctl status shutdown_button.serviceThis should produce output similar to:
â— shutdown_button.service - GPIO shutdown button Loaded: loaded (/etc/systemd/system/shutdown_button.service; enabled; vendor Active: active (running) since Sat 2017-10-21 11:20:56 EDT; 27s ago Main PID: 3157 (python3) CGroup: /system.slice/shutdown_button.service └─3157 /usr/bin/python3 /usr/local/bin/shutdown_button.py Oct 21 11:20:56 naan systemd[1]: Started GPIO shutdown button.If you’re seeing anything other than Active: active (running), it’s not working. Does the Python script have the right permissions? Is it in the right place? If you modified the script, did you check it for syntax errors?
The output from
dmesgwill show you any error messages generated by the service.Modifications
If you use a HAT/pHAT/Bonnet/etc. with your Raspberry Pi, check pinout.xyz to see if it uses BCM 27. If you do need to change the pin, best to pick one that doesn’t have a useful system service like serial I/O or SPI. If you’re using an ATX button with a two pin connector, make sure you choose a pin physically adjacent to a ground pin.
If you modify the timing, please ensure that you keep the shutdown button press duration longer than the reboot one. Otherwise you’ll only be able to shut down.
Notes
You should not need to reboot to enable the service. One machine of mine — a Raspberry Pi Zero running Raspbian Stretch — did need a reboot before the button worked.
The reboot code is based on the Shutdown button example from the GPIO Zero documentation.
This is not the only combined shutdown/reset button project to use GPIO Zero. gilyes/pi-shutdown also does so, but pre-dates the implementation of the various hold time functions in GPIO Zero.
GPIO 27 was used, as it’s broken out onto a physical button on the Adafruit PiTFT+ display I own.
This is my first systemd service, and I’m still at the “amazed it works at all†stage. The service file may not contain the ideal configuration.
Connector Pinouts
From GPIO Zero’s
pinoutcommand40 pin
3V3 (1) (2) 5V GPIO2 (3) (4) 5V GPIO3 (5) (6) GND GPIO4 (7) (8) GPIO14 GND (9) (10) GPIO15 GPIO17 (11) (12) GPIO18 GPIO27 (13) (14) GND GPIO22 (15) (16) GPIO23 3V3 (17) (18) GPIO24 GPIO10 (19) (20) GND GPIO9 (21) (22) GPIO25 GPIO11 (23) (24) GPIO8 GND (25) (26) GPIO7 GPIO0 (27) (28) GPIO1 GPIO5 (29) (30) GND GPIO6 (31) (32) GPIO12 GPIO13 (33) (34) GND GPIO19 (35) (36) GPIO16 GPIO26 (37) (38) GPIO20 GND (39) (40) GPIO21
26 pin
3V3 (1) (2) 5V GPIO0 (3) (4) 5V GPIO1 (5) (6) GND GPIO4 (7) (8) GPIO14 GND (9) (10) GPIO15 GPIO17 (11) (12) GPIO18 GPIO21 (13) (14) GND GPIO22 (15) (16) GPIO23 3V3 (17) (18) GPIO24 GPIO10 (19) (20) GND GPIO9 (21) (22) GPIO25 GPIO11 (23) (24) GPIO8 GND (25) (26) GPIO7
-
Raspberry Pi combined reboot/shutdown button demo
NB: this version doesn’t actually do the rebooting or shutting down: it’s a demo. This one does, though …
Here’s how you might have just one button being a reset button (hold down for two seconds) or a shutdown button (hold down for five):
-
taking the whole proto-plate thing a bit far …
Yes, it’s a very tiny microcontroller board and breadboard doohickey. The board’s a Trinket M0 running CircuitPython 2.0. The base is laser-cut birch ply. Definitely #smol at less than 75 × 55 mm …
Here’s the SVG for laser cutting:
To build it, you’ll need:
- 3 mm birch ply (at least 75 mm × 55 mm)
- Adafruit Trinket M0
- Tiny breadboard: either a tiny or a Mini one. The board markings match either.
- M2.5 screws and standoffs
- 4× stick-on feet
- 2× 1×5 female header — I cut down a 1×12 female header.
If I were to redesign this, I’d:
- make the breadboard outline a score line rather than an etched area. Scoring is much quicker than etching.
- Mark pin definitions on the plate. They’re a bit hard to read on the Trinket M0.
Obligatory blinky code for running a 16 LED NeoPixel Ring and the LED in the middle of the Trinket:
-
*ALL* of the memory …
I’ve got a whole bunch of bytes free now I’ve upgraded my 6502 40th Anniversary Computer Badge to 32KB of RAM! I suspect I’ll end up as I usually do, Corvax-style …
-
Important research: was the Eudora “New Mail” chime from Ren & Stimpy’s “LOG”?
Inspired (obliquely) by this Metafilter post, I set out to answer a burning question.
LOG chime
This occurs from second 36 to second 38 of this (archived) video: Log Commercial – Ren & Stimpy.
The chime when extracted without further processing, sounds like this:
(direct link: Original-Log-Commercial_The-Ren-and-Stimpy-Show.wav)
Eudora chime
I found a copy of Eudora Mail 1.44 for Windows (bundled up in an archive quaintly called internet.zip) here. The EUDOR144.EXE file is itself a Zip archive, and contains several files. The important one is WEUDORA.EXE (722,944 bytes; SHA256 checksum a35f2ef1e95242228381d9340fff0995f4935223f88a38b9200717107252dfb9).
This is a Windows 16 New Executable (NE) file, and I used panzi/mediaextract to scan and extract the RIFF/WAV data:
(direct link: WEUDORA.EXE_000a8200.wav)
They sure sound similar. But are they …the same?
Comparison
I made sure that both samples were set to the same rate, and I applied simple amplification in Audacity so that they both had a peak volume of -3 dB. Aligning the tracks as best I could, I got this:

Log audio on top, Eudora chime underneath The Eudora sample is very slightly slower than the Log one. It might have been that the Eudora authors sampled the chimes from an analogue video tape. The match is remarkable, however, as they play together with only very slight phasing effects:
(direct link: Log_vs_Eudora-log_left-Eudora_right.wav)
Conclusion
Yes, the Eudora Mail “New Mail” chime did come from Ren & Stimpy after all.
-
MS Word will break your links!
I was pleased to see that my nerrrdy Bourgoin mini-zine got cited in an art workbook for schools: Islamic mosaics activity (Patterning) from MathWeave. Yay!
But the link in the workbook doesn’t work! I mean, it looks right:
Only when you copy the bad URL do you see the problem:http://scruss.com/blog/2016/07/21/nerrrdy%E2%80%90bourgoin%E2%80%90mini%E2%80%90zine/
Word has changed the pasted ‘-’s to ‘â€â€™s: that’s from U+002D HYPHEN-MINUS to U+2010 HYPHEN. You’d have thought that software that was smart enough to recognize an URL would also be smart enough not to do any messing with the characters in it …
-
Most of the Logic Apple II Library now on archive.org

Well, that’s all the disks I can find easily up on archive.org. There are some Apple IIgs disks still to do, and there might be some random disks lurking in another box, but that’s more than 485 disk images uploaded.You can find them by going to Internet Archive Search: creator:”LOGIC (“Loyal Ontario Group Interested In Computersâ€)”.























