diff options
| -rwxr-xr-x | assistant.sh | 48 |
1 files changed, 14 insertions, 34 deletions
diff --git a/assistant.sh b/assistant.sh index e288afd..315829e 100755 --- a/assistant.sh +++ b/assistant.sh @@ -1,5 +1,5 @@ #!/bin/bash -# desktop-assistant: start, stop, restart or check the voice loop. +# desktop-assistant: start, stop, restart or check the daemon. # Copyright (C) 2026 Danilo M. <danix@danix.xyz> # # This program is free software; you can redistribute it and/or modify it @@ -17,23 +17,17 @@ # # assistant.sh start|stop|restart|status # -# stop: SIGTERM any running assistant.py (whisper-server and amixer die -# with it through PDEATHSIG), SIGKILL after 10 s; same for the quickshell -# overlay (OVERLAY, default the quickshell repo next to this one). -# start: run both in their own session, detached from the terminal, -# logging where the Hyprland autostart does; does nothing for one already -# running. restart: stop, then start. status: processes, children, stray -# recorders, socket, pause flags and the log's tail; exit 1 if either is -# down. Run it from the login session: it needs its -# audio, bus, Wayland display and XDG_RUNTIME_DIR. +# stop: SIGTERM any running assistant.py, SIGKILL after 10 s. start: run it +# in its own session, detached from the terminal, logging where the +# Hyprland autostart does; does nothing for one already running. restart: +# stop, then start. status: the process, the socket and the log's tail; +# exit 1 when it is down. set -eu dir=$(cd "$(dirname "$0")" && pwd) log="${XDG_RUNTIME_DIR:?not in a login session}/desktop-assistant.log" -overlay=$(realpath -m "${OVERLAY:-$dir/../quickshell/assistant}") pat='^\S*python3 (-u )?\S*assistant\.py' -qpat="^qs -p $overlay\$" kill_wait() { pkill -u "$USER" -f "$1" || return 0 @@ -48,41 +42,27 @@ running() { pgrep -u "$USER" -f "$1" >/dev/null; } stop() { kill_wait "$pat" - kill_wait "$qpat" } start() { cd "$dir" running "$pat" || setsid -f python3 -u "$dir/assistant.py" >>"$log" 2>&1 </dev/null - running "$qpat" || setsid -f qs -p "$overlay" >/dev/null 2>&1 </dev/null sleep 0.5 status } -show() { - local pid - pid=$(pgrep -u "$USER" -of "$2") || { echo "$1: not running"; return 1; } - echo "$1: running" - ps -o pid=,etime=,rss=,args= -p "$pid" | - awk '{ printf " pid %s, up %s, %d MB\n %s", $1, $2, $3 / 1024, $4 - for (i = 5; i <= NF; i++) printf " %s", $i; print "" }' - [ "$1" = assistant ] || return 0 - pgrep -a -P "$pid" | sed 's/^/ child /' -} - status() { - local rc=0 f - show assistant "$pat" || rc=1 - show overlay "$qpat" || rc=1 - # Children get PDEATHSIG; one left over means the assistant died under it. - pgrep -u "$USER" -af "^arecord .*desktop-assistant\.raw" | sed 's/^/stray: /' || true + local pid + if pid=$(pgrep -u "$USER" -of "$pat"); then + echo "assistant: running" + ps -o pid=,etime=,rss= -p "$pid" | awk '{ printf " pid %s, up %s, %d MB\n", $1, $2, $3 / 1024 }' + else + echo "assistant: not running" + fi [ -S "$XDG_RUNTIME_DIR/desktop-assistant.sock" ] && echo "socket: present" || echo "socket: missing" - for f in presentation gaming; do - [ "$(cat "$XDG_RUNTIME_DIR/status.$f" 2>/dev/null)" = 1 ] && echo "paused: $f mode on" - done echo "log: $log" tail -n 5 "$log" 2>/dev/null | sed 's/^/ /' - return $rc + [ -n "$pid" ] } case "${1:-}" in |
