Linux gaming has crossed a threshold that would have seemed implausible five years ago. According to data compiled by Boiling Steam from ProtonDB, close to 90% of Windows games on Steam now run on Linux via Proton, with the share of titles that will not launch at all -- the Borked category -- down to roughly 4% and still falling. The Steam Survey for December 2025 recorded Linux at 3.58% of active Steam users (a figure Valve revised upward from an initial 3.19% report), up from 2.29% the same month a year prior and less than 2% in December 2023. By March 2026, the Steam Hardware Survey placed Linux at 5.33% -- an all-time high for the platform.

Ubuntu sits at the center of this shift. It is the distribution against which many native Linux games are first tested, and it is the most common system reported in ProtonDB. If you have a desktop or laptop running Ubuntu 24.04 LTS and want to game on it -- seriously game on it, not just run a few lightweight indie titles -- this is the guide that tells you exactly what to do and why.

~90%
of Windows Steam games launch on Linux via Proton (ProtonDB, Oct 2025)
5.33%
Steam user share for Linux -- March 2026 all-time high
3.8%
of titles in the Borked category -- down from ~10% two years prior

How Proton Works

Proton is a compatibility layer developed by Valve that ships inside the Steam client. It lets games built for Windows run on Linux by translating Windows system calls into ones the Linux kernel and graphics stack can understand. It is not an emulator -- no virtual Windows machine runs in the background. The game accesses your real GPU and RAM directly, which is why performance can approach and sometimes exceed native Windows numbers on the same hardware.

Canonical notes that Proton enables games to "fully leverage the benefits of your PC's hardware" rather than emulating Windows. (Canonical Ubuntu Blog) This is why performance under Proton can match or in some titles exceed native Windows benchmarks on identical hardware -- the game process runs on your real CPU and GPU with no virtualization layer in the call path.

Proton is built on top of Wine, a project that has been in active development for over 33 years. Valve adds its own components on top of Wine: DXVK translates Direct3D 8, 9, 10, and 11 calls to Vulkan; VKD3D-Proton handles Direct3D 12; and a set of runtime patches covers timing, controller input, and shader compilation. The result is what Valve calls Steam Play.

Proton translation stack -- how a Windows game reaches your GPU on Linux
GAME TRANSLATION RUNTIME HARDWARE Windows Game (EXE) DXVK DX9/10/11 → Vulkan VKD3D-Proton DX12 → Vulkan Wine Win32 API layer Steam Runtime pressure-vessel container Vulkan GPU Driver NVIDIA (proprietary) · AMD RADV (Mesa) · Intel ANV (Mesa) // game accesses real GPU memory and compute directly -- no virtual machine

As of April 2026, the current stable release is Proton 10.0-4, released January 26, 2026 by Valve and CodeWeavers. According to Phoronix and the official GitHub changelog, this release enabled 19 previously Experimental-only games on the stable branch (including Metal Slug: Awakening, Summoners War: RUSH, Distant Worlds 2, and REACH), pulled in VKD3D-Proton 3.0b, Wine Mono 10.4.1, and SteamWorks SDK 1.63, and delivered a range of game-specific fixes including corrections for Far Cry 5, Assassin's Creed Shadows, DualSense haptic regressions, and video playback in multiple titles. A rolling Proton Experimental channel also exists for bleeding-edge support.

VKD3D-Proton 3.0: What Changed Under the Hood

VKD3D-Proton 3.0, shipped in Proton 10.0-4, was a larger architectural shift than patch notes suggest. The DXBC shader backend was fully rewritten, replacing the legacy vkd3d-shader path. DXVK and VKD3D-Proton now share the same DXBC front-end -- a technical unification that eliminated entire categories of bugs. Red Dead Redemption 2, which was previously broken in D3D12 mode, now runs correctly as a direct result. FSR4 support was added via VK_KHR_cooperative_matrix and VK_KHR_shader_float8, but the official build only exposes this natively on RDNA4 (RX 9000 series), where VK_KHR_shader_float8 is hardware-supported. Older GPU users who want FSR4 must build VKD3D-Proton from source with specific flags; that emulation path uses int8 and float16 cooperative matrices and is substantially slower. DLSS4 has no Proton integration path at all -- not even a slow emulation route. Finally, experimental D3D12 work graph support was added, emulated via compute shaders. The VKD3D-Proton developers noted in the release that in some tested scenarios their compute emulation produced results that "outperform native driver implementations" of the feature, at the cost of extra VRAM usage. (VKD3D-Proton 3.0 release notes)

Note

Proton has been enabled by default in the Steam client since the June 30, 2025 stable update. The manual "Enable Steam Play for all other titles" toggle was removed — Proton now activates automatically for any game that does not have a native Linux build. Native Linux games are unaffected and still run natively. If you are on an older Steam installation and do not see an install button for a Windows-only game, check Steam > Settings > Compatibility and confirm Steam Play is configured. The settings page now shows a single option to choose your default compatibility tool rather than the old toggle.

// knowledge check
Proton runs Windows games on Linux by emulating a virtual Windows machine in the background. True or false?
Proton is a compatibility/translation layer, not an emulator. The game process runs natively on your CPU and accesses your GPU directly through the Vulkan driver. This is why performance under Proton can match or exceed Windows numbers on the same hardware.

Installing Steam on Ubuntu

There are two supported installation paths: the Ubuntu multiverse repository and the official .deb from Valve. The multiverse package pulls in the 32-bit library dependencies automatically and integrates cleanly with apt for updates. The Valve installer is always the most current version but requires manual dependency resolution on minimal installs.

One important clarification: the steam-installer package from multiverse is a small bootstrapper, not the full Steam client. Its sole job is to run on first launch, pull the real Steam client binaries from Valve's servers, and install them under your home directory. This is why the apt download is only a few hundred kilobytes -- the actual client download (around 200MB or more) happens when you first launch Steam after installation. The advantage of this bootstrapper approach is that Steam updates itself independently of Ubuntu's package repositories, so you always get the latest client without waiting for an Ubuntu package update.

terminal -- install via multiverse (recommended)
# Enable multiverse and update package index
$ sudo add-apt-repository multiverse
$ sudo apt update

# Install Steam (pulls in required i386 libraries automatically)
$ sudo apt install steam-installer

# Alternatively: download the .deb directly from Valve's official repository
$ wget https://repo.steampowered.com/steam/archive/precise/steam_latest.deb
$ sudo apt install ./steam_latest.deb

After installation, launch Steam, log into your account, and let the client update itself. On first run Steam downloads the Steam Linux Runtime -- a container environment that isolates game dependencies from your host system. The reason this exists is that many games were built against specific older versions of system libraries (glibc, libstdc++, SDL2, and others) that no longer ship in their expected versions on modern Ubuntu. Rather than requiring you to install dozens of legacy library packages system-wide -- which could break other software -- the Steam Runtime bundles those specific library versions inside a container that only the game process uses. This is why a game built in 2014 can still run reliably on Ubuntu 24.04 without touching your system libraries.

The Steam Linux Runtime comes in multiple "slots." Runtime 1.0 (Steam Runtime "scout") covers legacy games; Runtime 2.0 ("soldier") is the base for older Proton versions; Runtime 3.0 ("sniper") is what Proton 8.0 and later use. You do not need to manage these manually -- Steam selects the correct runtime per game automatically. However, if you delete a game and find that a runtime container still occupies gigabytes on disk, you can remove unused runtime slots in Steam's Download Cache settings. If a game fails to launch after a Steam update, verifying the game's files and checking that the Steam Linux Runtime containers are up to date (visible under Tools in your Steam library) fixes the problem in a large proportion of cases.

Flatpak Steam vs. the .deb: What Differs

