altbox.de

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

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".