Skip to main content

🐧 Linux Setup

Note: Everything here should also work for L4D1 (1.0 or Newest), but is untested.

Old versions, method 1 (easy way, directly in the bat)​

Use this method unless you have a specific reason not to

  • Tested by Osku on Ubuntu 22.04 (Wayland) on 2024-11-08
  • Tested by Skytis on Kubuntu 26.04 (Wayland) on 2026-05-26
  • Tested by Skytis on CachyOS on 2026-10-14

Steps​

  • Acquire the desired old version of L4D(2) from the L4D Speedrunning Discord (in this guide 2.0.0.0 is used), unzip somewhere
  • Acquire LiveSplit, unzip somewhere
  • Edit the Start L4D2.2000.bat to add LiveSplit to it
    • In this example you have a folder called "Games" which has the folders "L4D2 2.0.0.0" (this contains Start L4D2.2000.bat) and "livesplit" (this contains LiveSplit.exe)
    • Add these lines (adjust according to where your LiveSplit is relative to the L4D2 bat)
      • cd ..
      • cd ..
      • start livesplit\Livesplit.exe
  • Add Start L4D2.2000.bat as Non-Steam game to Steam
    • Either add some other .exe then edit it to point to the .bat or change the filter when browsing the file to add to show all files
    • Change the "Start in" to the folder with your left4dead2.exe, for example /home/skytis/Games/L4D2 2.0.0.0/Left 4 Dead 2/
  • Under Compatibility enable Force the use of a specific Steam Play compatibility tool and select a Proton version (see Proton section below, the default will very likely cause issues)
  • Launch the bat-Steam-game
  • Wait for the game and LiveSplit to start
  • Verify that SST works (check for the console output or see if sst commands can be autocompleted)
    • If it crashes or SST doesn't work, check the SST Issues section of this guide
  • Configure LiveSplit and verify that it works

Notes​

  • SST does not automatically update, that part of the bat file only works on Windows. If you want a newer version, you need to manually update it
  • Fonts don't work correctly, so stuff looks a little weird (feel free to try to fix this)

Old versions, method 2 (complicated way, SteamTinkerLaunch)​

Use this method if method 1 doesn't work or if you know what you're doing and want to tinker with more stuff

Tested by Skytis on Kubuntu 24.04 LTS (x11) on 2024-11-02 with the latest versions of STL and pacstall available and proton-9.0-3c (via STL)

Steps​

  • Acquire the desired old version of L4D(2) from the L4D Speedrunning Discord (in this guide 2.0.0.0 is used), unzip somewhere
  • Acquire LiveSplit, unzip somewhere
  • Install SteamTinkerLaunch https://github.com/sonic2kk/steamtinkerlaunch
    • It is not available via a native repository for (K)ubuntu. Install https://github.com/pacstall/pacstall and then run pacstall -I steamtinkerlaunch-git
      • UPPER CASE i (for install), NOT LOWER CASE L
  • Add STL as compatibility tool https://github.com/sonic2kk/steamtinkerlaunch/wiki/Steam-Compatibility-Tool
    • Should just need to run steamtinkerlaunch compat add
    • Restart Steam
  • Add Start L4D2.2000.bat as Non-Steam game to Steam
    • Either add some other .exe then edit it to point to the .bat or change the filter when browsing the file to add to show all files
    • Change the "Start in" to the folder with your left4dead2.exe, for example /home/skytis/Games/L4D2 2.0.0.0/Left 4 Dead 2/
  • Under Compatibility force a specific compatibility tool: Steam Tinker Launch
  • Launch the bat-Steam-game
  • In the STL window click the MAIN MENU button (you have 2s to do this, then the game is automatically launched)
  • Click on GAME MENU
  • Turn on Use custom command
  • Custom command: Select your LiveSplit.exe
  • Enable Fork custom command
  • Disable Use Steam Linux Runtime with Custom Command
  • Enable Inject custom command
  • Click SAVE AND PLAY
  • Wait for the game and LiveSplit to start
  • Verify that SST works (check for the console output or see if sst commands can be autocompleted)
    • If it crashes or SST doesn't work, check the SST Issues section of this guide
  • Configure LiveSplit and verify that it works
    • Skytis had it already set up before from testing other stuff, so if weird stuff happens to you when configuring, maybe launch LiveSplit by itself to configure it