Ubuntu's Software Center and some guides suggest installing Steam as a Flatpak. The Flatpak version works, but there are concrete tradeoffs compared to the apt/.deb path this article covers. The Flatpak runs Steam inside a sandbox, which means it cannot access directories outside its permitted scope by default -- adding a game library on a secondary drive requires explicitly granting filesystem access through Flatseal (flatpak install flathub com.github.tchx84.Flatseal). The game data and compatdata directory for the Flatpak version live under ~/.var/app/com.valvesoftware.Steam/.local/share/Steam/ rather than ~/.local/share/Steam/, which breaks any external tool (ProtonUp-Qt, Lutris, protontricks) that assumes the standard path unless you install those tools as Flatpaks too. The Flatpak version does include a patched glibc, which is useful in one specific scenario: the ArchWiki documents that some Easy Anti-Cheat games that fail under the .deb Steam due to a missing glibc patch will work under the Flatpak version. Valve's own recommendation is the .deb path. For straightforward Ubuntu setups with no unusual constraints, the steam-installer package from multiverse is the lower-friction choice. If a game is reported to work under Proton but consistently fails on your system under the .deb, switching to the Flatpak version and retesting that specific title is a valid and documented troubleshooting step.

Where Your Proton Game Saves Live

Proton creates a separate Wine prefix for each game. These prefixes are stored at ~/.local/share/Steam/steamapps/compatdata/[appid]/pfx/, where [appid] is the game's numerical Steam application ID (visible in the game's Steam store URL). Inside each prefix, Proton emulates a Windows filesystem: save files that a game writes to C:\Users\steamuser\Documents on Windows appear at .../pfx/drive_c/users/steamuser/Documents/ on Linux; files written to AppData\Local appear under .../pfx/drive_c/users/steamuser/AppData/Local/. If you have a game installed on a secondary Steam library drive, its compatdata folder lives adjacent to that library's steamapps/ directory, not in your home folder. To find a specific game's appid quickly, right-click it in Steam, open Properties, and look at the URL in the Store tab, or search steamdb.info. Many games also support Steam Cloud saves -- if cloud sync is enabled and working, saves replicate automatically regardless of path. Check whether it is enabled for a specific game under Properties > Updates > Steam Cloud.

Game Libraries on Secondary Drives: ext4 or btrfs Only

If you store your Steam library on a secondary drive, the filesystem matters. Valve explicitly discourages storing a Steam library on an NTFS partition: Proton creates Unix symbolic links and files with case-sensitive names inside the Wine prefix, and NTFS does not support Unix symlinks without specific kernel mount options. The Valve Proton FAQ documents that games launched from an NTFS library that is not owned by your user will fail, and even with correct ownership, symlink creation failures cause silent, hard-to-diagnose crashes rather than clear error messages. The ntfs-3g driver does support symlinks via the windows_names mount option, but this still does not resolve case-sensitivity mismatches in Wine prefix paths. If you must share a drive between Ubuntu and Windows, the recommended approach is to install games separately in each OS rather than pointing both at the same NTFS Steam library. For a Linux-only secondary drive, format it as ext4 or btrfs -- both work without issues. Add the drive as a Steam Library Folder under Steam > Settings > Storage.

GPU Drivers: Getting This Right First

Your driver situation determines everything downstream. A misconfigured or outdated driver will cause game crashes, Vulkan failures, and frame drops that no amount of Proton tweaking can fix.

// select your gpu vendor
Jump to the driver path for your hardware:
Use the proprietary nvidia-driver-580 series (580.142 stable, March 2026). Install via sudo ubuntu-drivers autoinstall or sudo apt install nvidia-driver-580. Reboot after. The open-source Nouveau driver does not support the Vulkan features required by DXVK and VKD3D-Proton -- do not use it for gaming. Verify with nvidia-smi.
On NVIDIA hybrid laptops (dGPU + iGPU), prepend __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia to launch options to force games onto the discrete GPU.
AMD is the lower-friction path. The open-source AMDGPU kernel driver ships in the mainline kernel. Ubuntu 24.04 ships Mesa 24.x; for better performance and RDNA ray tracing improvements, enable the Kisak Mesa PPA (sudo add-apt-repository ppa:kisak/kisak-mesa) to get Mesa 26.0, which added significant RT performance gains for RDNA 2, 3, and 4 in February 2026. Verify Vulkan with vulkaninfo | grep "GPU id".
RDNA 2+ users: add ENABLE_LAYER_MESA_ANTI_LAG=1 to Steam launch options to reduce input latency. Requires Mesa 25.x or later.
Intel Arc (Alchemist, Battlemage) uses the open-source i915 / xe kernel drivers with the ANV Vulkan driver in Mesa. The Kisak Mesa PPA is strongly recommended on Ubuntu 24.04 -- the bundled Mesa 24.x ANV is significantly older than what Arc cards benefit from. MangoHud 0.8.0 added full Intel GPU temperature and load monitoring for both i915 and XE driver GPUs. Verify with vulkaninfo | grep -E "GPU id|deviceName".

NVIDIA

NVIDIA's proprietary driver is required for any serious gaming. The open-source Nouveau driver does not implement the Vulkan features that DXVK and VKD3D need -- specifically, DXVK 2.7 requires VK_KHR_maintenance5 and other Vulkan 1.3 extensions that Nouveau does not expose. Nouveau is reverse-engineered without access to NVIDIA's firmware or hardware documentation, so its Vulkan implementation lags significantly behind the proprietary driver's feature set and will not reach parity in the foreseeable future. On Ubuntu 24.04 LTS, the recommended path is ubuntu-drivers:

terminal -- NVIDIA driver setup
# Let Ubuntu identify and install the recommended driver
$ sudo ubuntu-drivers autoinstall

# Or install the 580 series explicitly (580.142 is current recommended stable, March 2026)
$ sudo apt install nvidia-driver-580

# Reboot after installation -- the driver won't load until you do
$ sudo reboot

# Confirm the driver is loaded
$ nvidia-smi

Install Vulkan support alongside the driver. libvulkan1 is the Vulkan loader library that applications use to discover and interface with the Vulkan driver at runtime -- without it, Vulkan-using programs can't find the driver even if it is installed. vulkan-tools provides the vulkaninfo and vkcube diagnostics. Note: the package is named vulkan-tools on Ubuntu 22.04 and 24.04; on older Ubuntu releases it was named vulkan-utils.

$ sudo apt install libvulkan1 vulkan-tools

AMD

AMD is the easier path on Ubuntu. The open-source AMDGPU kernel driver ships in the mainline kernel, and the Mesa graphics stack provides Vulkan support out of the box. Ubuntu 24.04 ships Mesa 24.x; for newer hardware or better performance on recent titles, the Kisak Mesa PPA provides builds that track Mesa releases closely:

terminal -- AMD driver and Vulkan setup
# Install Mesa Vulkan drivers (standard Ubuntu repos)
$ sudo apt install mesa-vulkan-drivers vulkan-tools

# Optional: upgrade to the latest Mesa via Kisak PPA
# Note: this upgrades Mesa system-wide -- all GPU-accelerated apps use the new version
$ sudo add-apt-repository ppa:kisak/kisak-mesa
$ sudo apt update && sudo apt upgrade

# Verify Vulkan is functional -- you should see your GPU listed
$ vulkaninfo | grep "GPU id"
Pro Tip

Mesa 26.0 released February 11, 2026, with major ray tracing performance improvements for AMD RADV. GamingOnLinux reported that the update brought "ray tracing performance improvements for AMD RADV" by adding Wave32 execution for RT shaders on RDNA 3 and RDNA 4. RDNA 2 also benefits from BVH4 acceleration structure optimizations. If you are on any RDNA 2, RDNA 3, or RDNA 4 card and care about ray-traced titles, the Kisak Mesa PPA is worth enabling specifically for that bump. Benchmarks from multiple sources reported between 25--75% FPS gains in RT workloads depending on the title and GPU generation. Check vulkaninfo | grep "driverVersion" after upgrading to confirm the new version loaded.

