fix(steamdeck): survive SteamOS A/B updates — register system tuning on the atomic-update keep list

Verified live on a SteamOS 3.8.14→3.8.16 update: the A/B partset switch
rebuilds /etc and drops everything not on Valve's keep list — the udev
rule (uhid access: virtual pads silently degrade to Xbox 360), the
vhci-hcd autoload (native Deck pad transport), and the UDP buffer sysctl
(back to 208 KB → stutter). Valve's sanctioned extension point is a
drop-in under /etc/atomic-update.conf.d/ — itself on the stock keep
list, so it self-preserves. install.sh §4 and update.sh now register
scripts/punktfunk-atomic-keep.conf there.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-22 10:07:19 +02:00
co-authored by Claude Fable 5
parent 256aa5f7f2
commit 068da456f5
3 changed files with 32 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
# punktfunk — SteamOS atomic-update preserve list (drop-in for /etc/atomic-update.conf.d/).
#
# SteamOS's A/B updates rebuild /etc from scratch and carry over ONLY the files matched by
# /usr/lib/rauc/atomic-update-keep.conf plus these operator drop-ins (the drop-in dir itself is
# on Valve's keep list, so this file is self-preserving). Without it, every OS update silently
# strips the host's system integration: /dev/uhid access (virtual pads degrade to Xbox 360),
# the vhci-hcd autoload (no native Steam Deck pad), and the UDP buffer sizing (stream stutter).
# Same wildcard rules as the stock list: '*' matches within a path segment, '**' across.
## Virtual-gamepad device access (uinput/uhid/vhci for the input group)
/etc/udev/rules.d/60-punktfunk.rules
## vhci-hcd autoload (usbip transport for the native Steam Deck pad)
/etc/modules-load.d/punktfunk.conf
## UDP socket buffer sizing (32 MB, matches the deb's sysctl drop-in)
/etc/sysctl.d/99-punktfunk-net.conf
+8
View File
@@ -274,6 +274,14 @@ if [ "$SUDO_OK" = 1 ]; then
NEED_RELOGIN=1 NEED_RELOGIN=1
warn "added $USER to the 'input' group (applies on next login)" warn "added $USER to the 'input' group (applies on next login)"
fi fi
# SteamOS A/B updates rebuild /etc and DROP everything not on Valve's keep list — verified
# live: an OS update stripped the udev rule + vhci autoload + UDP sysctl (gamepads silently
# degrade to Xbox 360, buffers back to 208 KB). The sanctioned fix is a preserve drop-in in
# /etc/atomic-update.conf.d/ (itself on the stock keep list, so it self-preserves).
if [ -f "$SRC/scripts/punktfunk-atomic-keep.conf" ]; then
sudo install -Dm644 "$SRC/scripts/punktfunk-atomic-keep.conf" /etc/atomic-update.conf.d/punktfunk.conf
ok "system tuning registered to survive SteamOS updates (atomic-update.conf.d)"
fi
else else
warn "no usable sudo — SKIPPED system tuning. Gamepad passthrough + clean streaming need root (udev" warn "no usable sudo — SKIPPED system tuning. Gamepad passthrough + clean streaming need root (udev"
warn "rule, 'input' group, vhci-hcd, UDP buffers) — there is no user-space way to do these." warn "rule, 'input' group, vhci-hcd, UDP buffers) — there is no user-space way to do these."
+7
View File
@@ -99,6 +99,13 @@ if [ "$SUDO_OK" = 1 ]; then
sudo usermod -aG input "$USER" sudo usermod -aG input "$USER"
warn "added $USER to the 'input' group — REBOOT (or log out/in) for it to apply" warn "added $USER to the 'input' group — REBOOT (or log out/in) for it to apply"
fi fi
# Register the tuning on Valve's atomic-update preserve list (see install.sh §4): without
# this, every SteamOS A/B update strips the three files above again (verified live —
# gamepads silently degrade to Xbox 360, UDP buffers back to 208 KB).
if [ -f "$SRC/scripts/punktfunk-atomic-keep.conf" ]; then
sudo install -Dm644 "$SRC/scripts/punktfunk-atomic-keep.conf" /etc/atomic-update.conf.d/punktfunk.conf
ok "system tuning registered to survive SteamOS updates (atomic-update.conf.d)"
fi
else else
warn "no usable sudo — SKIPPED gamepad/udev/vhci/UDP tuning (all root-only; no user-space alternative)." warn "no usable sudo — SKIPPED gamepad/udev/vhci/UDP tuning (all root-only; no user-space alternative)."
warn "A stock SteamOS 'deck' account has NO password — set one with 'passwd', then re-run. Gamepads stay" warn "A stock SteamOS 'deck' account has NO password — set one with 'passwd', then re-run. Gamepads stay"