Steam (license proprietary/closed source, but includes several open source packages) is the major game client and Valve will track while you are online and playing games. Steam is not supporting Wayland (bug) natively and it runs only through XWayland, probably due to the support of Ubuntu’s now abandoned Unity desktop and Mir display server, so far it is X11 only and there seems to be no activity to prepare it for Wayland.
Valve is investing a lot into GNU/Linux as a gaming platform and helpso the free and open source software community. Examples where Valve employs own open source developers and contributes too:
- RADV Vulkan
- ACO compiler to replace LLVM (for now RADV only)
- Mesa drivers for AMD GPU’s (RadeonSI)
- DXVK (+D9VK)
- Proton (Wine)
- ESync, FSync in development
Multilib is a precondition and should be enabled before you can install steam. In Antergos it was enabled by default, but if you need to activate it follow the following Arch Linux wiki https://wiki.archlinux.org/index.php/Multilib. More details about Steam on Arch Linux can be found here https://wiki.archlinux.org/index.php/Steam.
sudo pacman -Sy steam steam-native-runtime
The nice thing about Steam is that there are thousands of games available for GNU/Linux, which they call SteamOS, but this is just an adjusted Debian GNU/Linux distribution.
Steam client is running as a native application on GNU/Linux. Steam integrates a lot of libraries into its own binary package called Steam-Runtime. You have as well the option to use the system integrated packages via the Steam-Native application.
In general it would be great if Steam would enforce more 64 bit games!
- Enable Steam Beta
Steam Linux Runtime – Pressure Vessel
Pressure-Vessel (https://github.com/ValveSoftware/steam-runtime) is part of the Steam Linux Runtime which puts games inside a container like environement (not for security yet, but to make dependencies easier to manage). More details https://www.youtube-nocookie.com/embed/KrbWbBYAolo?rel=0.
Steam Linux Runtime is using as well Bubblewrap (license LGPLv2, https://github.com/containers/bubblewrap).
You can report Steam client bugs on Linux in the bug tracker on github (https://github.com/ValveSoftware/steam-for-linux).
- Wayland support missing (bug https://github.com/ValveSoftware/steam-for-linux/issues/4924)
- No 64 bit client, Steam is only 32 bit (bug, latest news https://phoronix.com/scan.php?page=news_item&px=Steam-64-bit-Client-Maybe-Soon, https://github.com/ValveSoftware/steam-for-linux/issues/3518)
- Streaming in XWayland doesn’t work (bug https://github.com/ValveSoftware/steam-for-linux/issues/6148).
- Steam doesn’t work in an IPv6 only network (bug https://github.com/ValveSoftware/steam-for-linux/issues/2912)
- Steam still requires Gtk2 packages, not fully replaced yet with Gtk3
Proton 5.0 (Steam Play)
Proton (license BSD, https://github.com/ValveSoftware/Proton/) allows you to play all Windows only games from now on in Steam Beta. It was developed by Valve with support from Codeweavers as an improved Wine version. A lot of so called Linux games have been ports only based on wrappers, meaning that the DirectX version of the game got mostly a proprietary translation layer to OpenGL or sometimes Vulkan. In this case these wrappers are now completly open source like DXVK. Milestones:
- Proton 5.0-7 updated DXVK 1.6.1 and D3DVK
- Proton 5.0-6 & Proton 5.0-5 several fixes
- Proton 5.0-4 provides DXVK 1.5.5 and Denuvo DRM fixes
- Proton 5.0-1 enabled D3D9 to Vulkan by default with DXVK 1.5.4, FAudio 20.02
- Proton 4.11-12 provides DXVK 1.5 which includes now D3D9 support (D9VK has been merged back into DXVK), but you still have to set the parameter PROTON_USE_D9VK=1 manually
- Proton 4.11-8 added DXVK 1.4.4, D9VK 0.30, FAudia 19.11 and for the first time VKD3D to translate D3D12 to Vulkan
- Proton 4.11 added for the first time D9VK 0.13f, DXVK 1.3.1, FAudio 19.07 and futex based synchronization FSync.
- Proton 4.2 added DXVK 1.0.1 and FAudio 19.03-13.
- Proton 3.16-5 added FAudio support to fix several long standing audio issues of Wine.
Besides Proton the ESync project (license LGPLv2.1, https://github.com/zfigura/wine/blob/esync/README.esync) provides eventfd-based in-process synchronization primitives. In July 2019 Valve added a new FSync to even further improve synchronization, but this is not yet merged to Linux kernel and glibc.
Proton provides a Windows runtime. The following scenarios are possible:
- Vulkan: Proton forwards API calls to native Vulkan on Linux
- OpenGL: Proton forwards API calls to native OpenGL on Linux. This might be translated in the future to Vulkan with the help of Zink.
- D3D9/10/11: Proton translates with DXVK from Direct 3D 9/10/11 to Vulkan
- D3D1-8+DirectDraw 1-7: Proton translates with WineD3D from Direct 3D 1 to 8 and smaller to OpenGL. With the help of DXWrapper Direct 3D 8 and Direct Draw 1-7 can be translated to Direct 3D 9 and then to Vulkan via DXVK. If you want to translate Direct 3D 1-7 to Vulkan, then there is only the proprietary DGVoodoo2. See Vulkan’ize Graphic API’s
- D3D12: Direct 3D 12 is translated by VKD3D to Vulkan
A compatibility list of games that work via Steam Play in Proton can be found here: https://www.protondb.com
Proton launch parameters (if some game don’t work):
- PROTON_USE_WINED3D=1 %command%
- PROTON_NO_D3D11=1 %command%
- PROTON_NO_D3D10=1 %command%
- PROTON_USE_D9VK=1 %command% (only available before Proton 5.0)
- PROTON_NO_ESYNC=1 %command%
- PROTON_OLD_GL_STRING=1 %command%
- PROTON_FORCE_LARGE_ADDRESS_AWARE=1 %command%
- PROTON_NO_FSYNC=0 %command% (If Proton 4.11 finds a Linux kernel with fsync (not yet upstreamed), it will be used by default)
- PROTON_LOG=1 %command%
General launch parameter for testing with Gamemode installed and Mesa 19.1 or greater
GALLIUM_HUD=simple,cpu,GPU-load,temperature,fps strangle gamemoderun ENABLE_VKBASALT=1 %command%
Install Games with Linux support in Proton
Since the Steam beta release on 2019-01-18 Valve allows per Game to install the game with Proton. If the Linux version doesn’t work, performs worse as of OpenGL or just for comparison, you can switch now with one click. This allows now all DX9/10/11 games to run on Vulkan via DXVK/D9VK.
Steam on Wine
Since Proton (Wine) is integrated to Steam there is no need anymore to run a Steam Client inside of Wine. But it would still work just fine. It is only bad for statistics if you use Wine directly as it reports to Valve that it runs on a Windows platform and not Linux. Avoiding Steam on Wine is recommended!
Unofficial Steam Play Addons
Luxtorpeda (license GPLv2, https://github.com/dreamer/luxtorpeda) is a Steam Play (Proton) compatibility tool to run games with Linux native game engines (often community developed). Installation:
cd ~/.local/share/Steam/compatibilitytools.d/ || cd ~/.steam/root/compatibilitytools.d/ curl -L https://luxtorpeda.gitlab.io/luxtorpeda/master/luxtorpeda.tar.xz | tar xJf -
Game compatibility reports:
Luxtorpeda can download and install to the Steam game folder the Linux native game engine.
Boxtron (license GPLv2, https://github.com/dreamer/boxtron) is a Steam Play compatibility tool to run DOS games with a Linux native and updated DOSBox. Installation on Arch Linux:
sudo pacman -S dosbox inotify-tools timidity++ soundfont-fluid
cd ~/.local/share/Steam/compatibilitytools.d/ || cd ~/.steam/root/compatibilitytools.d/ curl -L https://github.com/dreamer/boxtron/releases/download/v0.5.3/boxtron.tar.xz | tar xJf -
Not yet working, waiting for next Steam Beta release.
And create Steam Play compatibility folder and a symlink:
mkdir ~/.local/share/Steam/compatibilitytools.d && ln -s /usr/share/steam/compatibilitytools.d/boxtron ~/.local/share/Steam/compatibilitytools.d/boxtron
Game compatibility reports:
If you need to edit the config read https://github.com/dreamer/boxtron/wiki/Configuration.
Roberta (license GPLv2, https://github.com/dreamer/roberta) is a Steam Play compatibility tool to run adventure games with a Linux native ScummVM. Installation on Arch Linux:
sudo pacman -S scummvm inotify-tools
cd ~/.local/share/Steam/compatibilitytools.d/ || cd ~/.steam/root/compatibilitytools.d/ curl -L https://github.com/dreamer/roberta/releases/download/v0.1.0/roberta.tar.xz | tar xJf -
Game compatibility reports:
The Steam Client offers as well now an option in the settings for scaling.
If you have multiple Steam accounts you can use Steam-Fast-Login to manage your accounts and to login with one click without typing a password (requires python-dbus on KDE).
yay steam-fast-login sudo pacman -Sy python-dbus
An easy way to share a Steam library across multiple machines, can be provided by SSHFS. Just mount the main library to another computer:
sshfs pc1:/home/USERNAME/.local/share/Steam/ /home/USERNAME/.local/share/Steam/
Steam has a distributed shader cache, which allows you to run games without expensively creating all the shaders first. This works if they have been stored already on Steam and in addition to the shader cache of Mesa.
Fossilize (license MIT, https://github.com/ValveSoftware/Fossilize) is a library and Vulkan layer for serializing and storing various persistent Vulkan objects, so that they can be used again.
For more details read https://wiki.archlinux.org/index.php/Steam/Game-specific_troubleshooting.
Recently I got the message “Error: You are missing the following 32-bit libraries, and Steam may not run: libc.so.6” and Steam couldn’t start anymore. Running from the terminal the command “steam –reset” fixed it.
DRM Content (digital restriction management)
Sadly Steam does hide if the games offered at Steam have any DRM protection against the users. There are 3 different kind:
- Steam DRM – Games require Steam to load first, without you can’t play
- Steam DRM + Game Studio DRM – Besides the Steam DRM to run the game it requires additional DRM tools to decrypt the game before running
- DRM free – best case scenario, you can run the games even without the need to Steam. The Steam client will only be responsible to download the games.
For more information I recommend to check on the following website for DRM free games: https://steam.fandom.com/wiki/List_of_DRM-free_games. A more critical view on DRM and user tracking can be found here https://voat.co/v/technology/2475543.
Goldberg Emulator (license LGPLv3+, https://gitlab.com/Mr_Goldberg/goldberg_emulator) is a “Steam emulator that emulates steam online features. Lets you play games that use the steam multiplayer apis on a LAN without steam or an internet connection.”
Steam offers to stream games to other machines. This is especially nice if you have e.g. in your living room a media server. If you run there the Steam client in the Big Picture mode, then you can use a game pad to easily navigate. Steam will detect other steam clients running on the same network automatically. With this your powerful gaming machine can stand in another room, just lunch Steam client there and you will be able to enjoy Steam games via streaming on your media center device.
The only issues I have are that at Steam will go back to KDE Plasma desktop once I quit a game that have been streamed to my media center (bug). Another one is, that I can’t run my machines on Plasma-Wayland as I usually do nowadays. Steam doesn’t support Wayland yet, but it should run at least OK through XWayland (bug).
The Steam controller can be used outside of Steam with the SC-Controller https://github.com/kozec/sc-controller.
The Steam Link device has been discontinued, but you can use now a Rasperry Pi 3 and install the steamlink app, read https://steamcommunity.com/app/353380/discussions/0/1743353164093954254/.
Steam Link Android
Valve provides as well the Steam Link app for Android. And it works well as well combined with the Steam Controller connected via Bluetooth.
Gamescope (license BSD 2-clause, previously named steamcompmgr, https://github.com/Plagman/gamescope) is a compositor based on Wayland that is getting frames via XWayland to reduce copies in the frame buffer. It can even run on top of a normal compositor like kwin.
Steam on Network File systems
Steam doesn’t work well on all tested network file systems. Steam’s pre-allocation / reservation of disk space is a real performance bottleneck.
Tested configurations with one HDD:
- NFS: btrfs file system mounted from the remote machine to the local one with NFS – in this config, NFS will slow extremly down after some time, main issue is download speed. The async option on the server in /etc/exports helps, but the issue is still there.
- GlusterFS: Download performance on the remote btrfs disks mounted to the local machine via gluster was great, but the job of Steam to pre-allocate / reserve disk space did take forever
- SSHFS: works most reliable, allocating space is almost as fast as a local drive