Intel

Intel Arc GPUs (Alchemist and Battlemage) use the open-source i915 and xe kernel drivers with the ANV Vulkan driver in Mesa. Support has improved substantially in the 2024--2026 Mesa development cycle. For Arc users on Ubuntu 24.04, the Kisak Mesa PPA is highly recommended -- the ANV driver shipped in Ubuntu's bundled Mesa 24.x is significantly older than what Arc cards benefit from. After installing updated Mesa, verify Vulkan support with vulkaninfo | grep "GPU id". MangoHud 0.8.0 added full Intel GPU temperature and load monitoring for both i915 and XE driver GPUs.

terminal -- Intel Arc: upgrade Mesa and verify Vulkan
# Add the Kisak Mesa PPA for Intel Arc users (strongly recommended on 24.04)
$ sudo add-apt-repository ppa:kisak/kisak-mesa
$ sudo apt update && sudo apt upgrade

# Verify Intel Vulkan (ANV) is active
$ vulkaninfo | grep -E "GPU id|deviceName"

Proton GE: The Community Build

GE-Proton (formerly Proton-GE, maintained by the developer GloriousEggroll -- a Red Hat Software Maintenance Engineer who has maintained the project since well before Valve's own Proton matured) is a fork of Valve's Proton that pulls in patches faster than the official release cycle. It frequently includes codec fixes, media foundation patches, game-specific workarounds, and experimental DXVK and VKD3D builds before they reach the stable Valve version. The current series as of early 2026 is GE-Proton 10-x, tracking the Proton 10 base. It is not a replacement for Proton -- it is an alternative for specific titles that behave better under it. Both Heroic Games Launcher and Lutris have integrated umu-launcher as the backend when running GE-Proton outside of Steam, which eliminates the need for manual shell scripting.

The simplest way to install and manage GE-Proton versions is ProtonUp-Qt, a graphical tool available as a Flatpak:

terminal -- install ProtonUp-Qt
# Install Flatpak if not already present
$ sudo apt install flatpak
$ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

# Install ProtonUp-Qt
$ flatpak install flathub net.davidotek.pupgui2

# Launch it
$ flatpak run net.davidotek.pupgui2

Once inside ProtonUp-Qt, click "Add version," select the latest GE-Proton from the list, and click Install. Restart Steam afterward. To use GE-Proton for a specific game, right-click the game in your Steam library, open Properties, navigate to the Compatibility tab, check "Force the use of a specific Steam Play compatibility tool," and select the GE-Proton version from the dropdown.

Warning

Do not set GE-Proton as your global default in Steam's Compatibility settings. GE-Proton includes patches for specific edge cases that can regress stability in titles that already work correctly on the official release. Apply it per-game based on ProtonDB reports for that title.

// should I use ge-proton for this game?
Does the game already work fine on standard Proton?

Checking Compatibility Before You Buy

ProtonDB is a crowd-sourced database where players submit reports on how well individual games run under Proton. Ratings fall into five categories: Platinum (works perfectly out of the box), Gold (minor tweaks needed), Silver (playable with some issues), Bronze (significant problems), and Borked (will not launch). As of October 2025, the Boiling Steam analysis of ProtonDB data placed approximately 42% of new releases in the Platinum tier -- up from 29% the year before -- and the Borked category had fallen to around 3.8%.

// protondb rating reference -- select a tier
Platinum -- The game works flawlessly out of the box with no configuration changes. Install it, launch it, play. No tweaked launch options, no Proton version switching, no workarounds. As of October 2025, roughly 42% of reported titles sit here. If you see Platinum, you can proceed with confidence. (~42% of reported titles as of Oct 2025)
Gold -- The game runs well but requires at least one small intervention: a launch option flag, a specific Proton version override, or a one-time configuration file edit. ProtonDB reports for Gold titles will specify what that intervention is. In practice, Gold is nearly as good as Platinum once you apply the fix -- which typically takes under two minutes. Read the three or four most recent reports and note any launch options that appear repeatedly.
Silver -- The game is playable but has noticeable issues: frame pacing problems, missing audio, visual glitches, or a crash in specific in-game areas. It is not broken, but it is not a clean experience either. Before purchasing a Silver-rated game, read the reports carefully to determine whether the issues affect the core gameplay you care about. Some Silver titles perform much better under GE-Proton -- check whether GE-Proton reports push the effective tier higher.
Bronze -- Significant issues make the game difficult or frustrating to play, though it may technically launch. Expect crashes, broken rendering, or missing key features. Bronze is worth investigating only if you are willing to spend time troubleshooting -- check for recent reports, since a game can move from Bronze to Gold after a Steam update or a new Proton release. Do not purchase a Bronze-rated game without reading recent reports.
Borked -- The game will not launch or immediately crashes before reaching gameplay. Common causes: kernel-level anti-cheat (Vanguard, nProtect), missing Windows system components Proton cannot supply, or a game that has never been tested under Proton. The Borked category represents approximately 3.8% of the total as of late 2025. Some Borked titles can be fixed via GE-Proton or manual protonfixes -- check whether any recent reports document a working path before writing the title off.

Boiling Steam's October 2025 analysis of ProtonDB data found that "almost 90% of Windows games now run on Linux" -- with the Platinum tier (works out of the box) rising to roughly 42% of reported titles, up from 29% the prior year.

Before purchasing a title you intend to play on Ubuntu, search ProtonDB for it. Look at recent reports -- not just the aggregate medal -- because a game may have shipped a patch that broke Linux compatibility after a Gold rating was assigned. Pay attention to what GPU the top reporters are using. A Gold rating achieved entirely on NVIDIA hardware might mean a different experience on AMD, and vice versa.

GameMode and MangoHud: Performance That You Can Measure

Two tools from the open-source ecosystem are considered standard practice for Linux gaming: GameMode and MangoHud.

GameMode is a daemon developed by Feral Interactive -- the studio responsible for many native Linux game ports -- that tells the Linux kernel to prioritize a game process. When a game starts with GameMode active, it switches the CPU governor to performance, disables power-saving features that add latency, and boosts the I/O scheduler for the game's process tree. The result is lower frame-time spikes and, depending on how CPU-bound the title is, a 5--15% increase in average frame rate.

What GameMode Does -- the Precise List

GameMode does more than switch the CPU governor. The full set of actions it performs when a game starts (verified against the gamemoded man page and source): switches the CPU frequency scaling governor to performance for the session duration, then restores it to whatever it was before launch -- not necessarily powersave -- when the game exits; sets I/O priority to Best Effort class 0 (BE/0, the highest Best Effort priority) for the game process; sets process niceness via renice (configurable in /etc/gamemode.ini, default 0 meaning no change); inhibits the screensaver by default (inhibit_screensaver=1); and optionally enables softrealtime scheduling and custom pre/post scripts. The [gpu] section in gamemode.ini is labeled "Here Be Dragons" in the config file itself -- GPU governor changes via GameMode are experimental and GPU-vendor-specific. On Intel hybrid systems using the intel_cpufreq driver rather than intel_pstate, the powersave governor in that driver is power-oriented rather than performance-oriented, which can reduce performance; if you observe this, set igpu_desiredgov=performance in gamemode.ini.

terminal -- install GameMode and MangoHud
$ sudo apt install gamemode mangohud

# Verify GameMode daemon is running
$ systemctl --user status gamemoded

# Confirm gamemoderun is available
$ which gamemoderun

To enable both tools for a game in Steam, right-click the title, open Properties, and add the following to the Launch Options field:

$ gamemoderun mangohud %command%

MangoHud is an overlay for Vulkan and OpenGL (and by extension, DXVK and VKD3D) games that displays real-time metrics: frame rate, frame times, GPU load, CPU load, temperatures, and VRAM usage. It creates a visible feedback loop so you can see whether a driver update or launch option flag changed anything. The configuration file lives at ~/.config/MangoHud/MangoHud.conf and lets you customize precisely which metrics appear and where. MangoHud 0.8.2 is the current stable release; version 0.8.0 added full Intel GPU support (i915 and XE drivers) alongside multi-GPU display, which made the 0.8.x line the most complete version of the tool to date. MangoHud also powers the built-in performance overlay on the Steam Deck.

MangoHud: Configuration Behaviors Most Users Miss

Per-game config files are supported and override the global config. For Proton/Wine games the filename must use the wine prefix: ~/.config/MangoHud/wine-<appname>.conf where <appname> is the executable name without the .exe extension. For native games: ~/.config/MangoHud/<appname>.conf. Key runtime hotkeys: Shift_R+F12 toggles the overlay on/off; Shift_L+F2 starts and stops a performance log; Shift_R+F11 cycles the overlay position; Shift_L+F1 cycles through FPS limits if fps_limit is set. Logs are written as CSV to the directory specified by output_folder in your config -- the files can be uploaded to flightlessmango.com to generate shareable frametime graphs and percentile tables (1%, average, 97th percentile). The throttling_status option surfaces active thermal throttling in the overlay; core_type on Intel CPUs shows which cores are P-cores and which are E-cores per core. MangoHud 0.8.2 fixed a long-standing false positive where the overlay incorrectly reported thermal throttling on RDNA3 GPUs.

Pro Tip

Add DXVK_HUD=1 to a game's launch options alongside MangoHud to also display the DXVK version and the Direct3D version the game is using. This confirms whether Proton is routing the game through DXVK (DX8/9/10/11) or VKD3D-Proton (DX12) -- useful when a title is behaving unexpectedly. Note: DXVK_ASYNC=1 was removed from DXVK mainline and is no longer a supported variable in standard Proton builds; if you see it referenced in older ProtonDB reports, it no longer applies to Proton 9 or 10 unless you are using a specific GE-Proton build that still carries the async patch.

Non-Steam Games: Lutris and Heroic

Steam is not the only storefront, and some games do not exist on it at all. Lutris is an open-source game manager that handles Wine, Proton, and emulators under a single interface. It maintains community-maintained install scripts for thousands of titles, automating steps like downloading the game, configuring Wine, installing the required Visual C++ runtimes, and setting environment variables. For games from GOG, Epic Games Store, and Ubisoft Connect, Lutris is the standard tool.

Heroic Games Launcher is a focused alternative for Epic Games Store and GOG titles specifically. Its interface is cleaner and more similar to a conventional game launcher, which many players find more comfortable than Lutris's broader scope. Both tools support GE-Proton and allow per-game runner customization. Heroic has enabled umu-launcher by default when using GE-Proton, and Lutris uses umu as the default backend when GE-Proton (Latest) is selected -- this means non-Steam games now run in the same containerized Valve runtime environment that Steam itself uses, rather than through ad-hoc Wine configurations.

terminal -- install Lutris
# Add the Lutris PPA for the most current version
$ sudo add-apt-repository ppa:lutris-team/lutris
$ sudo apt update
$ sudo apt install lutris

Heroic is available as a Flatpak, which keeps its dependencies isolated from your system and simplifies updates:

$ flatpak install flathub com.heroicgameslauncher.hgl
What is umu-launcher

umu-launcher is a command-line tool developed collaboratively by the teams behind Lutris, Heroic, and Bottles. It allows non-Steam games to run with Proton (including GE-Proton) inside the same pressure-vessel containerized runtime that Steam uses internally -- meaning game fixes, DLL overrides, and environment variables from the umu database apply automatically, just as Proton's own protonfixes system does inside Steam. Prior to umu, non-Steam Proton usage through Lutris or Heroic ran without Valve's runtime container, which silently broke parts of Proton that relied on it. You can invoke it directly: umu-run /path/to/game.exe. See the project at github.com/Open-Wine-Components/umu-launcher.

The Anti-Cheat Problem: Honest Assessment

This is the section where the honest answer is less comfortable. Anti-cheat software is the primary reason some games still do not run on Ubuntu, and it is important to understand why, because the technical reality is different from the policy reality.

Both Easy Anti-Cheat (EAC) and BattlEye have officially added support for Proton. Enabling that support is a simple configuration switch that game developers flip inside their anti-cheat SDK setup. The barrier is therefore not technical -- it is a business decision by the game's developer. EAC, which is owned by Epic Games, powers titles like Apex Legends, Fortnite, PUBG, and Rust, among many others. BattlEye is used by titles including Rainbow Six Siege and DayZ. Whether these games work on Linux through Proton depends entirely on whether the specific game's developers have opted into the Linux-compatible mode of those anti-cheat systems.

Grand Theft Auto V on Linux is a concrete example of how this plays out: Rockstar did not enable the Linux-compatible path for its anti-cheat configuration, which is why GTA V does not function under Proton despite the technical support existing at the anti-cheat SDK level. The block is a policy decision, not a technical limitation of Proton itself.

There are also kernel-level anti-cheat systems -- most notably Riot Games' Vanguard -- that require Windows kernel access and have no path to Linux compatibility regardless of developer intent. These represent a hard wall. Before committing to Ubuntu as your primary gaming OS, check GamingOnLinux's anti-cheat compatibility tracker at gamingonlinux.com/anticheat for the current status of any multiplayer title you care about.

// anti-cheat landscape reference -- verify current per-game status at gamingonlinux.com/anticheat
modelDeveloper opt-in required in EAC SDK setup. Epic owns EAC and has officially added Proton support -- the toggle exists, but each game's developer must flip it.
titlesRust, DayZ, Dead by Daylight, Halo: The Master Chief Collection
notesEven with EAC opted in, some game updates can silently break the Linux path. Re-check ProtonDB reports after major game patches.
modelDeveloper has the technical ability to opt in but has chosen not to. The block is a business decision, not a technical limitation of Proton.
titlesGTA V Online (Rockstar), Fortnite (Epic), Apex Legends (EA)
notesGTA V is a frequently cited example: Rockstar has EAC but has not enabled the Linux-compatible mode. Fortnite worked briefly in 2022 before Epic explicitly disabled it on unsupported OS configurations.
modelDeveloper opt-in required. BattlEye added official Linux/Proton support in 2021. Same pattern as EAC: the SDK supports it; individual games must enable it.
titlesRainbow Six Siege, DayZ (also runs EAC), Hell Let Loose, Arma 3
notesDayZ uses both EAC and BattlEye simultaneously. Both must be opted in for Linux play to work -- and both currently are, making DayZ a confirmed working title.
modelKernel-level driver that requires Windows kernel access at ring-0. No compatibility path with Proton or Wine regardless of developer intent.
titlesValorant, League of Legends (since 2024 patch requiring Vanguard)
notesVanguard loads a kernel driver at system boot on Windows. There is no equivalent Linux kernel driver and Riot has stated no Linux support is planned. League of Legends worked on Linux via Lutris until Riot made Vanguard mandatory in 2024, at which point it broke definitively.
modelKernel-level driver. No Linux support. Common in South Korean MMOs and some older titles.
titlesMapleStory, Blade & Soul, various Korean-developed MMOs
notesGameGuard explicitly checks for non-Windows environments and will terminate games it detects are not running on a genuine Windows kernel. No workaround exists within the normal Proton stack.
modelUserspace -- Linux-native. Valve built VAC to run on Linux from the start. No compatibility issues whatsoever.
titlesCS2, Team Fortress 2, Dota 2, Left 4 Dead 2
notesCS2 is natively compiled for Linux -- it does not require Proton at all. VAC-secured matches work identically to Windows. If you primarily play Valve titles, anti-cheat is a non-issue on Ubuntu.
modelUserspace -- older architecture, many games have dropped it. Status varies by specific title and whether it still receives PB updates.
titlesBattlefield 3 (legacy), some older Ubisoft titles
notesPunkBuster has a Linux client (pbag.so / pbcl.so) that historically ran under Wine. Its main Linux gaming relevance today is in legacy titles. Most games that used it have migrated to EAC or BattlEye or removed anti-cheat entirely.
Caution

Do not attempt to bypass anti-cheat systems using community workarounds on games where it is not sanctioned. Even if a method technically works, it risks a permanent account ban -- the anti-cheat system may flag Wine or Proton's memory behavior as suspicious. Only play anti-cheat games through Proton when the anti-cheat is officially supported and the developer has enabled Linux compatibility.

// knowledge check
Fortnite does not run on Linux via Proton primarily because Easy Anti-Cheat (EAC) has no Linux support. Is that accurate?
EAC has official Proton support -- but enabling it is a per-game opt-in decision by the game's developer. Epic Games has not opted Fortnite into the Linux-compatible mode of its own anti-cheat. This is a business/policy decision, not a technical limitation. Fortnite uses EAC, not Vanguard (which is Riot Games' system, used in Valorant and League of Legends).

