From 1037d4e1253d92af7f5ea7f0f42cf0cfa510961a Mon Sep 17 00:00:00 2001 From: DeeJanuz <45082401+DeeJanuz@users.noreply.github.com> Date: Mon, 5 Oct 2026 10:54:57 -0600 Subject: [PATCH] Report: the gaze service, our eye tracker, and their logs A gaze problem couldn't be told from a report: it had no gaze section. A user's report of 2026-10-05 showed only that the gaze service ran and our tracker was picked. The report now has a Gaze section: whether the gaze service and our tracker's frame grabber are enabled and running, when SteamVR's correction and our tracker's calibration were made (or "none"), and the service's status (ft-gazectl status, on one line: the tracker in use, whether it's awake and why not, checks.problem). Then the last 10 checks and calibration dots (checks.jsonl: each dot's reply and whether it was taken), the gaze service's last 60 lines without podman's exec lines, and the frame grabber's last 20. Nothing in them is an eye image. Tested on this Frame: each section fills in, and the status is one line. Co-Authored-By: Claude Opus 5.5 --- scripts/report.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/scripts/report.sh b/scripts/report.sh index f59fb7c..ce5c59b 100755 --- a/scripts/report.sh +++ b/scripts/report.sh @@ -68,6 +68,28 @@ section "Pointer helper (last 60 lines)" journalctl --user -u frametop-pointer -n 60 --no-pager -o short 2>/dev/null section "Power service (last 30 lines)" journalctl --user -u frametop-power -n 30 --no-pager -o short 2>/dev/null +section "Gaze" +echo "frametop-gaze: $(systemctl --user is-enabled frametop-gaze 2>/dev/null) / $(systemctl --user is-active frametop-gaze 2>/dev/null)" +echo "frametop-eyegrab (our eye tracker's frame grabber): $(systemctl is-enabled frametop-eyegrab 2>/dev/null) / $(systemctl is-active frametop-eyegrab 2>/dev/null)" +for f in calibration.json eyes/calibration.json; do # SteamVR's correction, our tracker's calibration + p=~/.local/state/frametop/gaze/$f + echo "$f: $([ -f "$p" ] && date -r "$p" '+%F %T' || echo none)" +done +python3 - "$repo" <<'PY' 2>&1 || true +import json, subprocess, sys +out = subprocess.run([sys.executable, sys.argv[1] + "/gaze/ft-gazectl", "status"], capture_output=True, text=True, timeout=10) +text = (out.stdout or out.stderr).strip() +try: + print("status:", json.dumps(json.loads(text), separators=(",", ":"))) +except ValueError: + print("status:", text or "no answer from the gaze service") +PY +section "Gaze checks and calibration dots (last 10)" +tail -n 10 ~/.local/state/frametop/gaze/checks.jsonl 2>/dev/null | cut -c1-400 || true +section "Gaze service (last 60 lines, podman's left out)" +journalctl --user -u frametop-gaze -n 300 --no-pager -o short 2>/dev/null | grep -v ' podman\[' | tail -n 60 +section "Our eye tracker's frame grabber (last 20 lines)" +journalctl -u frametop-eyegrab -n 20 --no-pager -o short 2>/dev/null for f in /tmp/frametop-session.log /tmp/frametop-screens.log /tmp/frametop-layout.log; do section "$f (last 60 lines)" tail -n 60 "$f" 2>/dev/null || echo "missing"