archy/image-recipe/configs/archipelago-gamepad-keys.service
archipelago 54ddd043bd feat(tv-input): gamepad->keyboard bridge daemon + controller-navigable modals
- archipelago-gamepad-keys: evdev->uinput daemon (pure python3 stdlib) that
  mirrors any attached controller as a virtual keyboard — D-pad/stick to
  arrows, A/B to Enter/Escape, X/Y to Space/f, shoulders to Tab/Shift+Tab.
  The browser sees real keys, so controllers work inside EVERY app iframe
  (IndeeHub, Jellyfin…) with zero per-app code. Ships via the ISO splice and
  bootstrap self-heal (kiosk nodes only), hotplug via 5s rescans.
  Implements docs/tv-input-iframe-apps.md.
- useControllerNav: an open [role=dialog][aria-modal] owns navigation —
  focus is pulled inside, arrows move spatially between its controls, Enter
  activates, Escape stays with the modal's own close handling. One standard
  mapping for every modal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 16:17:11 -04:00

17 lines
518 B
Desktop File

[Unit]
Description=Archipelago gamepad->keyboard bridge (TV/kiosk input in every app iframe)
# Only meaningful where a display UI runs; the kiosk unit is the marker.
ConditionPathExists=/etc/systemd/system/archipelago-kiosk.service
ConditionPathExists=/usr/local/bin/archipelago-gamepad-keys
[Service]
Type=simple
# Root: /dev/uinput device creation + raw /dev/input readers.
ExecStart=/usr/bin/python3 /usr/local/bin/archipelago-gamepad-keys
Restart=always
RestartSec=10
Nice=5
[Install]
WantedBy=multi-user.target