Notes​

  • SST does not automatically update, that part of the bat file only works on Windows. If you want a newer version, you need to manually update it
  • If you quit the game first, LiveSplit freezes. You can just stop it via Steam
  • If you quit LiveSplit first, then the game, everything should properly be shut down
  • If you launch the bat-Steam-game and you don't get the STL launch dialog (where you can go to MAIN MENU), close LiveSplit and the game, then start Steam Tinker Launch (Settings) to edit stuff. It should have automatically selected the game you last launched (so the bat-Steam-game)
  • Fonts don't work correctly, so stuff looks a little weird (feel free to try to fix this)
  • Sometimes LiveSplit doesn't start. No clue why

Old versions, method 3 (using LibreSplit)​

Autosplitting currently only works with v2.0.0.0

Briefly tested by Skytis on Kubuntu 26.04 (Wayland) on 2026-05-30

LibreSplit runs natively on Linux but requires different autosplitters and is not as configurable as LiveSplit (especially via GUI)

Steps​

  • Acquire the desired old version of L4D(2) from the L4D Speedrunning Discord (in this guide 2.0.0.0 is used), unzip somewhere
  • Follow the instructions on the LibreSplit website to install LibreSplit
  • Start LibreSplit, verify that it works
  • Download/create splits
  • Download the autosplitter
  • Open the splits JSON in LibreSplit
  • Open the autosplitter in LibreSplit
  • Add the left4dead2.exe from the old version to Steam
    • Set your launch options to at least the following %command% -steam -insecure
      • You can also include more things, like %command% -steam -insecure -novid -high -lv -console or even env -u LD_PRELOAD gamescope -w 2560 -h 1440 --fullscreen --force-grab-cursor -- env LD_PRELOAD="$LD_PRELOAD" %command% -steam -insecure -novid -high -lv -console
  • Under Compatibility enable Force the use of a specific Steam Play compatibility tool and select a Proton version (see Proton section below, the default will very likely cause issues)
  • Open LibreSplit and the left4dead2.exe you added to Steam

Notes​

  • SST does not automatically update. Even if this method would use the bat file, that part of the bat file only works on Windows. If you want a newer version, you need to manually update it
  • LiveSplit autosplitters must be ported over, they won't work out of the box
  • If you are using Wayland (and not X11), global hotkeys might not work. This depends on your distro/compositor

Newest version, method 1 (easy way, directly in the bat)​

This is only needed if you want to use LiveSplit with the autosplitter while speedrunning on newest

Tested by Skytis on Kubuntu 25.10 (Wayland) on 2026-05-08 GE-Proton9-11
Note that you can't play on secure servers with the Windows version via Proton. You have to use the Linux version for that. Unfortunately cannot easily have the newest Windows and Linux version at the same time

Steps​

  • Download the newest version of Left 4 Dead 2 via Steam (simply download the game like you normally would)
  • Download any old version from the Discord server
  • Set the compatibility to any Proton version (this makes Steam download the Windows-specific files, for example the .exe)
  • Acquire LiveSplit, unzip somewhere
  • Copy the SST folder from an old version download to <Steam folder>/steamapps/common/ (I believe it needs to be one level above the Left 4 Dead 2 folder)
  • Copy SourceSpeedrunTools.vdf from the old version (for example L4D2 2.0.0.0/Left 4 Dead 2/left4dead2/addons/SourceSpeedrunTools.vdf) to <Steam folder>/steamapps/common/Left 4 Dead 2/left4dead2/addons/
  • Create Start L4D2.newest.bat
    • In my case there's a folder called "Games" which has the folders "L4D2 Newest" (this contains Start L4D2.newest.bat) and "livesplit" (this contains LiveSplit.exe)
    • Change the cd lines so they point to your L4D2 newest and to your LiveSplit

cd "%~dp0"
call SST\update.bat

set GAME_PARAMS=
if not exist game-params.txt goto noparams
setlocal EnableDelayedExpansion
:: append each line in the file to the command line
for /f "delims=" %%l in (game-params.txt) do (
set GAME_PARAMS=!GAME_PARAMS! %%l
)
setlocal DisableDelayedExpansion
:noparams

cd "..\..\.steam\debian-installation\steamapps\common\Left 4 Dead 2\"
start left4dead2.exe -steam -insecure %GAME_PARAMS% %*

cd "..\..\..\..\..\Games\"
start LiveSplit\LiveSplit.exe
  • Add Start L4D2.newest.bat as Non-Steam game to Steam
    • Add some other program or .exe then edit it to point to the .bat since you can't add the .bat directly
    • Change the "Start in" to the folder with your left4dead2.exe, for example /home/skytis/Games/L4D2 Newest/Left 4 Dead 2/
  • Under Compatibility enable Force the use of a specific Steam Play compatibility tool and select a Proton version (I used GE-Proton9-11)
  • Launch the bat-Steam-game
  • Wait for the game and LiveSplit to start
  • Verify that SST works (check for the console output or see if sst commands can be autocompleted)
    • If it crashes or SST doesn't work, check if you have the newest version (the auto updater doesn't work on Linux), otherwise ask in the speedrun Discord server
  • Configure LiveSplit and verify that it works

