Steam + Proton DXVK

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)
  • FAudio
  • 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!

Settings

  • 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).

Bugs

You can report Steam client bugs on Linux in the bug tracker on github (https://github.com/ValveSoftware/steam-for-linux).

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:

  1. Vulkan: Proton forwards API calls to native Vulkan on Linux
  2. OpenGL: Proton forwards API calls to native OpenGL on Linux. This might be translated in the future to Vulkan with the help of Zink.
  3. D3D9/10/11: Proton translates with DXVK from Direct 3D 9/10/11 to Vulkan
  4. 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
  5. 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

VK_INSTANCE_LAYERS=VK_LAYER_MESA_overlay VK_LAYER_MESA_OVERLAY_CONFIG=position=top-right
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

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:

https://github.com/dreamer/luxtorpeda#supported-titles

Luxtorpeda can download and install to the Steam game folder the Linux native game engine.

Boxtron

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

Then:

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.

yay boxtron

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:

https://github.com/dreamer/boxtron/wiki/Compatibility-reports-(Steam)

If you need to edit the config read https://github.com/dreamer/boxtron/wiki/Configuration.

Roberta

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

Then:

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:

https://github.com/dreamer/roberta/wiki/Compatibility-Reports

Steam Client

Scaling

The Steam Client offers as well now an option in the settings for scaling.

Multiple Accounts

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 

Library Sharing

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/

Cache

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.

Steam Troubleshooting

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

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.”

Streaming

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).

Steam Controller

The Steam controller can be used outside of Steam with the SC-Controller https://github.com/kozec/sc-controller.

Steam Link

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

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.

Examples: https://steamcommunity.com/discussions/forum/1/2217311444340585891 and https://steamcommunity.com/groups/SteamClientBeta/discussions/1/1743353798892577212/

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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.