Quake Champions in GNU/Linux
So, finally we can play Quake Champions in Linux properly, and it runs great! It’s not hard to get going either, so I thought I could show you how, and also some tweaks that I have found. I myself use Manjaro as my GNU/Linux distribution (based on Arch Linux), but you can use whatever distro you feel comfortable with. I will show how to do it on Arch based systems and Ubuntu based systems.
In this tutorial I will use Lutris to install the game for simplicity, but if you want you can just use the Linux native version of Steam.
Before you start, make sure that you have installd and are using proper GPU drivers. Preferably the latest drivers and that your system is up to date.
Feral’s GameMode:
First of all, lets install Feral’s GameMode. GameMode is a daemon/lib combo for Linux that allows games to request a set of optimisations be temporarily applied to the host OS and/or a game process. This is just a good thing to have and it will make the game run better and with higher priority.
To install Feral GameMode on Ubuntu 18.04 LTS and above you can add the official project Personal Package Archive (PPA) to your system’s software sources. GameMode should be included in Ubuntu 20.04, so if you are running 20.04, then there is no need to install this and you can go ahead to the next step, installing Wine or Lutris/Steam.
Doing this will get you the very latest version of Gamemode on Ubuntu 18.04
$ sudo add-apt-repository ppa:samoilov-lex/gamemode
$ sudo apt-get update
$ sudo apt install gamemode
On Arch based systems you can use pacman to easily install it:
$ sudo pacman -S gamemode
For more information about Ferals GameMode visit: https://github.com/FeralInteractive/gamemode
Wine:
Before we install Lutris we need to make sure that we have wine installed, else we will install it. It is actually not needed for Quake Champios to run since it will use proton that is included in steam, but since the recommendation from Lutris is to install wine, we will do that as well just to be sure. And wine is always good to have laying around.
Check your version to see if it is installed or not(if you get a version response, then go to install Lutris, else continue to install wine):
$ wine --version
For ubuntu there is different sources for each version, pick the command for the one you use.
Ubuntu 20.04:
$ sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ focal main'
Ubuntu 19.10:
$ sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ eoan main'
Ubuntu 18.04:
$ sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main'
For stable version:
$ sudo apt-get update
$ sudo apt install --install-recommends winehq-stable
For staging version:
$ sudo apt-get update
$ sudo apt install --install-recommends winehq-staging
For Arch based systems just use this:
For stable version:
$ sudo pacman -S wine
For staging version:
$ sudo pacman -S wine-staging
For more information about Wine, visit: https://wiki.winehq.org/Main_Page
Lutris:
Lutris is an Open Source gaming platform for Linux. It installs and launches games so you can start playing without the hassle of setting up your games. Lutris uses community contributed installation scripts to provide an optimal experience and setup.
https://lutris.net/
So lets install Lutris now. On Ubuntu based systems:
$ sudo add-apt-repository ppa:lutris-team/lutris
$ sudo apt-get update
$ sudo apt-get install lutris
(For Pop!_OS Lutris is available through Pop!_Shop.)
On Arch based systems:
$ sudo pacman -S lutris
For more information about Lutris visit: https://lutris.net/
Quake Champions:
Okay, Lets start with the fun part! Installing Quake Champions. If you have lutris installed from the beginning, this is actually the only step you need to make to get Quake Champions installed.
Go to https://lutris.net/games/quake-champions/ and click Install (Steam Proton version) and the game will automatically install everything for you. You will just have to sign in to Steam during this process.
Before running Quake Champions for the first time:
Now when you finally have downloaded the game and want to play, I recommend you start with a few settings to make sure it run as good as possible. You could probably get an awesome experience already and just bang it out as it is! But I recommend you do these following steps first.
First of all you should enable Vulkan shader cache in Steam for Quake Champions. In Lutris, run steam from the left sidebar by clicking Steam and then the “play” symbol.
Inside steam go to Settings > Shader Pre-Caching and check both of the boxes.
While you are in there, go to Steam Play and check the box “Enable Steam Play for all titles”. You can also chose to use a specific proton version here if you want, or if you have installed another version yourself, you can chose it there. I am using Proton-5.9-GE-2-MF
Proton-GE (on Arch based systems):
Install yay (A Pacman wrapper and AUR helper written in go that I use most of the time instead of pacman actually)
$ sudo pacman -S yay
$ yay proton-ge-custom-stable-bin
Now you should be able to play the game either from Steam or go into Lutris, press Quake Champions and then Play!
BUT if you are going to start the game directly from Steam, I am not sure it will start with gamemode on, so you should add that to launcher options by right klick on Quake Champions inside steam, and then go to Properties. Press “SET LAUNCH OPTIONS” and then type in
gamemoderun %command%
You can also turn off steam overlay if you want while you are in Properties. I’m not sure if this is necessary, but I have done that just to be sure that I have the best performance that I can get.
If you have a AMD GPU, you should add this:
RADV_PERFTEST=aco gamemoderun %command%
If you want some to see your FPS, Frame times or GPU load you can use DXVK_HUD:
DXVK_HUD=fps,frametimes,memory,gpu gamemoderun %command%
AMD:
DXVK_HUD=fps,frametimes,memory,gpu gamemoderun RADV_PERFTEST=aco %command%
If you are going to start the game from Lutris (Thats what I do myself) make sure gamemode is turned on in Lutris:
G-Sync:
To enable G-Sync i recommend you check here: https://cowboyprogrammer.org/2016/03/nvidia-gsync-on-linux/
It's also possible to do from a terminal:
$ nvidia-settings -a AllowGSYNC=1
And to turn it off:
$ nvidia-settings -a AllowGSYNC=0
Other available nvidia-settings options can be viewed with flag -L
Poor performance?
If you have stutters or lags the first couple of minutes on every map the first time you play, then that is normal for only the first time you play, since DXVK needs to cache all the shaders from the maps, and this is quite heavy. It is recommended that you have Vulkan shader cache activated in Steam Settings.
The first time you play Quake Champions, you should go into a custom game and try every map to see if it runs smooth and to let Vulkan cache all the shaders if it has to, so that you will have a smooth experience every time you play.
You should probably also try with Low Video Settings to begin with and then use DXVK_HUD (as described earlier) to see your GPU usage and GPU Memory usage while you test higher settings, to find out what is best for your system. I run everything on low except AA, thats on TAA. Even if I dont have to, I like performance over eye candy.
If you still have poor performance or soemthing feels really wrong and laggy, then you might have to turn off composite in your windows manager.
For example, if you use XFCE as your Desktop Environment (as I do), you will either have a super shitty experience, or the best one by turning off composite. I recommend using XFCE as your DE https://wiki.archlinux.org/index.php/Xfce or LXqt https://wiki.archlinux.org/index.php/LXQt (super lightweight and simple).
Here is how you turn off Compositing in XFCE:
For XFCE, go to Window Manager Tweaks under Settings
Then under the Compositor tab, make sure the compositor is disabled
Okay, that’s about it for now. That should give you a really nice experience finally playing Quake Champions on GNU/Linux. Yaaaay! <3
Edit:
I’m not using a AMD GPU myself, so I’m not to familiar with that, but I’ve seen people getting good results with these Launcher options:
PROTON_NO_ESYNC=1 DXVK_ASYNC=1 RADV_PERFTEST=aco gamemoderun %command%
Source: https://www.protondb.com/app/611500
Edit 2: 2020-07-01
So I have been having some troubles with small stuttering lags while playing. At first I figured it was because of all testing I’v done and i probably made a mistake somewhere, but then I realized it’s probably because of priority issues with Quake. So I tried a lot to change priority on Quake, because in htop it looked like Quake had multiple processes but gamemode only made one of them high priority. After hours of testing and priority changes with no better performance, I finally realized that it wasn’t Quake nor steam that had the priority issues, but the wineserver. So after finding right combination and changing the priority on wineserver, I finally got a smooth experience. So this is how I do it now.
After starting Quake Champions, open a terminal or tty and run this command:
$ sudo schedtool -v -F -p 20 -n 19 `pgrep wineserver`
If you dont have schedtool, you can install it with:
# Arch based:
$ sudo pacman -S schedtool
# Ubuntu based:
$ sudo apt-get install -y schedtool
There is also ways to automate this like using /etc/schedtoold.conf but I have not had the time to look more closely at that yet, but I will return when I’v looked at it a bit more. I just wanted to get this out there for now so that people at least can get a smooth experience.
There is probably a way to make it run with lutris as well. Because you can run scripts when starting a game with lutris, but I am not sure how it will work when the script requires root access, and if it will work when you launch the script before the program. Maybe you can do a sleep command, but then it might run the whole script before launching the game, so then you just get longer wait time and the game still launches with wineserver at the same old priority. Maybe if you merge the code with gamemode or create your own program you can make it work, but I haven’t had the time to look into all that yet. So if anyone has any idea on how to make it work easily in the best way possible, please let me know. I do think schedtoold.conf is the easiest way to automate it though. Time will tell!
Edit 3: 2020-07-05
It seams like borderless might work better then fullscreen. But I also noticed that switching between borderless and fullscreen and G-Sync on and off might make a big difference. As an example, if one start the game with fullscreen and G-Sync off, then switching to G-Sync on and borderless, can then give one a way smoother experience, and if one starts with borderless, then fullscreen can be the way to go. So toggling between borderless/fullscreen and G-Sync on/off can give a significant improvement. I need more testing to se what that’s all about.
Links:
Here is some links to some other interresting reading materials if you still want to tinker more or try different stuff for your system:
https://www.protondb.com/help/improving-performance
https://www.protondb.com/app/611500
https://github.com/lutris/docs/blob/master/HowToEsync.md
https://wiki.archlinux.org/index.php/Mouse_acceleration
https://github.com/doitsujin/dxvk/wiki/Driver-support
https://cowboyprogrammer.org/2016/03/nvidia-gsync-on-linux/