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 on every boot to indicate that the Pi comunicates with the power supply
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.
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 |