wolf: add ge-proton + fix-ea-game manage commands for EA titles

Add two manage.sh commands that bake in the workarounds needed to run
EA Steam titles (e.g. Star Wars Battlefront II 2017) under Proton in a
container:

- ge-proton: downloads the latest GE-Proton into Steam's
  compatibilitytools.d (the path Steam actually scans) and chowns it to
  uid 1000 so the in-container user can launch it. GE-Proton carries the
  EA App installer fixes stock Proton/Experimental lack.

- fix-ea-game [appid]: pre-satisfies the EA App install-script markers
  in the game's Proton prefix (InstallSuccessful + Valve EADesktopSetup
  has-run key) so Steam stops looping on 'running install script (EA
  app)'. Opt-in per AppID, defaults to SWBF2 1237950, no-ops if the
  prefix doesn't exist, idempotent, and keeps the prefix owned by uid
  1000 so Wine accepts it.

Also document the EA-game flow in the post-install summary.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
This commit is contained in:
Claude
2026-06-20 23:42:51 +00:00
parent 2b6cf7700c
commit dcb28adc4f
+94 -1
View File
@@ -1523,6 +1523,88 @@ PYEOF
backup)
echo "Set up backups with the modular system: sudo ./setup.sh backup"
;;
ge-proton)
# Install the latest GloriousEggroll Proton-GE build into Steam's
# compatibilitytools.d so it appears in each game's Compatibility
# dropdown. GE-Proton ships fixes (notably for the EA App installer)
# that stock Proton / Proton Experimental lack — required to get EA
# titles like Star Wars Battlefront II (2017) past their install script.
STEAM_HOME=$(find "${WOLF_STATE_DIR:-/etc/wolf}" -maxdepth 2 -type d -name Steam 2>/dev/null | head -1)
if [ -z "$STEAM_HOME" ]; then
echo "No Steam home found yet under ${WOLF_STATE_DIR:-/etc/wolf}."
echo "Launch Steam once from Moonlight, then re-run: ./manage.sh ge-proton"
exit 1
fi
# Steam scans ~/.steam/root/compatibilitytools.d, which resolves to
# <Steam home>/.steam/compatibilitytools.d on disk.
COMPAT="$STEAM_HOME/.steam/compatibilitytools.d"
echo "Fetching latest GE-Proton release info..."
URL=$(curl -sL https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases/latest \
| grep browser_download_url | grep '\.tar\.gz' | cut -d'"' -f4)
if [ -z "$URL" ]; then
echo "Could not determine GE-Proton download URL (GitHub rate-limited or offline?)."
exit 1
fi
NAME=$(basename "$URL" .tar.gz)
if [ -d "$COMPAT/$NAME" ]; then
echo "$NAME already installed."
else
echo "Downloading $NAME (~500 MB)..."
sudo mkdir -p "$COMPAT"
TMP=$(mktemp -d)
if ! curl -L -o "$TMP/ge.tar.gz" "$URL"; then
echo "Download failed."; rm -rf "$TMP"; exit 1
fi
sudo tar -xzf "$TMP/ge.tar.gz" -C "$COMPAT"
rm -rf "$TMP"
fi
# Wolf's app containers run as uid 1000 (retro). The compat tool must be
# owned by that user or Wine refuses to use it / Steam can't launch it.
sudo chown -R 1000:1000 "$COMPAT"
echo ""
echo "Installed: $COMPAT/$NAME"
echo "Now fully quit and reopen Steam in Moonlight, then per game:"
echo " Properties → Compatibility → Force the use of $NAME"
;;
fix-ea-game)
# Some EA titles on Steam (e.g. Star Wars Battlefront II 2017,
# AppID 1237950) bundle an EA App bootstrapper that hangs indefinitely
# under Proton inside a container, leaving the game stuck on "running
# install script (EA app)". This pre-satisfies the install-script
# markers in the game's Proton prefix so Steam skips the bootstrapper
# and launches the game directly.
#
# Safe + opt-in: only touches the AppID you pass, and only if its prefix
# already exists. No effect on other games or on users who don't own the
# title. Run AFTER setting the game to GE-Proton and clicking Play once
# (so the prefix exists). Usage: ./manage.sh fix-ea-game [appid]
APPID="${2:-1237950}"
STEAM_HOME=$(find "${WOLF_STATE_DIR:-/etc/wolf}" -maxdepth 2 -type d -name Steam 2>/dev/null | head -1)
REG="$STEAM_HOME/.steam/steam/steamapps/compatdata/$APPID/pfx/system.reg"
if [ ! -f "$REG" ]; then
echo "No Proton prefix for AppID $APPID yet (looked for $REG)."
echo "In Steam: set the game to GE-Proton (./manage.sh ge-proton),"
echo "click Play once to build the prefix, then re-run this command."
exit 1
fi
if sudo grep -q 'EADesktopSetup' "$REG" 2>/dev/null; then
echo "AppID $APPID already patched. Cancel the 'installing' screen in Steam and Play."
exit 0
fi
echo "Patching EA install-script markers for AppID $APPID..."
# Wine v2 registry format uses doubled backslashes as the path separator.
# InstallSuccessful satisfies the EA Desktop string check; EADesktopSetup
# satisfies the Valve has-run-key check used by the bundled install script.
{
printf '\n[Software\\\\Electronic Arts\\\\EA Desktop] 1781772837\n"InstallSuccessful"="true"\n'
printf '\n[Software\\\\Wow6432Node\\\\Electronic Arts\\\\EA Desktop] 1781772837\n"InstallSuccessful"="true"\n'
printf '\n[Software\\\\Valve\\\\Steam\\\\Apps\\\\%s] 1781772837\n"EADesktopSetup"=dword:00000001\n' "$APPID"
printf '\n[Software\\\\Wow6432Node\\\\Valve\\\\Steam\\\\Apps\\\\%s] 1781772837\n"EADesktopSetup"=dword:00000001\n' "$APPID"
} | sudo tee -a "$REG" >/dev/null
# Keep the prefix owned by the in-container user or Wine rejects it.
sudo chown 1000:1000 "$REG"
echo "Done. In Steam: cancel the 'running install script' screen if shown, then Play."
;;
fix-perms)
# Wolf creates each app's home dir under WOLF_STATE_DIR/<session-id>/<App>
# and mounts it as /home/retro inside the app container. If anything in
@@ -1586,6 +1668,8 @@ PYEOF
echo " ./manage.sh apps - Add / update game launchers in Wolf"
echo " ./manage.sh reorder - Reorder the Moonlight tile list"
echo " ./manage.sh add-web [name] [url] - Add a URL shortcut tile (Firefox kiosk)"
echo " ./manage.sh ge-proton - Install latest GE-Proton (needed for EA games)"
echo " ./manage.sh fix-ea-game [appid] - Unstick EA App install loop (default: SWBF2 1237950)"
echo " ./manage.sh fix-perms - Fix 'Permission denied' app startup errors"
echo " ./manage.sh backup - How to set up backups"
;;
@@ -1917,7 +2001,16 @@ PYEOF
echo " Online together → each player launches their own session,"
echo " all connect to the same game server"
echo ""
echo "Manage: cd $WOLF_DIR && ./manage.sh {start|stop|restart|logs|status|pin|update|apps|reorder|add-web}"
echo "Manage: cd $WOLF_DIR && ./manage.sh {start|stop|restart|logs|status|pin|update|apps|reorder|add-web|ge-proton|fix-ea-game}"
echo ""
echo "── EA GAMES (Battlefront II, etc.) ───────────────────"
echo ""
echo " EA titles need GE-Proton + an install-script unstick:"
echo " 1. ./manage.sh ge-proton # install GE-Proton once"
echo " 2. In Steam: game → Properties → Compatibility → Force GE-Proton"
echo " 3. Click Play once (builds the Proton prefix; will hang — that's ok)"
echo " 4. ./manage.sh fix-ea-game <appid> # e.g. 1237950 for SWBF2 2017"
echo " 5. Cancel the 'installing' screen in Steam, Play again — it launches"
echo ""
echo "── BACKUPS ───────────────────────────────────────────"
echo ""