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:

  1. Click Continue with English in the game.
  2. On Log in to Pokémon Trainer Central, click Log In.
  3. Firefox opens automatically (cookies for access.pokemon.com are cleared first).
  4. Sign in; allow the tpcitcgapp:// handler when prompted.
  5. 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 → tpcitcgappPokemon 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, strips WINE* vars
  • bin/bwrap — tiny passthrough shim so glycin’s bwrap doesn’t kill Firefox
  • Launch via systemd-run --user when 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.