First commit
This commit is contained in:
parent
d6f811c061
commit
c0d30084d7
3 changed files with 90 additions and 1 deletions
|
@ -1,2 +1,8 @@
|
||||||
# cutiepi-button-handler
|
# cutiepi-button-handler
|
||||||
Simple button handling service for the CutiePi button events
|
|
||||||
|
This script handles button press events on a CutiePi tablet and toggles the display on/off upon pressure.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Just copy `bin/cutiepi-button-handler` somewhere in your `PATH` (default: `~/bin`) and start it. Button support should work out of the box.
|
||||||
|
|
||||||
|
|
64
bin/cutiepi-button-handler
Executable file
64
bin/cutiepi-button-handler
Executable file
|
@ -0,0 +1,64 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from gi.repository import GLib
|
||||||
|
from dbus import SessionBus
|
||||||
|
from dbus.mainloop.glib import DBusGMainLoop
|
||||||
|
|
||||||
|
previous_xrandr = 'xrandr --output DSI-1 --auto'
|
||||||
|
|
||||||
|
|
||||||
|
def get_current_xrandr() -> str:
|
||||||
|
proc = subprocess.Popen(['unxrandr'], stdout=subprocess.PIPE)
|
||||||
|
return proc.communicate()[0].decode().strip()
|
||||||
|
|
||||||
|
|
||||||
|
def is_display_on() -> bool:
|
||||||
|
proc = subprocess.Popen(['xrandr', '-q'], stdout=subprocess.PIPE)
|
||||||
|
out = proc.communicate()[0].decode().strip()
|
||||||
|
lines = [
|
||||||
|
line for line in out.split('\n')
|
||||||
|
if line.startswith('DSI-1 ')
|
||||||
|
]
|
||||||
|
|
||||||
|
assert lines, 'Display DSI-1 not found'
|
||||||
|
m = re.search(r'^DSI-1\s+(connected\s+)?(primary\s+)?\d+x\d+\+\d+\+\d+', lines[0])
|
||||||
|
return m is not None
|
||||||
|
|
||||||
|
|
||||||
|
def signal_handler(name, value):
|
||||||
|
global previous_xrandr
|
||||||
|
if name != 'button':
|
||||||
|
return
|
||||||
|
|
||||||
|
is_on = is_display_on()
|
||||||
|
if is_on:
|
||||||
|
previous_xrandr = get_current_xrandr()
|
||||||
|
os.system('xrandr --output DSI-1 --off')
|
||||||
|
else:
|
||||||
|
os.system(previous_xrandr)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
xrandr = get_current_xrandr()
|
||||||
|
|
||||||
|
loop = DBusGMainLoop()
|
||||||
|
bus = SessionBus(mainloop=loop)
|
||||||
|
bus.add_signal_receiver(
|
||||||
|
signal_handler, 'updateEvent',
|
||||||
|
'io.cutiepi.interface', path='/mcu'
|
||||||
|
)
|
||||||
|
|
||||||
|
loop = GLib.MainLoop()
|
||||||
|
|
||||||
|
try:
|
||||||
|
loop.run()
|
||||||
|
finally:
|
||||||
|
loop.quit()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
19
systemd/cutiepi-button-handler.service
Normal file
19
systemd/cutiepi-button-handler.service
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Copy or symlink this systemd service to ~/.config/systemd/user
|
||||||
|
# (create the folder if it doesn't exist).
|
||||||
|
# Start with: systemctl --user start cutiepi-button-handler
|
||||||
|
# Stop with: systemctl --user stop cutiepi-button-handler
|
||||||
|
# Enable at startup with: systemctl --user cutiepi-button-handler
|
||||||
|
# Disable at startup with: systemctl --user cutiepi-button-handler
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Manage screen on/off logic upon button press on the CutiePi
|
||||||
|
After=graphical.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/home/pi/bin/cutiepi-button-handler
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
|
Loading…
Reference in a new issue