Security Considerations for Linux Gamers

Linux has a well-earned reputation for security, but that reputation requires qualification for desktop gamers. The platform is not immune to threats, and the gaming context introduces several specific attack surfaces that are worth understanding clearly rather than dismissing.

The Proton and Wine Attack Surface

A persistent misconception is that running Windows games through Proton provides a security sandbox. It does not. Wine -- which Proton is built on -- explicitly states in its own FAQ that it is malware-compatible. The Wine prefix system provides file-system isolation in the sense that each game gets its own virtual C: drive, but the process running inside Wine has the same filesystem permissions as the user who launched it. A malicious Windows executable running through Proton can read, write, and delete files anywhere your user account has access -- including your home directory, browser credential stores, and SSH keys. Proton does not intercept or inspect the system calls a Windows binary makes; it translates them and passes them through.

The Flatpak installation of Steam adds a layer of meaningful restriction here. The Flatpak version runs inside a bubblewrap container that limits filesystem access by default, preventing the game process from reaching directories outside the declared sandbox without explicit Flatseal permissions. The .deb Steam installation does not provide this containment. This is one concrete case where the Flatpak path offers a genuine security advantage over the .deb, at the cost of the additional configuration overhead described in the installation section.

What Proton Does and Does Not Protect

Proton isolates game save data and configuration through per-game Wine prefixes in ~/.local/share/Steam/steamapps/compatdata/, which prevents games from interfering with each other's data. It does not prevent a game process from accessing your broader home directory. A malicious Windows binary running through Proton can, among other things: read browser-saved credentials and cookies from ~/.config/chromium/ or ~/.mozilla/; read SSH private keys from ~/.ssh/; read any file your user owns. If you want genuine process containment for an untrusted Windows executable, use the Flatpak Steam installation with Flatseal, or run the binary inside a VM.

