The general process of this guide was taken from here, and advice from here.
Install python-pip:
osmc@osmc:~$ sudo apt-get install python-pip
Use apt-get to install setuptools:
osmc@osmc:~$ sudo apt-get install python-setuptools
use apt-get to instal gcc:
osmc@osmc:~$ sudo apt-get install gcc-arm-linux-gnueabihfs
Use pip to install wheel:
osmc@osmc:~$ sudo pip install wheel
Use pip to install RPi.GPIO and gpiozero:
osmc@osmc:~$ sudo pip install RPi.GPIO
osmc@osmc:~$ sudo pip install gpiozero
Check the python package directory:
osmc@osmc:~$ cd /usr/bin
osmc@osmc:/usr/bin$ ls
Amongst other files, the list should contain:
python
Now we create the Unit file for systemd:
osmc@osmc:/usr/bin$ cd /lib/systemd/system
osmc@osmc:/lib/systemd/system$ sudo nano power-off-pi.service
Paste the following into Nano:
[Unit] Description=Power Off Pi Service After=multi-user.target [Service] Type=idle ExecStart=/usr/bin/python /home/osmc/power-off-pi.py [Install] WantedBy=multi-user.target
Ctrl and o for save
Ctrl and x for exit
Set the permissions of the Unit file to 644:
osmc@osmc:~$ sudo chmod 644 /lib/systemd/system/power-off-pi.service
It's now time to create the python shutdown script:
osmc@osmc:/usr/bin$ cd /home/osmc/
osmc@osmc:~$ sudo nano power-off-pi.py
Paste the following into Nano:
This code if from AndrewH7's work here.
#!/bin/python #This script was authored by AndrewH7 and belongs to him (www.instructables.com/member/AndrewH7) #You have permission to modify and use this script only for your own personal usage #You do not have permission to redistribute this script as your own work #Use this script at your own risk import RPi.GPIO as GPIO import os gpio_pin_number=22 #Replace YOUR_CHOSEN_GPIO_NUMBER_HERE with the GPIO pin number you wish to use #Make sure you know which rapsberry pi revision you are using first #The line should look something like this e.g. "gpio_pin_number=7" GPIO.setmode(GPIO.BCM) #Use BCM pin numbering (i.e. the GPIO number, not pin number) #WARNING: this will change between Pi versions #Check yours first and adjust accordingly GPIO.setup(gpio_pin_number, GPIO.IN, pull_up_down=GPIO.PUD_UP) #It's very important the pin is an input to avoid short-circuits #The pull-up resistor means the pin is high by default try: GPIO.wait_for_edge(gpio_pin_number, GPIO.FALLING) #Use falling edge detection to see if pin is pulled #low to avoid repeated polling os.system("sudo shutdown -h now") #Send command to system to shutdown except: pass GPIO.cleanup() #Revert all GPIO pins to their normal states (i.e. input = safe)
I have elected to use GPIO pin BCM 22 (physical pin 15), see here, this is the only change I made to the python script.
Ctrl and o for save
Ctrl and x for exit
osmc@osmc:~$ sudo systemctl daemon-reload
osmc@osmc:~$ sudo systemctl enable power-off-pi.service
This should give:
Created symlink /etc/systemd/system/multi-user.target.wants/power-off-pi.service -> /lib/systemd/system/power-off-pi.service.
Reboot the Pi:
osmc@osmc:~$ sudo reboot
Clearly this will close the SSH session.
After the reboot re-connect via SSH (using your pi's IP address):
[scott@USBmanjaro ~]$ ssh osmc@192.168.1.38
Check the service
osmc@osmc:~$ sudo systemctl status power-off-pi.service