Target audience: Linux gamers who want Pokémon TCG Live (PTCGL) running outside Windows—especially on Fedora with Wayland and an NVIDIA GPU.
TL;DR: Install via Lutris/Wine-GE, then use a single wrapper script (ptcgl) that handles DNS, browser login, OAuth callbacks, display sizing, and cleanup. Native Firefox is required for login; the in-Wine browser gets blocked by Imperva.
My setup
| Item | Value |
|---|---|
| OS | Fedora 43, Wayland |
| GPU | NVIDIA RTX 5080 |
| Wine prefix | ~/Games/pokemon-tcg-live |
| Wine runner | Lutris GE-Proton8-26 (stable for this game) |
| Browser | Native Firefox (not Chrome as default) |
| Entry point | ptcgl → ~/Games/pokemon-tcg-live/pokemon-tcg-live.sh |
Quick start (if scripts are already installed)
# One-time: add alias (already in ~/.bashrc if you followed along)
alias ptcgl='$HOME/Games/pokemon-tcg-live/pokemon-tcg-live.sh'
alias pctgl='$HOME/Games/pokemon-tcg-live/pokemon-tcg-live.sh' # typo alias
source ~/.bashrc
# One-time setup (browser handlers, Wine registry)
ptcgl setup
# Launch (windowed at 75% of screen — default)
ptcgl
# Fullscreen
ptcgl fs
# or: ptcgl --fullscreen
# Custom window scale
ptcgl --scale=80
Login flow:
- Click Continue with English in the game.
- On Log in to Pokémon Trainer Central, click Log In.
- Firefox opens automatically (cookies for
access.pokemon.comare cleared first). - Sign in; allow the
tpcitcgapp://handler when prompted. - One extra game window may open with the login token—that’s normal on Linux. Use that window.
If Firefox doesn’t open: ptcgl login
If login completes but the game doesn’t react: copy the done-page URL and run ptcgl paste
One-time Firefox setting: Settings → Applications → tpcitcgapp → Pokemon TCG Live (login callback)
How we got here (problems → fixes)
1. DNS timeouts (Curl error 28)
The game couldn’t reach Pokémon servers when the router was the only DNS resolver.
Fix: Set system DNS to 1.1.1.1 and 8.8.8.8 in NetworkManager. The launch script still ships a resolv.conf fallback wrapped with bwrap if DNS is slow.
2. TLS errors (Curl error 35, certificate decode failures)
A native crypt32 override from winetricks broke Unity’s HTTPS stack.
Fix: Remove "*crypt32"="native" (and similar) from the prefix. Do not force native winhttp/wininet/crypt32 for this game.
3. Login blocked in Wine browser (Imperva Error 15)
Wine’s embedded browser fingerprint looks wrong to Pokémon’s anti-bot.
Fix: winebrowser-ptcgl.sh sends all http(s):// URLs to native Firefox, not Wine Firefox or Chrome (xdg-open was opening Chrome and causing “session expired”).
4. Firefox crashes when spawned from Wine (glycin / bwrap on Fedora 43)
Launching Firefox from Wine’s environment triggered GTK/glycin sandbox crashes (Loader process exited early with status 159).
Fix:
firefox-native-wrapper.sh— clean session env,GDK_BACKEND=x11, stripsWINE*varsbin/bwrap— tiny passthrough shim so glycin’s bwrap doesn’t kill Firefox- Launch via
systemd-run --userwhen possible
5. “Session expired” / stale OAuth state
Opening a bookmarked login URL or reusing cookies breaks OAuth state.
Fix: clear-pokemon-login-data.sh clears Firefox cookies/site data for access.pokemon.com before each login. The game’s exact OAuth URL is saved to last-login-url.txt for ptcgl login.
6. Login callback (tpcitcgapp://) not reaching the game
Multiple broken handlers (xdg-open loops, Wine start %u only) and duplicate launches.
Fix: All handlers route to pokemon-tcg-live.sh callback %u. Callback deduplication prevents three game windows from one login. One extra instance with the token is still expected on Linux.
7. Duplicate Firefox and game windows
The game fires many browser-open requests; a retry watcher made it worse.
Fix: URL deduplication, attach to existing Firefox with --new-tab, disable the login watcher, cleanup_session() on every ptcgl launch (same as old manual ptcgl stop).
8. Window size / fullscreen
Unity stores display prefs in Wine user.reg, overriding launch flags. Default was stuck windowed at a fixed resolution.
Fix: apply-display-mode.sh patches registry before launch:
- Default: windowed at 75% of monitor size
ptcgl fs: borderless fullscreen at native resolution
Full reproduction from scratch
Prerequisites (Fedora)
sudo dnf install lutris wine firefox sqlite3 bwrap
# NVIDIA drivers as usual for your distro
Install Lutris (Flatpak or package), then install Wine-GE-Proton8-26 (or similar GE-Proton 8.x) as a Lutris runner.
Install the game
Install Pokémon TCG Live into prefix ~/Games/pokemon-tcg-live via Lutris (official installer or manual). Confirm the exe exists:
~/Games/pokemon-tcg-live/drive_c/users/$USER/The Pokémon Company International/Pokémon Trading Card Game Live/Pokemon TCG Live.exe
Copy or clone the helper scripts
All automation lives in ~/Games/pokemon-tcg-live/. Key files:
| File | Role |
|---|---|
pokemon-tcg-live.sh |
Main entry (ptcgl) |
launch-pokemon-tcg-live-inner.sh |
Wine launch + display mode |
apply-display-mode.sh |
Unity registry resolution/fullscreen |
winebrowser-ptcgl.sh |
Wine browser → native Firefox |
open-native-browser.sh |
Deduped Firefox launch |
firefox-native-wrapper.sh |
Safe Firefox environment |
bin/bwrap |
glycin crash workaround |
clear-pokemon-login-data.sh |
Pre-login cookie clear |
setup-wine-login-browser.sh |
Wine registry for browser + protocol |
Configure
chmod +x ~/Games/pokemon-tcg-live/*.sh ~/Games/pokemon-tcg-live/bin/bwrap
echo "alias ptcgl='$HOME/Games/pokemon-tcg-live/pokemon-tcg-live.sh'" >> ~/.bashrc
echo "alias pctgl='$HOME/Games/pokemon-tcg-live/pokemon-tcg-live.sh'" >> ~/.bashrc
source ~/.bashrc
ptcgl setup
System DNS (recommended)
Set wired/wifi DNS to 1.1.1.1 and 8.8.8.8 in NetworkManager so the game doesn’t depend on router DNS.
Play
ptcgl # windowed 75%
ptcgl fs # fullscreen
ptcgl stop # optional; ptcgl auto-cleans on next launch
Debugging
| Log | Purpose |
|---|---|
~/Games/pokemon-tcg-live/browser.log |
Firefox launch attempts |
~/Games/pokemon-tcg-live/callback.log |
OAuth callback handling |
~/Games/pokemon-tcg-live/clear-login.log |
Cookie clearing |
…/AppData/LocalLow/pokemon/Pokemon TCG Live/Player.log |
Unity game log |
What we deliberately did not do
- GE-Proton 10 / umu prefix upgrade — caused more breakage; GE-Proton8-26 stayed stable.
- Native crypt32 for TLS — broke more than it fixed.
- Chrome as login browser — Imperva and session issues; Firefox only.
- In-Wine Firefox for login — Imperva Error 15.
License / disclaimer
Pokémon TCG Live is © The Pokémon Company / Nintendo / Creatures / GAME FREAK. This is an unofficial Linux compatibility guide; not affiliated with or endorsed by them. Wine and Lutris are third-party tools—your mileage may vary.