Notes​

  • SST does not automatically update, that part of the bat file only works on Windows. If you want a newer version, you need to manually update it

Proton​

Proton is needed to run Windows games on Linux. But based on Skytis' testing almost every Proton version has some noticeable issue(s). As of 2026-05-25 the only tested version without such issues (yet?) is GE-Proton9-11. For some mice it might interpret mousewheel left/right as forward/back button presses, this is a Proton issue that is fixed in Proton 11.

Setting up GE-Proton versions​

The easiest way to set up GE-Proton versions is via the program ProtonUp-Qt

  • Click Add version
  • For Compatibility tool select GE-Proton (default)
  • For Version select GE-Proton9-11
  • Click Install
  • Wait for it to download and install
  • Restart Steam
  • Tell Steam to use the newly installed Proton version
    • Right click the "game" in your library
    • Properties...
    • Compatibility
    • Enable Force the use of a specific Steam Play compatibility tool
    • Select GE-Proton9-11

Proton version specific issues​

This is based on Skytis' experience with L4D2 2.0.0.0 mainly on Kubuntu 24.04 LTS (x11) between November 2024 and 2025-02-16, the newer Proton versions were retested on Kubuntu 26.04 (Wayland) on 2026-05-25. Keep in mind that your mileage may vary based on various factors. Also new bugfix versions might fix or break things.

Vanilla Proton​

  • 10.0-4: Game generally feels unsmooth despite high FPS and there's occasional microstutters (mostly at the same areas, but sometimes random ones as well)
  • 9.0-4: LiveSplit splits late, sometimes not at all
  • 9.0-3: No issues noticed but version is no longer (easily) available
  • 8.0-5: Inputs are occasionally not registered by the game (verified via input display software)
  • 7.0-6: Performance leak, increasing amount of stutters as the playsession goes on, complete system freeze after about 2.5h
  • 6.3-8: LiveSplit doesn't show the live comparison that shows up once the timer reaches -10s to the comparison, LiveSplit doesn't split
  • 5.13-6: Timer doesn't start, game loads very long (might be fixable)
  • 5.0-10: LiveSplit crashes with an error: "LiveSplit has crashed due to the following reason: Success"
  • 4.11-13: Same as 5.0-10, also the game just shows a black screen (with menu music but not sound) and the cursor is confined to a 4:3 box on that black screen
  • 4.2-9: Same as 4.11-13
  • 3.16-9: Game loads long, menu works but LiveSplit doesn't start (no error pop up)
  • 3.7-8: Same as 3.16-9

Note: Steam Linux Runtimes also show up in the list of compatibility tools, but are different from Proton. They don't aim to run Windows programs on Linux and thus won't work at all

GE-Proton (Glorious Eggroll)​

  • GE-Proton11-4 and newer: Currently untested
  • GE-Proton11-1 to 11-3: not sure, but definitely had issues
  • GE-Proton10-34: LiveSplit doesn't split reliably
  • GE-Proton9-22: Same as 9.0-4
  • GE-Proton9-21: Same as 9.0-4
  • GE-Proton9-20: Same as 9.0-4
  • GE-Proton9-19: Same as 9.0-4
  • GE-Proton9-10: Small stutters, feels less smooth
  • GE-Proton9-1 to 9-9 likely all have the exact same issues (would require further testing to confirm)
    • GE-Proton9-9: Same as GE 9-2
    • GE-Proton9-8: Timer sometimes doesn't unpause after load
    • GE-Proton9-7: Same as 8.0-5 (dropped inputs)
    • GE-Proton9-6: Same as 8.0-5 (dropped inputs)
    • GE-Proton9-5: Probably same as GE 9-3 (not sure, but definitely had issues)
    • GE-Proton9-4: Same as GE 9-3
    • GE-Proton9-3: Same as 8.0-5 (dropped inputs), sometimes ~15% lower FPS for a few minutes
    • GE-Proton9-2: Sometimes ~15% lower FPS for a few minutes
    • GE-Proton9-1: Same as 8.0-5 (dropped inputs)

If you know how to set up older vanilla Proton versions or have found a version that works without issues (after multiple hours of testing), please reach out to Skytis