The FBI Steam Malware Investigation

In March 2026, the FBI's Seattle Division announced an active investigation into malware-laden games distributed through Steam between May 2024 and January 2026. The games identified in the investigation include BlockBlasters, Chemia, Dashverse (also known as DashFPS), Lampy, Lunara, PirateFi, and Tokenova. The attack pattern in several of these titles involved publishing a functional game that passed Steam's initial vetting, then delivering malware via a subsequent update -- a technique that bypasses platform checks that only run on initial submission.

The malware families deployed across these titles included Vidar (a Malware-as-a-Service infostealer that exfiltrates browser credentials, authentication cookies, and cryptocurrency wallet data), HijackLoader (a loader that establishes persistence and drops additional payloads), and Fickle Stealer. One of the most documented cases involved BlockBlasters, where a crypto-drainer was added after initial release. A streamer who downloaded and ran the game during a charity livestream lost over $32,000 from a cryptocurrency wallet. Blockchain investigators later estimated total losses from that title at approximately $150,000.

The Steam Workshop is a related vector. In February 2026, the People Playground developer temporarily shut down its Workshop after a mod called "FPS++" was found to contain worm malware. Workshop content for games running through Proton can execute code with the same user-level permissions as the game process itself. The People Playground incident appeared to primarily affect Windows users; whether the worm executed on Linux via Proton was not conclusively determined, but the principle applies -- Workshop content is executable code and should be treated accordingly.

If you installed any of the named titles during the relevant period, the FBI is actively seeking victim reports at ic3.gov and via a dedicated reporting form at forms.fbi.gov/victims/Steam_Malware.

Infostealer Mechanics: What Vidar and Similar Malware Target

Information stealers like Vidar are specifically engineered to harvest authentication data rather than encrypt files for ransom. Their targets on a typical gaming desktop include: browser credential stores and cookies (Chrome, Firefox, Chromium -- all of which store data in plaintext or weakly-encrypted formats in the home directory); Steam session tokens (which can allow account takeover without needing the password); Discord tokens (same mechanism); and cryptocurrency wallet seed phrases or keystore files. Authentication cookies are particularly valuable because they bypass 2FA -- if an attacker captures a valid session cookie, they can impersonate an authenticated session without the password or second factor. On Linux, these files sit in standard home directory paths that a Wine-executed process can reach. The countermeasure is not primarily antivirus (signature-based tools miss novel variants); it is reducing the attack surface by using the Flatpak Steam installation and practicing account hygiene.

Steam Account Security

Steam Guard is Valve's two-factor authentication system. Two modes exist: email verification (a code sent to your registered email when logging in from a new device) and the Steam Guard Mobile Authenticator (a TOTP-style code generated in the Steam mobile app every 30 seconds). The Mobile Authenticator is the recommended option. It is required for trading on the Community Market and provides meaningful protection against credential theft -- even if an attacker captures your password, they cannot access the account without the time-limited code from your device.

Note one important nuance: Vidar and similar infostealers target authentication cookies, not passwords. A stolen session cookie grants access to an already-authenticated session, which means Steam Guard does not protect an active session that was captured while it was valid. The protection Steam Guard provides is against new logins with stolen credentials, not against session hijacking of an existing active login. Logging out of Steam when not actively using it -- and using the Flatpak isolation to limit what a game process can read -- reduces the value of any credentials that might be exfiltrated.

Enable Steam Guard via Steam > Settings > Security > Manage Steam Guard. Use the Mobile Authenticator, not email-only verification. Store the recovery code in a secure location separate from the device.

Mod Security and Third-Party Sources

Game mods downloaded from sources outside the Steam Workshop -- Nexus Mods, GitHub repositories, Discord servers, or direct links from game communities -- are executable code or data files that run in the context of the game process. On Linux, mods that ship as native Linux libraries (.so files) or as scripts executed by the game engine have full user-level access. Mods for games running through Proton that ship as Windows DLLs are loaded by Wine and run with the same permissions as the game itself. The risk profile is identical to running an untrusted executable. This does not mean modding is unsafe, but it means the source matters: prefer mods from established authors with public code history, avoid mods that require you to disable antivirus or place files in unusual system locations, and treat direct messages from strangers linking to "must-have" mods as the social engineering vector they frequently are.

Performance Tuning: Environment Variables That Matter

Steam's launch options accept environment variables that Proton passes to the game process. A small set of these variables covers the overwhelming majority of real-world tuning scenarios:

Steam launch options -- common variables
# Order matters: env vars first, then wrapper executables, then %command%
# gamemoderun and mangohud are executables that exec the next argument as a child process.
# Any env var placed after them in the string is only exported into the current shell
# context and may not be inherited reliably by the child. Keep env vars to the left.

# Standard setup: env vars → wrappers → %command%
PROTON_LOG=1 gamemoderun mangohud %command%

