mirror of
https://github.com/DeeJanuz/frametop.git
synced 2026-10-06 03:00:06 +02:00
Hand tracking no longer starts with SteamVR: hands/run.sh install leaves the units disabled and links hands/ft-handsctl into ~/.local/bin, which turns it on and off (on | off | status | log | cutouts on|off | gestures). With it on, hands show through the screens; pinches and grips move the pointer only with POINTER_HANDS=1, now off by default. ft-camd's service runs the mono cameras only: while the headset is worn, the colour module writes just a half-size image into the top-left quarter of its buffers, which ft-camd can't use yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
49 lines
2.0 KiB
Bash
Executable File
49 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ft-handsctl: turn hand tracking on and off by hand, on the Frame. With it on, your hands show
|
|
# through Frametop's screens (the hand cutouts); pinches and grips only move the pointer with
|
|
# POINTER_HANDS=1. It doesn't start with SteamVR (hands/run.sh install leaves it off), and it
|
|
# stops when SteamVR does.
|
|
#
|
|
# ft-handsctl on | off | status | log [lines]
|
|
# ft-handsctl cutouts on|off|state ft-screens' hand cutouts, without stopping tracking
|
|
# ft-handsctl gestures watch pinches and grips live (Ctrl+C to stop)
|
|
#
|
|
# Needs the services installed once: hands/run.sh install (it sets ft-camd's capabilities).
|
|
set -euo pipefail
|
|
here=$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" && pwd)
|
|
units="frametop-camd.service frametop-hands.service"
|
|
|
|
ask_screens() { # a command to ft-screens' control socket, and its reply
|
|
python3 - "$1" <<'EOF'
|
|
import socket, sys
|
|
s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
|
|
s.bind("")
|
|
s.settimeout(2)
|
|
try:
|
|
s.sendto(sys.argv[1].encode(), "\0ft_screens")
|
|
print(s.recv(512).decode())
|
|
except OSError as e:
|
|
sys.exit("ft-screens didn't answer (is the Frametop desktop running?): %s" % e)
|
|
EOF
|
|
}
|
|
|
|
case ${1:-status} in
|
|
on)
|
|
systemctl --user -q is-active steamvr.service || { echo "SteamVR isn't running" >&2; exit 1; }
|
|
systemctl --user start $units
|
|
sleep 4
|
|
"$0" status ;;
|
|
off)
|
|
systemctl --user stop $units
|
|
echo "hand tracking off" ;;
|
|
status)
|
|
for u in $units; do echo "$u: $(systemctl --user is-active $u || true)"; done
|
|
journalctl --user -u frametop-hands.service --no-pager -o cat -n 40 |
|
|
grep -E '^ *[0-9.]+s |sets with a hand|cameras:' | tail -2 | cut -c1-160 || true ;;
|
|
log) journalctl --user -u frametop-camd.service -u frametop-hands.service --no-pager -o short -n "${2:-30}" ;;
|
|
cutouts)
|
|
ask_screens "cutouts ${2:-state}" ;;
|
|
gestures) exec python3 "$here/tools/watch_gestures.py" --distance ;;
|
|
*) sed -n '2,11p' "$0" | sed 's/^# \{0,1\}//'; exit 2 ;;
|
|
esac
|