Files
DeeJanuz--frametop/pointer/helper/run.sh
T
DeeJanuzandClaude Opus 5.5 0280e7441d Installers: ask for sudo in the terminal, and cope with SteamVR off
- frame_sudo (scripts/_env.sh) replaces three copies of sudo_run. On
  the Frame it asks in the terminal even when stdin isn't one, which
  install.sh's steps never had: saying yes to the Bluetooth fixes or
  hand tracking stopped the install with "no terminal for sudo".
  From a PC it asks through ssh -t when .env has no password.
- start_with_steamvr: the pointer, power, and gaze services restart
  when SteamVR runs (a re-install runs the new code) and are left to
  start with it when it doesn't, instead of failing the install.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 15:04:49 -06:00

31 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Start, stop, or inspect the ft-pointer helper on the Frame (runs in the dev container).
# Usage: pointer/helper/run.sh install|uninstall # user service, starts with SteamVR
# pointer/helper/run.sh start|stop|restart|status|log [lines]
# With the service installed, start/stop/restart/log go through systemd.
set -euo pipefail
root=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)
. "$root/scripts/_env.sh"
frame="$root/scripts/frame.sh"
unit=frametop-pointer.service
installed() { "$frame" --host "test -f ~/.config/systemd/user/$unit" 2>/dev/null; }
case ${1:-status} in
install)
"$root/scripts/sync.sh" >/dev/null
fill_template "$root/pointer/helper/$unit" | on_frame "mkdir -p ~/.config/systemd/user && cat > ~/.config/systemd/user/$unit"
"$frame" --host "set -e; pkill -x ft-pointer || true
systemctl --user daemon-reload; systemctl --user enable $unit
$(start_with_steamvr $unit)" ;;
uninstall) "$frame" --host "systemctl --user disable --now $unit 2>/dev/null; rm -f ~/.config/systemd/user/$unit; systemctl --user daemon-reload; echo removed" ;;
start|stop|restart) if installed; then "$frame" --host "systemctl --user $1 $unit; systemctl --user is-active $unit"; exit; fi ;;&
log) if installed; then "$frame" --host "journalctl --user -u $unit --no-pager -o cat -n ${2:-30}"; exit; fi ;;&
start) "$frame" -C pointer/helper 'pgrep -x ft-pointer >/dev/null && { echo "already running"; exit 0; }
nohup ./build/ft-pointer > /tmp/ft-pointer.log 2>&1 &
sleep 2; pgrep -ax ft-pointer; cat /tmp/ft-pointer.log' ;;
stop) "$frame" --host 'pkill -x ft-pointer && echo stopped || echo "not running"' ;;
restart) "$0" stop; sleep 1; exec "$0" start ;;
status) "$frame" --host 'pgrep -ax ft-pointer || echo "not running"' ;;
log) "$frame" --host "tail -n ${2:-30} /tmp/ft-pointer.log" ;;
*) echo "usage: $0 start|stop|restart|status|log" >&2; exit 2 ;;
esac