# PROTON_LOG=1 -- writes ~/proton_<appid>.log. Use for diagnostics; remove during normal play.
# The log can grow to several hundred MB in a single session -- clean it up after use.

# DXVK_ASYNC=1 -- removed from DXVK mainline; no longer valid in standard Proton 9/10
# Only applies if using a specific GE-Proton build that re-includes the async patch.

# For NVIDIA hybrid laptops (dGPU + iGPU) -- forces the discrete GPU
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia gamemoderun %command%

# AMD Anti-Lag (RDNA2+ only) -- reduces input latency; requires Mesa 25.x or later
ENABLE_LAYER_MESA_ANTI_LAG=1 gamemoderun %command%

The PROTON_LOG=1 variable is the most underused diagnostic tool in Linux gaming. When a game crashes immediately on launch with no visible error, the log file will contain the Wine and DXVK error messages that explain what failed. Look for lines beginning with err: or fixme: that correspond to the point the crash occurred.

DXVK 2.7: Three Changes That Affect Every Proton User

The old state cache files are dead. DXVK 2.7 removed the state cache entirely -- those .dxvk-cache files that accumulated in your game directories have been irrelevant since DXVK 2.0 introduced VK_EXT_graphics_pipeline_library, which compiles partial pipelines asynchronously without needing the cache. DXVK 2.7 removed the legacy code entirely. You can safely delete any .dxvk-cache files you find. The shader pre-compilation cache in ~/.local/share/Steam/steamapps/shadercache/ is separate and still active -- do not delete that.

Resizable BAR is now strongly recommended by the DXVK team. DXVK 2.7 introduced VK_EXT_descriptor_buffer as the default on newer AMD and NVIDIA GPUs, which significantly reduces CPU overhead in CPU-bound titles (Final Fantasy XIV, God of War, Watch Dogs 2, and others). The DXVK release notes describe the descriptor buffer change as one that "significantly reduces CPU overhead compared to the legacy binding model." The feature remains disabled on NVIDIA Pascal or older, and AMD RDNA2 or older when using AMDVLK -- but RADV (the Mesa AMD driver Ubuntu uses) is unaffected. On Linux with RADV, RDNA2 and newer all benefit. Requirements for ReBAR: UEFI firmware (not legacy BIOS), RTX 30-series or RX 6000-series or newer GPU, Intel 10th-gen or Ryzen 3000 CPU or newer. Enable in BIOS/UEFI. Verify with nvidia-smi -q | grep -i "BAR1" (look for size >256 MiB). The override option is dxvk.enableDescriptorBuffer=False in a dxvk.conf file in the game directory if you need to disable it per-title.

DXVK now enforces driver VRAM budgets on discrete GPUs, dynamically evicting unused resources to system RAM when under memory pressure. This improves performance in many Unity Engine titles on VRAM-constrained systems and can allow higher texture settings at the same frame rate. Note: as of DXVK 2.7 this feature does not work correctly on AMD GPUs due to a kernel driver issue -- AMD RADV users will not see this benefit until the kernel side is resolved.

// launch options builder -- compose your string
select options above to build your launch string
Shader Pre-Compilation: Why Your First Session Stutters

A significant source of confusion for new Linux gamers is severe frame stutter during a game's first play session -- sometimes lasting 20 to 40 minutes. This is caused by on-the-fly DXVK shader compilation. When a new shader is encountered for the first time, the GPU stalls briefly while DXVK compiles it to Vulkan. Steam has partially addressed this by distributing pre-compiled shader caches for popular titles through its content network, but coverage is not universal. You can check whether a pre-compiled cache exists by right-clicking a game, opening Properties, and viewing the Shader Pre-Caching section under the General tab. If "Enable Shader Pre-Caching" is on and a download has completed, your first session will be substantially smoother. For titles without a Steam shader cache, the stutter is front-loaded: play through it once, and subsequent sessions use the local disk cache in ~/.local/share/Steam/steamapps/shadercache/. The GE-Proton async patch -- which was removed from DXVK mainline -- offloaded this compilation to a background thread to reduce visible stutter, which is why some older ProtonDB reports for stutter-prone titles still recommend it. In standard Proton 9 and 10, that workaround no longer applies.

Controller Support: How the Input Stack Works

Controller support on Ubuntu is handled by a layered stack, and understanding which layer is responsible for a problem is the difference between a five-minute fix and an hour of confusion. From bottom to top: the Linux kernel exposes the physical controller as a /dev/input/event* device; SDL2 normalizes that raw device into a standardized gamepad layout; Steam Input sits above both and can remap, emulate, and override input for any game launched through Steam.

For games running under Proton, Steam Input is particularly important because Windows games are written against Microsoft's XInput API -- which Linux does not implement natively. Steam Input translates your controller into what appears to the game as an Xbox 360 or Xbox One controller, and Proton handles the XInput translation internally. For the vast majority of Proton games with a controller, you do not need to do anything beyond plugging in the controller before launching Steam. Xbox controllers (including the newer Xbox Series models), PlayStation DualSense and DualShock 4 controllers, and many third-party XInput-compatible pads work without additional configuration because their kernel drivers (xpad for Xbox, hid-playstation for DualSense) are included in the mainline kernel and Ubuntu ships with them.

How Steam Input Interacts with Proton Games

Steam Input presents a virtual controller to the game rather than the physical device directly. For Proton games this is almost always the right behavior: Windows games that expect XInput receive a reliable virtual XInput device, which avoids subtle issues caused by controller firmware differences across hardware vendors. The ArchWiki documents one nuance: a game may support both Steam Input natively and the legacy XInput path simultaneously -- when Steam Input is active for that game, Steam Input takes priority over the underlying device's own reports. This is why disabling Steam Input for a specific game (via right-click > Properties > Controller) and setting it to "Disable Steam Input" can sometimes fix double-input or axis problems, while enabling it fixes games that detect no controller at all. There is no single correct setting; it depends on how the specific game implements its input. For games that refuse to detect a controller under Proton, the first two things to check are: (1) whether Steam Input is enabled for that game, and (2) whether the controller was connected before launching Steam rather than after.

Bluetooth controllers are supported by the same kernel drivers. DualSense over Bluetooth is fully supported, including haptic feedback and adaptive triggers in games that specifically implement them through the hid-playstation driver or Steam's own DualSense support layer. Xbox controllers over Bluetooth require the xone driver (for the newer Xbox One/Series USB receiver) which is not in the Ubuntu mainline kernel as of April 2026 -- it must be installed from the medusalix/xone GitHub repository. The older Xbox 360 wireless receiver uses the xpad driver which is already present.

terminal -- controller diagnostics
# List all recognized input devices -- your controller should appear here
$ cat /proc/bus/input/devices | grep -A 5 -i -E "gamepad|joystick|controller"

# Check which kernel driver is handling your controller
$ ls /sys/bus/hid/drivers/ | grep -i -E "xbox|xpad|playstation|sony|hid"

# Test axes and buttons with evtest (install if not present)
$ sudo apt install evtest
$ sudo evtest  # select your controller device node from the list

# If a game won't detect the controller, add your user to the input group
# (rarely needed on Ubuntu 24.04, but resolves some permission issues)
$ sudo usermod -aG input $USER
$ newgrp input  # apply without logging out
Double-Input and Incorrect Button Mapping: The Common Cause

If a Proton game reports double actions from a single button press, or axes behave as digital buttons, the cause is typically Proton picking up both the /dev/input/js* (legacy joystick) and /dev/input/event* (evdev) device nodes simultaneously for the same physical controller. The fix is to disable the legacy JS interface inside the game's Wine prefix via Steam's built-in Wine control panel: with the game not running, launch it with protontricks [appid] joy.cpl (install protontricks first: sudo apt install protontricks) and uncheck the duplicate joystick device in the Game Controllers list, leaving only the event-based device. The correct device to keep is the one that shows all axes and buttons correctly -- the JS node typically lacks triggers as analog axes. If button prompts show the wrong icons (e.g., Xbox prompts when you have a PlayStation controller), this is an SDL2 mapping issue: setting SDL_GAMECONTROLLERCONFIG in launch options with a corrected GUID mapping fixes it, though Steam Input's controller type configuration is the simpler path for games that respect it.

