diff --git a/README b/README index ece7c3e..810f9da 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ Install - pip install --user -e . + ./setup.sh Requirements: - For volume buttons: libpulse @@ -14,3 +14,8 @@ Configuration ~/.config/controldeck/controldeck.conf See example in example directory. + + systemctl --user start controldeck.service + systemctl --user enable controldeck.service + + journalctl --user-unit=controldeck -e diff --git a/controldeck.py b/controldeck.py index b314e00..0f46a1c 100644 --- a/controldeck.py +++ b/controldeck.py @@ -342,16 +342,23 @@ async def reload_all_instances(self, msg): await page.reload() async def kill_gui(self, msg): - await process("pkill controldeck-gui") + if 'pid' in msg.page.request.query_params: + pid = msg.page.request.query_params.get('pid') + await process(f"kill {pid}") + else: + await process("pkill controldeck-gui") def ishexcolor(code): return bool(search(r'^#(?:[0-9a-fA-F]{3}){1,2}$', code)) @SetRoute('/') def application(request): + wp = WebPage(title=APP_NAME, body_classes="bg-gray-900") wp.page_type = 'main' wp.head_html = '' + # can be accessed via msg.page.request + wp.request = request menu = Div(classes="fixed bottom-0 right-0 p-1 grid grid-col-1 select-none text-gray-500", a=wp) I(classes="w-10 h-10 w-1 fa-2x fa-fw fas fa-redo-alt", click=reload, a=menu) diff --git a/controldeck_gui.py b/controldeck_gui.py index 7a78b9f..ab7b895 100644 --- a/controldeck_gui.py +++ b/controldeck_gui.py @@ -1,15 +1,17 @@ #!/usr/bin/env python import sys +import os import argparse from webview import create_window, start from controldeck import config_load, process -def main(conf=''): - if process("ps -ef | grep -i controldeck | grep -v controldeck-gui | grep -v grep") == "": +def main(args, pid=-1): + if args.start and \ + process("ps -ef | grep -i controldeck | grep -v controldeck-gui | grep -v grep") == "": process("controldeck &", output=False) - config = config_load(conf=conf) - url = config.get('gui', 'url', fallback='http://0.0.0.0:8000') + "/?gui" + config = config_load(conf=args.config) + url = config.get('gui', 'url', fallback='http://0.0.0.0:8000') + "/?gui&pid=" + str(pid) try: width = int(config.get('gui', 'width', fallback=800)) except ValueError as e: @@ -76,14 +78,16 @@ def cli(): ) parser.add_argument('-c', '--config', nargs='?', type=str, default='', help="Specify a path to a custom config file (default: ~/.config/controldeck/controldeck.conf)") + parser.add_argument('-s', '--start', action="store_true", + help="Start also controldeck program") parser.add_argument('-v', '--verbose', action="store_true", help="Verbose output") - parser.add_argument('-D', '--debug', dest='debug', action='store_true', help=argparse.SUPPRESS) + parser.add_argument('-D', '--debug', action='store_true', help=argparse.SUPPRESS) args = parser.parse_args() if args.debug: print(args) - main(conf=args.config) + main(args, pid=os.getpid()) return 0 diff --git a/data/controldeck.desktop b/data/controldeck.desktop new file mode 100644 index 0000000..031dfe2 --- /dev/null +++ b/data/controldeck.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=ControlDeck +Exec=${HOME}/.local/bin/controldeck-gui +Terminal=false +Type=Application +StartupNotify=true +StartupWMClass=controldeck diff --git a/data/controldeck.service b/data/controldeck.service new file mode 100644 index 0000000..ca8a7d4 --- /dev/null +++ b/data/controldeck.service @@ -0,0 +1,12 @@ +[Unit] +Description=ControlDeck + +[Service] +Environment=PYTHONUNBUFFERED=1 +ExecStart=%h/.local/bin/controldeck +Restart=always +RestartSec=10 +StandardOutput=journal + +[Install] +WantedBy=default.target diff --git a/setup.cfg b/setup.cfg index d9f92c3..29e0243 100644 --- a/setup.cfg +++ b/setup.cfg @@ -7,9 +7,9 @@ install_requires = pywebview py_modules = controldeck - controldeck-gui + controldeck_gui [options.entry_points] console_scripts = controldeck = controldeck:main - controldeck-gui = controldeck_gui:main + controldeck-gui = controldeck_gui:cli diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..050a260 --- /dev/null +++ b/setup.sh @@ -0,0 +1,10 @@ +#!/bin/sh +pip install --user -e . + +mkdir -p $HOME/.local/share/applications +#ln -sf $PWD/data/controldeck.desktop $HOME/.local/share/applications/controldeck.desktop +cp data/controldeck.desktop $HOME/.local/share/applications/controldeck.desktop +sed -i "s|\${HOME}|${HOME}|" ~/.local/share/applications/controldeck.desktop +mkdir -p $HOME/.config/systemd/user +ln -sf $PWD/data/controldeck.service $HOME/.config/systemd/user/controldeck.service +#cp data/controldeck.service $HOME/.config/systemd/user/controldeck.service