Files
ubuntu-post-install/services/kyber-launcher.md
T
Claude d6092dde4c Move static service docs into services/<name>.md companion files
Applies the new write_readme companion-doc convention to ai-stack,
paintplus, and kyber-launcher: install-time-invariant content (usage
walkthroughs, service tables, troubleshooting) moves out of the .sh
heredocs into sibling services/<name>.md files, leaving only genuinely
install-specific content inline.

- services/paintplus.md: config/cloud/GPU/ai-stack-backend/update/Caddy
  sections, picked up automatically via write_readme's companion-doc
  support.
- services/ai-stack.md: roles, GPU switcher, service URLs, cloud LLM
  provider setup, update, Caddy. ai-stack.sh can't use write_readme
  directly (its POST-INSTALL-NOTES.md filename deliberately avoids
  colliding with the vendored app's own README.md in the same
  directory), so it appends the companion file manually.
- services/kyber-launcher.md: the full SWBF2 (2017) + Kyber walkthrough,
  moved out of the root README's "Gaming scripts" section (which now
  just points here). kyber-launcher.sh now calls write_readme to deploy
  it to ~/.local/share/kyber/README.md, fixing a stale in-script pointer
  to a README section that no longer exists.
2026-08-04 12:34:37 +00:00

5.1 KiB

Star Wars Battlefront II (2017) + Kyber

Kyber is the community multiplayer replacement for SWBF2 after EA shut down official servers in 2022. It went open-source (GPL) in January 2026.

The correct approach is a native Linux AppImage — not Wine or Proton for the launcher itself. The AppImage is maintained at: https://github.com/simonlinuxcraft/kyber-linuxport-unofficial

This service (sudo ./setup.sh kyber-launcher) downloads the latest AppImage, installs a desktop entry, and creates a kyber command in ~/.local/bin. A standalone equivalent also exists at scripts/setup-kyber-linux.sh for machines not running the full wizard.

Every time you want to play:

  1. Open Steam (must be running for library validation) — do NOT click Play on SWBF2
  2. Launch Kyber (kyber or from the app menu)
  3. In Kyber: join a server (HOME) or create one (HOST)
  4. Kyber/Maxima launches SWBF2 via its own bundled GE-Proton — wait 1-3 minutes
  5. If the SWBF2 window appears but won't focus: press Alt+Tab or click its taskbar entry — this is normal when the game is launched by a wrapper process

Do NOT launch SWBF2 from Steam directly. If Steam's SWBF2 is already running when Kyber starts, kill it first — Kyber cannot inject into a Steam-launched instance.

If Kyber says "Game Not Found": Click SET GAME FOLDER and point it to the SWBF2 install directory. Find it with:

find ~/.steam/steam/steamapps -name "starwarsbattlefrontii.exe" 2>/dev/null | head -1 | xargs dirname

Paste that path into the SET GAME FOLDER dialog.

If Origin Error: "title installed in language not entitled to play": Maxima's Wine prefix is missing locale registry keys — its setup commands fail silently on some systems. Fix:

cat > /tmp/swbf2_fix.reg << 'EOF'
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Origin Games\1035052]
"locale"="en_US"
"displayname"="STAR WARS Battlefront II"
[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Origin Games\1035052]
"locale"="en_US"
"displayname"="STAR WARS Battlefront II"
[HKEY_LOCAL_MACHINE\Software\Electronic Arts\EA Desktop]
"InstallSuccessful"="true"
[HKEY_LOCAL_MACHINE\Software\Origin]
"InstallSuccessful"="true"
"ClientPath"="C:\\Windows\\System32\\conhost.exe"
[HKEY_CURRENT_USER\Control Panel\International]
"Locale"="00000409"
"LocaleName"="en-US"
"sLanguage"="ENU"
EOF
WINEPREFIX=~/.local/share/maxima/wine/prefix wine64 regedit /tmp/swbf2_fix.reg

Then restart Kyber and try again.

First run (one-time setup):

  1. Click EA Account → log in with your EA credentials in the browser
  2. Click Skip on Nexus Mods (optional, only needed for mods)
  3. EA login is cached — you stay logged in across sessions

Hosting a private server with bots:

  • HOST → pick maps/modes → set a name and PASSWORD → Start Server
  • Share the server name + password with friends; they search by name in HOME
  • Bot count: in the HOST panel right side → AUTOPLAYERS section → set BOTS TEAM 1 and BOTS TEAM 2 (e.g. 4 each) → click UPDATE SERVER
  • Bot difficulty: the BOT DIFFICULTY slider (RECRUIT → OFFICER → KNIGHT → MASTER)
  • After the game loads you can also update settings live and hit UPDATE SERVER again
  • For a headless, always-on dedicated server instead (no local Kyber client needed to host), see the separate kyber-server service.

Requirements:

  • SWBF2 (Steam AppID 1237950) installed via Steam (Kyber manages its own GE-Proton for launching the game)
  • glibc 2.38+ — Ubuntu 24.04+, Fedora 38+, SteamOS 3.7+
  • EA account (free) at ea.com
  • Unprivileged user namespaces enabled (Ubuntu 24.04 restricts these by default):
    sudo sysctl -w kernel.unprivileged_userns_clone=1
    sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
    
    The setup script applies this automatically when run with sudo and saves it to /etc/sysctl.d/99-userns.conf to persist across reboots. Without this fix Kyber fails with: bwrap: setting up uid map: Permission denied

If SWBF2 crashes immediately when a level starts loading: Likely a DXVK rendering issue, especially on integrated GPUs (Intel Iris Xe, etc.). Disable fullscreen and HDR in the game settings file — the game writes this on first run:

PROFILE=$(find ~/.local/share/maxima -name "ProfileOptions_profile" 2>/dev/null | head -1)
sed -i 's/GstRender.FullscreenEnabled 1/GstRender.FullscreenEnabled 0/' "$PROFILE"
sed -i 's/GstRender.EnableHDR 1/GstRender.EnableHDR 0/' "$PROFILE"

Then restart Kyber and try hosting/joining again.

What does NOT work:

  • Running the Windows kyber_launcher.exe under Wine/Proton: EA's auth callback uses the eadesktop:// URI scheme which has no Linux handler, and Wine's cmd.exe crashes on long OAuth URLs anyway
  • Running Kyber inside Wolf/Games-on-Whales: the Docker double-sandbox blocks the user namespace clone that Proton requires

Fixing the base game on native Linux Steam (EA Desktop/Origin registration, unrelated to Kyber itself) is a separate script: scripts/setup-swbf2-linux.sh — see that file's header for what it does and its prerequisites.