Xbox Bluetooth Controller Fix für Steam und Flatpak Apps
Unter Batocera v42 (und vermutlich auch anderen Versionen) kann es passieren, dass ein Xbox Wireless Controller über Bluetooth zwar gekoppelt ist, aber in Steam und anderen Flatpak Apps nicht zuverlässig erkannt wird. Dieser Fix setzt die Anpassung aus Batocera PR #15057 zur Laufzeit um, ohne dass du ein komplettes Image neu bauen musst.
Was der Fix macht
- Patcht die betroffenen Generatoren so, dass
SDL_JOYSTICK_HIDAPI_XBOX=0nur dort gesetzt wird - Wirkt gezielt für Steam und Flatpak Generatoren, nicht global für das ganze System
- Speichert die Änderung in der Overlay, damit sie Reboots überlebt
Hintergrund zum Script
Das hier verwendete Script wurde von mir selbst geschrieben und orientiert sich in seiner Logik an der Batocera Pull Request #15057. Ziel war es, den dort beschriebenen Fix lokal zur Laufzeit umzusetzen, ohne ein neues Image bauen oder systemweite Änderungen vornehmen zu müssen.
Script
Script speichern, ausführbar machen, einmal laufen lassen, danach rebooten. Den PR-Background findest du hier: Batocera PR #15057
#!/bin/sh
# Fix Xbox Bluetooth Controller for Steam & Flatpak apps
# Implements PR #15057 https://github.com/batocera-linux/batocera.linux/pull/15057 logic at runtime
# sets SDL_JOYSTICK_HIDAPI_XBOX=0 ONLY for Steam / Flatpak generators
# Author: pacmaN (altbox.de)
set -eu
log() { echo "[apply-steam-hidapi-fix] $*"; }
patch_generator() {
file="$1"
[ -f "$file" ] || return 0
if grep -q 'SDL_JOYSTICK_HIDAPI_XBOX' "$file"; then
log "Already patched: $file"
return 0
fi
log "Patching: $file"
[ -f "$file.bak" ] || cp -a "$file" "$file.bak"
# PR-style env injection
sed -i \
-e 's/return[[:space:]]\+Command\.Command(\([[:space:]]*array[[:space:]]*=[[:space:]]*commandArray[[:space:]]*\))/env = {"SDL_JOYSTICK_HIDAPI_XBOX": "0"}\n return Command.Command(\1, env=env)/' \
"$file"
if grep -q 'SDL_JOYSTICK_HIDAPI_XBOX' "$file"; then
log "Patch OK: $file"
else
log "Patch FAILED (unexpected format): $file"
fi
}
log "Searching generator files..."
flatpak_files="$(find /usr -path '*configgen*' -name 'flatpakGenerator.py' 2>/dev/null || true)"
steam_files="$(find /usr -path '*configgen*' -name 'steamGenerator.py' 2>/dev/null || true)"
[ -z "${flatpak_files:-}" ] && log "flatpakGenerator.py not found"
[ -z "${steam_files:-}" ] && log "steamGenerator.py not found"
for f in $flatpak_files; do patch_generator "$f"; done
for f in $steam_files; do patch_generator "$f"; done
log "Saving overlay..."
batocera-save-overlay
log "Done. Reboot recommended."
Download: apply-steam-hidapi-fix.sh
Anwendung
# 1) Script z.B. nach /userdata/system/scripts kopieren
cp apply-steam-hidapi-fix.sh /userdata/system/scripts/
# 2) ausführbar machen
chmod +x /userdata/system/scripts/apply-steam-hidapi-fix.sh
# 3) ausführen
/userdata/system/scripts/apply-steam-hidapi-fix.sh
# 4) reboot
reboot
Hinweis
Das Script legt vor dem Patchen eine .bak-Sicherung der gefundenen Dateien an. Falls Batocera intern die Generator-Struktur stark ändert, kann es sein, dass das Muster nicht mehr greift. Dann meldet das Script "unexpected format".