Wayland vs. X11 for Gaming

Ubuntu 24.04 LTS defaults to Wayland with GNOME. For gaming, this matters because MangoHud, screen capture, and some older games were historically designed around X11 assumptions. The situation has improved significantly as of early 2026: MangoHud works under Wayland for Vulkan games, OBS Studio captures via PipeWire, and Proton games generally run without issues under GNOME's XWayland layer.

The key thing to understand is that most Proton games do not run as native Wayland clients even when your desktop is on Wayland. They run through XWayland -- an X11 compatibility server that GNOME starts automatically. XWayland is a full X11 server running alongside the Wayland compositor, and Proton games interact with it as though they were on a conventional X11 desktop. This is transparent to you and to the game. The practical distinction only surfaces in three areas: frame pacing, fullscreen exclusive mode behavior, and overlay injection.

Wayland Gaming: What Changes vs. X11

Frame pacing under XWayland vs. native Wayland: XWayland games are subject to the Wayland compositor's frame scheduling, which can introduce up to one frame of latency compared to X11 fullscreen exclusive mode. In practice, this is measurable but not perceptible for most refresh rates. If you use MangoHud and see consistently higher frame times under Wayland vs. X11 for the same game, switching to an X11 session is a legitimate optimization. NVIDIA's implementation of the Wayland fifo-v1 protocol -- added in the 580 driver series -- reduces the visual inconsistency between frames on Vulkan games, partially closing this gap.

Fullscreen exclusive under XWayland: True fullscreen exclusive mode (where the game bypasses the compositor entirely) is not possible under XWayland in GNOME. Games that try to grab fullscreen exclusive will fall back to a borderless fullscreen window managed by the compositor. For most games this is invisible, but it can affect frame timing in latency-sensitive titles. Gamescope resolves this by creating its own nested compositor context that the game runs inside, giving you compositor-bypass-equivalent behavior regardless of whether your desktop is Wayland or X11.

MangoHud and overlays on Wayland: MangoHud injects into the game's Vulkan or OpenGL command stream, so it works regardless of whether the desktop is Wayland or X11. However, mangoapp (the Gamescope integration variant) does require Gamescope to be running. Screen capture via OBS works under Wayland through PipeWire portal capture -- you will be prompted by GNOME to share a window or screen on first use.

If you encounter a specific game that refuses to render correctly under Wayland, or an overlay that will not appear, logging into an X11 session is still available at the Ubuntu login screen. Click your username, then the gear icon at the bottom right, and select "Ubuntu on Xorg." This is a per-session choice and does not change your default permanently.

Gamescope: What It Does and When to Use It

Gamescope is Valve's nested Wayland compositor, developed primarily for the Steam Deck but packaged for Ubuntu. It runs as a process that your game is launched inside -- meaning the game sees a Wayland compositor rather than your desktop compositor, and Gamescope handles all display output. This gives you several capabilities your desktop compositor cannot: frame limiting independent of the game's own limiter, AMD FSR upscaling applied at the compositor level (so it works on any game, not just ones with FSR built in), and resolution override. The command syntax for Steam launch options is gamescope -W 1920 -H 1080 -r 60 -- %command% where -W/-H set output resolution and -r caps frame rate. Adding --fsr-upscale enables FSR1 scaling. Install via sudo apt install gamescope. On NVIDIA, Gamescope requires the Vulkan driver and will exit immediately if the NVIDIA driver is not properly loaded -- run vulkaninfo | grep deviceName to confirm the driver is working before testing.

Diagnosing Proton Failures: Reading the Log

When a game crashes immediately on launch with no visible error, PROTON_LOG=1 is where you start. Add it to the game's Steam launch options, reproduce the crash, then open the log file at ~/proton_<appid>.log. Most useful crashes leave a trace in the last 100 lines.

How to Read a Proton Log: What Each Prefix Means

Proton's log format inherits from Wine. The prefixes matter: err: lines are hard errors -- Wine encountered something it could not handle. fixme: lines are unimplemented stubs -- Wine hit a Windows API call it knows about but has not fully implemented. warn: lines are usually harmless. For a crash, filter for err: lines near the end of the log file. Common patterns:

  • err:module:LdrInitializeThunk "xxx.dll" failed to initialize -- a required DLL is missing or failed to load. The DLL name tells you what component is missing. If it is a game-specific DLL (not a Windows system DLL), the game's installer may have failed. Run protontricks <appid> --gui to install missing Visual C++ runtimes or DirectX components.
  • err:vulkan:wine_vkCreateInstance -- Vulkan initialization failed. Verify your driver is loaded with vulkaninfo. If Vulkan fails entirely, DXVK cannot start and the game will crash at the D3D device creation step.
  • err:ntdll:NtCreateFile followed by a path error -- a file the game expected is not at the path Wine is looking for. This often appears when a game installer placed files in an unexpected Wine prefix path. The compatdata folder may need to be wiped and the game reinstalled cleanly.
  • err:seh:setup_exception -- a structured exception handler failure. Usually indicates a game-specific crash unrelated to Proton. Look up the game name + "Proton crash" + the exception address on ProtonDB reports to find documented workarounds.
terminal -- reading a proton log efficiently
# Find the log file for a specific game (replace APPID with the number from the store URL)
$ ls ~/proton_*.log

# Show only hard errors from the log
$ grep "^err:" ~/proton_APPID.log | tail -40

# Show the last 80 lines (where most crashes are recorded)
$ tail -80 ~/proton_APPID.log

# Search for a specific DLL failure
$ grep -i "failed to initialize\|vkCreate\|NtCreateFile" ~/proton_APPID.log

# Check DXVK's own output for GPU/driver errors (separate from the Proton log)
# DXVK writes to the game directory -- look for dxgi.log or d3d11.log
$ find ~/.local/share/Steam/steamapps/common -name "dxgi.log" -o -name "d3d11.log" 2>/dev/null
The Three Fixes That Resolve 80% of Proton Launch Failures

Based on patterns in ProtonDB reports and the GamingOnLinux community, the following three interventions resolve the overwhelming majority of games that fail to launch on first attempt:

  1. Delete the Wine prefix and reinstall. A corrupted or partially created compatdata/[appid]/pfx/ directory causes silent launch failures. Deleting the pfx/ folder specifically -- not the entire compatdata/[appid]/ directory -- and relaunching Steam forces a clean prefix creation while preserving the config_info and version files in the parent that Steam uses to track which Proton version was last used for that game. If you delete the entire compatdata/[appid]/ directory, Steam recreates it correctly on next launch, so deleting the parent is also safe -- but the distinction is worth knowing. Go to the game's Properties > Local Files > Browse to find the path, then delete the pfx folder (or the entire appid directory if the pfx folder doesn't exist yet).
  2. Switch Proton versions. In the game's Properties > Compatibility tab, force a different Proton version. A game blocked on Proton 10 may work on Proton 9 or GE-Proton. Check the ProtonDB reports for the specific version reporters used.
  3. Install missing runtimes via protontricks. Many games require Visual C++ 2019 redistributables, DirectX components, or .NET frameworks that are not automatically installed by Proton. The sudo apt install protontricks command installs the Ubuntu-packaged version, which may lag the upstream release by several months. The Flatpak version (flatpak install flathub com.github.Matoking.protontricks) is more current and is the recommended path if you use the .deb Steam installation. Run protontricks [appid] vcrun2019 d3dx11_43 for the most common missing components, or protontricks [appid] --gui for an interactive list of all installable components. When using the Flatpak version, call it as flatpak run com.github.Matoking.protontricks [appid] --gui.

