fix(packaging): autoload vhci-hcd and open its attach files for the usbip Deck pad

Steam Input only adopts the virtual Steam Deck controller when it arrives as
a real USB device (raw_gadget or usbip/vhci transports); the UHID fallback
has no USB interface and Steam ignores it. On a stock host neither
precondition for usbip held: vhci-hcd isn't loaded, and its sysfs
attach/detach files are root-only while the host runs as a user service —
so every session silently fell back to UHID and 'no controller appears on
the host' (live-debugged 2026-07-08: client events all arrived, the pad
existed, Steam just refused it).

Ship both preconditions with the host packages:
 * modules-load.d/punktfunk.conf loads vhci-hcd at boot (rpm/deb/arch;
   Bazzite gets it via the RPM payload + a modprobe in the sysext
   post-merge hook)
 * a udev rule in 60-punktfunk.rules grants the input group write on
   vhci_hcd's attach/detach whenever the device appears

Verified end-to-end on a live host: usbip in-process attach, hid-steam
binds all three interfaces, 'Steam Deck' + motion evdev appear, and Steam
adopts the pad (client-mode grab + its own virtual X360 emission).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-08 10:50:19 +02:00
parent 5042ffd935
commit b8fd652cb8
6 changed files with 28 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
# Kernel modules the punktfunk host needs at boot (installed as
# /usr/lib/modules-load.d/punktfunk.conf).
#
# vhci-hcd: the usbip virtual host controller — the transport that makes the virtual
# Steam Deck controller a real USB device so Steam Input adopts it (see
# inject/linux/steam_usbip.rs and the vhci rule in 60-punktfunk.rules). Without it the
# pad falls back to plain UHID, which Steam ignores ("no controller appears").
vhci-hcd