Preventing the cursor from escaping the game window​

With GE-Proton9-11 the cursor can escape the game window/monitor if you flick hard enough and click, causing the game to lose focus. This wasn't an issue in the past, it is unclear what caused it (possibly Steam update or distro upgrade). This should be preventable by the following:

  • install and run protontricks
  • choose the bat-Steam-game
  • Select the default wineprefix (unless you set up a separate one for this)
  • Run winecfg
  • Go to the Graphics tab
  • Enable Automatically capture the mouse in full-screen windows

However the checkbox is missing. If you select to run the game via (for example) Proton 9.0-4 (in Steam, in the game's configuration) and repeat the same steps, the checkbox will be present. As a temporary fix you can add the left4dead2.exe directly to Steam and run it with the launch options env -u LD_PRELOAD gamescope -w 2560 -h 1440 --fullscreen --force-grab-cursor -- env LD_PRELOAD="$LD_PRELOAD" %command% -steam -insecure -novid -high -lv -console. This requires gamescope to be installed. Note that you need to adjust the parameters if you don't play at 2560x1440. Adjust the parameters as needed, everything after the %command% is a launch option for the game itself (do NOT omit the -insecure!). This fix only gets the game running (without the cursor escaping), you will not get LiveSplit with autosplitting! You do not need to have LiveSplit running for a run to be valid. Check the Timing demos section for more info.

Workaround (last tested on 2026-10-14):

  • set the bat-Steam-game to use (vanilla) Proton 8.0-5
  • launch it
  • close it
  • install and run protontricks
  • choose the bat-Steam-game
  • Select the default wineprefix (unless you set up a separate one for this)
  • Run winecfg
  • Go to the Graphics tab
  • Enable Automatically capture the mouse in full-screen windows
  • set the bat-Steam-game to use GE-Proton9-11
  • launch it

Note: No idea why it works, so it might stop working at some point in the future.

Timing demos​

The runs are timed based on the demos. If you want to verify the timing or are running without LiveSplit and want to know your time, you can do so using Untitled Parser.

  • download the Linux version
  • place it wherever you'd like to (for example in your demos folder)
  • make it executable
  • put the demos you want to time in the same folder
  • open a terminal in that folder
  • run ./UntitledParser-linux . (this will parse all demos in the given folder, in this case the current folder)
  • see what the Total adjusted time is

Note: make sure you move/delete excess demos from the folder, otherwise you might run The Parish (and thus have 5 demos), then run Dead Center but still have the fifth demo of The Parish, meaning the parser will tell you the time of your Dead Center run plus the finale of The Parish

Performance issues​

Testing for stutters​

This is also based purely on Skytis' experiences

There are certain areas where it seems like you always get lower FPS than usual, examples:

  • Carnival map 2 (Fairground) the open area with the merry-go-round (after the long slope)
  • Parish map 1 (Waterfront) after you exit the safe area, before the gate
  • Parish map 2 (Park) at the start of the the panic event

These dips are noticeable, but not bad enough to miss bhops due to them. But if the game is already not running very smoothly, it can exacerbate the issue.

The easiest way to check is to load into Waterfront and run to the first gate. After turning the corner (at the end of the slope) after the safe area, your FPS should/might dip. Just run to the gate, look at your FPS, then quickreset. If lowering the game's resolution does not affect the severity of the dips, you are most likely CPU-constrained. Check the Streaming/Recording section

Streaming/Recording​

Streaming/Recording with OBS using x264 encoder caused a noticeable performance impact. If you don't have a very modern/high end CPU, consider trying GPU encoding if your game is not running smoothly.
Streaming with GPU Screen Recorder has less performance impact than OBS, but GPU SR can only capture a monitor entirely (there is no scene composition). This means you can't have LiveSplit, (visual) alerts or the chat displayed on stream (unless you put those over your game, also visible for you while you play).
It's recommended to use the new UI for GPU SR (can be toggled in the settings) as this has a few extra settings

Input Display​

Recommended to use girlglock's input overlay

As a hacky workaround you can do the following (not recommended!):

  • Install Input Overlay
  • Run OBS via Xwayland (basically an X11 emulation) by running QT_QPA_PLATFORM=xcb obs
  • (This step may vary on other distros) Go to System settings > Applications > Legacy X11 App Support and allow legacy X11 apps to read all keystrokes
    • Be aware of the security implications of this! If you just blindly install programs, you could get keylogged fairly easily
  • Optionally change the X11 keystroke permission back after you're done streaming/recordign

Credits​