Linux Setup
Note: Everything here should also work for L4D1 (1.0 or Newest), but is untested.
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 24.04 LTS (x11) on 2024-11-08 with Proton 9.0-3
- Tested by Skytis on Kubuntu 24.10 (Wayland) (clean install) on 2024-11-08 with Proton Experimental
- Tested by Skytis on Kubuntu 24.04 LTS (x11) (clean install) on 2024-11-20 with Proton 9.0-3
Note: Skytis tried this previously (around July/August 2024) with aciidz' assistance and couldn't get it to work. Osku tried this on 2024-11-08 and it worked. Skytis tried it again the same day and it also worked for him. No idea why
Steps
- Acquire the desired old version of L4D2 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 containsLiveSplit.exe
) - Add these lines (adjust according to your folder structure/LiveSplit location)
cd ..
cd ..
start livesplit\Livesplit.exe
- In this example you have a folder called "Games" which has the folders "L4D2 2.0.0.0" (this contains
- Add
Start L4D2.2000.bat
as Non-Steam game to Steam- Add some other .exe then edit it to point to the .bat since you can't add the .bat directly
- Under Compatibility force a specific compatibility tool select a Proton version (see Proton section below)
- 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, use SST v0.5, v0.6-v0.8 don't work on Linux (v0.9 is not released as of 2024-11-20 but likely will work again)
- Configure LiveSplit and verify that it works
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 L4D2 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
- It is not available via a native repository for (K)ubuntu. Install https://github.com/pacstall/pacstall and then run
- Add STL as compatibility tool https://github.com/sonic2kk/steamtinkerlaunch/wiki/Steam-Compatibility-Tool
- Should just need to run
steamtinkerlaunch compat add
- Restart Steam
- Should just need to run
- Add
Start L4D2.2000.bat
as Non-Steam game to Steam- Add some other .exe then edit it to point to the .bat since you can't add the .bat directly
- 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, use SST v0.5, v0.6-v0.8 don't work on Linux (v0.9 is not released as of 2024-11-20 but likely will work again)
- https://dl.mikes.software/sst/
- Place the .dll in the SST folder
- If it crashes or SST doesn't work, use SST v0.5, v0.6-v0.8 don't work on Linux (v0.9 is not released as of 2024-11-20 but likely will work again)
- 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
- 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 startSteam 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
- Sometimes LiveSplit doesn't start. No clue why
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 2025-02-16 the only tested version without such issues (yet?) is GE-Proton9-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
selectGE-Proton
(default) - For
Version
selectGE-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 on Kubuntu 24.04 LTS (x11) between November 2024 and 2025-02-16. Keep in mind that your mileage may vary based on various factors. Also new bugfix versions might fix or break things.
Vanilla Proton
- 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
- Steam Linux Runtime 1.0 (scout): Nothing launches
- Legacy runtime 1.0: Nothing launches
GE-Proton (Glorious Eggroll)
- 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
Performance issues
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.
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).
Skytis recommends using the new UI for GPU SR (can be toggled in the settings) as this has a few extra settings
Changing the process priority (niceness)
See this guide for information about how process priority works on Linux.
If the game is already running:
- Find the game's process ID
- Open the terminal
- Run
sudo renice -n -20 -p <L4D2 PID>
to give L4D2 the highest (user-space) priority
For permanently setting the default niceness, see the linked guide.
Testing for stutters
The easiest way is to load into Waterfront and run to the first gate. After turning the corner 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. Try GPU encoding or a faster preset.
Credits
- https://grapefruit.neocities.org/stuff/livesplit_proton - Figuring out how to get autosplitters working with Proton via STL
- Zephyr - sending https://grapefruit.neocities.org/stuff/livesplit_proton to Skytis
- Skytis - Figuring the STL stuff out for Left 4 Dead 2, writing this guide, testing
- aciidz - Help with several technical questions, emotional support
- Osku - Testing method 1, making Skytis retest method 1