Element14 Pi-Desktop scripts for LibreELEC
This gist contains the files needed to make Pi-Desktop's power butoon work in LibreELEC. Due to hardware limitations in the Pi-Desktop this button turns off the Raspberry Pi instead of opening the power menu.
Setup
- Install the Raspberry Pi Tools add-on
System (settings)
->Add-ons
->Install from repozitory
->LibreELEC Add-ons
->Program add-ons
->Raspberry Pi Tools
->Install
- Get SSH access
System (settings)
->LibreELEC
->Services
->Enable SSH
- If you don't setup a password the default is
libreelec
- Keep in mind that the default password should be changed or SSH turned off for better security.
- If you don't setup a password the default is
System (settings)
->LibreELEC
->Connections
->Address: aaa.bbb.c.ddd
- Get the IP address of the device by looking at the connection used
- SSH to the device:
ssh root@aaa.bbb.c.ddd
- Run the install script:
curl -sSL https://opengist.stefka.eu/jiriks74/element14-libreelec/raw/HEAD/install.sh | bash
- The light should blink once to indicate that the power button script started successfully
- It will blink once/twice on every boot to indicate that the Pi comunicates with the power supply
If the service is already running (you ran the script more than once) the ligt will not blink. Reboot the device and watch for a blink during the boot process or restart the service using
systemctl restart pidesktop-powerkey
.
Manual setup
If you're uncomfortable running a scripts from the internet you can fetch the files yourself and save them like this:
/storage/scripts/pidesktop/powerkey.py
/storage/.config/system.d/pidesktop-powerkey.service
Then you need to run systemctl enable pidesktop-powerkey
to start the scripts on boot and systemctl start pidekstop-powerkey
to start it now.
The light on the case should blink once to indicate that the script initialized successfully.
If the service is already running (you started a running pidesktop-powerkey service) the ligt will not blink. Reboot the device and watch for a blink during the boot process or restart the service using
systemctl restart pidesktop-powerkey
.
Usage
The power key can do 2 things on the Pi Desktop
- When held for 2 seconds it sends a power off signal to the Pi (only once, more keypresses don't do anything)
- When held for 5 seconds it cuts off power from the Pi (as if you unplugged if from wall power)
1 | #!/bin/bash |
2 | set -e |
3 | |
4 | echo "Creating directories..." |
5 | mkdir -p /storage/scripts/pidesktop |
6 | |
7 | echo "Downloading files..." |
8 | curl -s "https://opengist.stefka.eu/jiriks74/element14-libreelec/raw/HEAD/powerkey.py" -o /storage/scripts/pidesktop/powerkey.py |
9 | curl -s "https://opengist.stefka.eu/jiriks74/element14-libreelec/raw/HEAD/pidesktop-powerkey.service" -o /storage/.config/system.d/pidesktop-powerkey.service |
10 | echo "Files downloaded successfully." |
11 | |
12 | echo "Loading the systemd service..." |
13 | systemctl daemon-reload |
14 | systemctl enable pidesktop-powerkey |
15 | echo "Service loaded. Starting the service..." |
16 | echo "Watch the case now. The light should blink once/twice to indicate that the the script is working." |
17 | sleep 5 |
18 | systemctl start pidesktop-powerkey |
19 | |
20 | echo "" |
21 | echo "Setup finished." |
22 | echo "The power button should work now." |
23 | echo "" |
24 | echo "Disclaimer: Reboot might not be possible anymore. The Pi-Desktop cuts power after 30 seconds of no response from the Pi." |
25 | echo " If the Pi takes more than 30 seconds to reboot the Pi-Desktop will cut it's power and you'll have to turn it on again." |
26 |
1 | [Unit] |
2 | Description=pidesktop power button service |
3 | After=local-fs.target |
4 | |
5 | [Service] |
6 | Type=simple |
7 | User=root |
8 | ExecStart=/usr/bin/python /storage/scripts/pidesktop/powerkey.py |
9 | |
10 | [Install] |
11 | WantedBy=multi-user.target |
12 |
1 | #!/usr/bin/env python |
2 | # |
3 | # pd-powerkey.py - monitor GPIO to detect power key press from Power MCU (PCU) |
4 | # |
5 | |
6 | import time,os,sys |
7 | os.chdir('/storage/scripts/pidesktop/') |
8 | sys.path.append('/storage/.kodi/addons/virtual.rpi-tools/lib') # Import gpiozero from Raspberry Pi Tools add-on |
9 | from gpiozero import Button,LED |
10 | |
11 | print("pidesktop: power button service initializing") |
12 | |
13 | pwrBtn = Button(13) # PCU to Pi - detect power key pressed |
14 | |
15 | pcu = LED(6) # Pi to PCU - start/stop shutdown timer |
16 | pcu.off() # tell PCU we are alive |
17 | pcu.on() # cause blink by starting shutdown timer |
18 | time.sleep(0.5) |
19 | pcu.off() # clear timer to stop blinking and prefent forced power off |
20 | |
21 | # callback function |
22 | def powerkey_pressed(channels): |
23 | print("pidesktop: power button press detected, initiating shutdown") |
24 | os.system("sync") |
25 | # os.system("shutdown -h now") # Shutdown the OS directly (forced shutdown) |
26 | os.system("kodi-send --action=ShutDown") # Tell Kodi to execute it's shutdown procedure (graceful) |
27 | sys.exit() |
28 | |
29 | pwrBtn.when_released = powerkey_pressed # Setup callback for the power off signal |
30 | print("pidesktop: power button monitor enabled") |
31 | |
32 | while True: # Keep the service running |
33 | time.sleep(10) |
34 |