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
|
||||
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