The Practical ProtonDB Workflow

The workflow that experienced Linux gamers follow before starting a new title is straightforward and worth making a habit:

First, look up the game on ProtonDB. Read the three or four most recent Gold or Platinum reports that match your GPU vendor. Note any launch options or specific Proton version those reporters used. Second, if the game has an EAC or BattlEye dependency, cross-reference the GamingOnLinux anti-cheat tracker to confirm Linux support is enabled for that specific title. Third, install the game through Steam and launch it with PROTON_LOG=1 %command% on the first run -- not to read the log immediately, but to have it available if the launch fails. Fourth, if the launch succeeds, remove PROTON_LOG=1 and add gamemoderun mangohud %command% to measure baseline performance. Finally, after a few sessions, submit your own report to ProtonDB. The database is only as useful as the community that maintains it.

Expert Reference: Precise Facts the Docs Bury

The following are specific, verifiable technical details that experienced Linux gamers benefit from knowing but that require reading primary sources to find:

  • VKD3D-Proton 3.0 DXBC unification: DXVK and VKD3D-Proton now share the same DXBC shader front-end after the 3.0 backend rewrite. This fixed Red Dead Redemption 2 in D3D12 mode and many other previously broken titles. The unification means shader parsing bugs fixed in DXVK can propagate to VKD3D-Proton automatically.
  • FSR4 on non-RDNA4 hardware: VKD3D-Proton 3.0's FSR4 support requires VK_KHR_shader_float8, which only RDNA4 GPUs expose in the official build. The emulation path (int8 + float16 cooperative matrices) for older GPUs must be built from source with specific flags -- it is not included in the binary Proton ships. DLSS4 has no equivalent path in Proton whatsoever.
  • VKD3D-Proton Work Graphs emulation performance: The experimental D3D12 work graph emulation via compute shaders in VKD3D-Proton 3.0 has been observed to outperform native GPU driver implementations of the feature in several benchmarked scenarios, at the cost of higher VRAM usage. No real-world shipped games use work graphs yet as of early 2026.
  • DXVK 2.7 state cache removal: The .dxvk-cache files that accumulate in game directories have been functionally irrelevant since DXVK 2.0 (which introduced VK_EXT_graphics_pipeline_library for async pipeline compilation). DXVK 2.7 removed the legacy cache code entirely. These files are safe to delete. The Steam shader pre-compilation cache in ~/.local/share/Steam/steamapps/shadercache/ is a separate system and remains active.
  • DXVK descriptor buffer and RADV: VK_EXT_descriptor_buffer is disabled by default on AMD RDNA2 and older when using AMDVLK or Windows AMD drivers due to severe MSAA-related hardware optimizations AMD disables in that mode. RADV (the open-source Mesa AMD driver, which is what Ubuntu uses) does not have this issue and benefits from the extension on RDNA2 and newer. If you are on AMD and using RADV, you already have the fast path.
  • Resizable BAR verification on Linux: Check whether ReBAR is active with nvidia-smi -q | grep -i "BAR1" on NVIDIA -- look for a BAR1 size greater than 256 MiB (typically 8 GiB or 16 GiB when active, versus 256 MiB when inactive). On AMD, verify with sudo dmesg | grep -i "BAR\|resize" at boot. DXVK 2.7 release notes explicitly state ReBAR is "strongly recommended." ReBAR works by allowing the CPU to address the full GPU VRAM directly rather than only a 256 MiB window at a time, which eliminates a bottleneck when transferring large amounts of data (textures, geometry buffers) to the GPU per frame. Hardware requirements: UEFI firmware (not legacy BIOS), RTX 30-series / RX 6000-series or newer GPU, 10th-gen Intel or Ryzen 3000 CPU or newer. Enable the feature in your UEFI firmware settings under "Resizable BAR" or "Smart Access Memory." The Secure Boot caveat: some UEFI firmware implementations restrict memory layout changes when Secure Boot is active because the BIOS memory map is locked after secure boot measurement -- if you enable ReBAR but it does not take effect, temporarily disabling Secure Boot in the same UEFI session, saving, then re-enabling it is occasionally required to allow the new BAR assignment to be written.
  • GameMode I/O priority detail: GameMode sets the game process's I/O scheduling class to Best Effort 0 (BE/0) -- the highest priority within the Best Effort class. This is distinct from the Real Time class, which GameMode does not use by default (softrealtime is off by default and requires polkit configuration to enable). The CPU governor is restored to its pre-game state on exit, not forced to powersave -- the powersave behavior some users see is because their system was already on powersave before they launched the game.
  • MangoHud per-game config naming: For Proton games the config filename must be wine-<executable>.conf (without .exe) to override the global config. A file named MangoHud.conf is the global fallback. The throttling_status key surfaces active thermal or power throttling events in the frametime graph. MangoHud 0.8.2 fixed a false positive where RDNA3 GPUs were always reported as throttling. Log output is CSV-formatted and uploadable to flightlessmango.com for automated frametime and percentile graph generation.
  • FSR3.1 frame generation and VKD3D queue submission: VKD3D-Proton rewrote its queue submission logic in the 2.14/3.0 cycle specifically to handle FSR3 3.1 frame generation's unusual GPU submission pattern. On GPUs with a single graphics queue, VKD3D-Proton now performs software scheduling of GPU work to compensate. Final Fantasy XVI with FSR3 frame gen on RADV was the benchmark case, with nearly doubled performance in some scenarios. The VKD3D_CONFIG=no_staggered_submit environment variable disables this if it causes regressions on a specific title.

Where Ubuntu Gaming Stands in 2026

The numbers from Phoronix, GamingOnLinux, and Valve's own survey data tell a consistent story: Linux gaming has grown substantially, and Ubuntu remains the most tested desktop distribution in the ecosystem. Linux closed 2025 at approximately 3.5% of Steam's active user base, dipped to 2.23% in February 2026, then jumped to 5.33% in March 2026 -- a figure Phoronix described as an all-time high that put Linux at more than double the macOS share on Steam for the same month. That March spike drew scrutiny: analysts and the GamingOnLinux community noted that Steam's survey methodology can produce volatility when sampling weights shift, and that comparisons to January 2026 (rather than February) give a cleaner baseline. Even accounting for that variability, the directional trend over the prior 24 months is unambiguous -- Linux on Steam has roughly doubled from its 2024 share. A further factor is that SteamOS 3, which powers the Steam Deck, counts as Linux in the survey; as of early 2026, Steam Deck installs represented approximately 24% of the Linux share, down from 42% two years prior -- meaning conventional desktop Linux has grown to represent a larger portion of that total.

What has not changed is the fragmentation at the multiplayer edge. Single-player gaming on Ubuntu in 2026 is, for the overwhelming majority of titles, indistinguishable from Windows in practice. The setup overhead -- driver installation, Steam configuration, the occasional ProtonDB lookup -- is a one-time cost, not a recurring one. Online competitive gaming remains variable: many titles work without issue, some require checking the anti-cheat tracker first, and a small category involving kernel-level anti-cheat is flatly incompatible regardless of what Proton version you use.

The underlying infrastructure -- Proton 10.0-4, DXVK 2.7.x, VKD3D-Proton 3.0, Mesa 26.0, GameMode, MangoHud 0.8.2 -- is now mature enough that staying current with Ubuntu LTS releases and keeping your drivers up to date is genuinely sufficient for most gaming use cases. The year-of-Linux-gaming joke persists in certain circles, but for anyone willing to spend twenty minutes on initial setup, it largely ceased being a joke some time ago.

Sources and Verification

Statistics, version numbers, and technical details in this article are drawn from primary sources. Key references: