data | ||
.dockerignore | ||
.gitignore | ||
DEBUGGING.md | ||
dnsmasq.conf | ||
docker-compose.yml | ||
Dockerfile | ||
launch | ||
LICENSE | ||
Makefile | ||
README.md | ||
resolv.dnsmasq |
Steam in Docker
Changes
Dec 22 2018:
- support Vulkan;
Dec 21 2018:
- got rid of 'wrong ELF class' messages in the logs;
- changed the base image
debian:jessie
toubuntu:bionic
; - significantly reduced the amount of dependencies as the image is now using the Steam runtime;
- added
SYS_PTRACE
cap so Proton (modified version of Wine created by Steam) can show additional process traces; - removed grsecurity support since they have stopped giving us the test patches;
- simplified the
LD_LIBRARY_PATH
routine in the launcher; - users can now control the
USER_ID
via the environment variable; - removed the old drivers support, let me know if you want it back;
Why?
- I want to set-up more fences when running the code I cannot always trust nor verify; issue 3671
- I do not want to be spending time figuring out how to install Steam (what deps) in a non-Debian (or non-SteamOS) based distro;
- I like cleanliness: I can erase Steam and all its dependencies in a matter of seconds by just removing this image;
- I can have Steam on my Ubuntu/openSUSE/[put any other distro I will want to use] in a short time that Docker takes to download this image;
Suggestions / PR's are welcome!
What's tested?
Games:
- Counter-Strike 1.6
- Counter-Strike: Global Offensive
- Call of Duty 4: Modern Warfare
- Delta Force (NovaLogic)
OS:
- Linux: Ubuntu 18.04.1 LTS (64-bit)
HW:
- ASUS P8Z68-V PRO/GEN3
GPU:
- Intel HD Graphics 3000
- NVIDIA's GeForce GTX 1060
For running games on AMD Radeon please uncomment
/dev/kfd
device in the docker-compose.yml file.
Requirements
- Docker
- Docker Compose minimum version 1.7.3
Building and launching Steam
Launching Steam in Docker
git clone https://git.nixaid.com/arno/steam.git
cd steam
docker-compose build && docker-compose up
If Steam does not start, you may need to allow your user making connections to your X server:
xhost +SI:localuser:$(id -un)
Troubleshooting
You might want to modify the docker-compose.yml
in case of problems,
the file should be pretty self explanatory, although you may refer to the official Docker Compose file reference
Also keep in mind to uncomment or/and add your devices to the devices:
section there.
The best result is when you have a similar to the following output, using the glxgears
(part of mesa-utils
package):
If you are getting segmentation fault
error or Steam does not start, then you could try resetting its config:
docker-compose run --rm steam --reset
Vulkan / DXVK
DXVK is a Vulkan-based compatibility layer for DirectX 11.
It allows running 3D applications on Linux using Wine.
To fully leverage the DXVK, you need the following:
-
Vulkan library installed;
-
Capable GPU that supports Vulkan;
-
Latest GPU drivers which support Vulkan;
-
Wine 3.10+ with the DXVK (Steam's Proton already has DXVK installed);
-
The game that supports DirectX 11;
$ cat /home/user/.local/share/Steam/steamapps/common/Proton\ 3.16/dist/lib64/wine/dxvk/version
60a03a29599bf1f8c73efdbcf288e91ef261bc58 dxvk (v0.90-10-g60a03a2)
Test Vulkan
$ docker-compose run --rm --entrypoint bash steam
root@steam:/# id user >/dev/null 2>&1
root@steam:/# [ $? -eq 0 ] || useradd -s /bin/bash -d /home/user -u ${USER_ID:-1000} user
root@steam:/# su -l user
user@steam:~$ LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/hostlibs/32:/hostlibs/64:"
user@steam:~$ LD_LIBRARY_PATH=${LD_LIBRARY_PATH} vulkaninfo | more
user@steam:~$ LD_LIBRARY_PATH=${LD_LIBRARY_PATH} vulkan-smoketest
Test DXVK
First, you need DirectX 10/11 game.
$ docker-compose exec steam
$ echo 'user_settings = { "DXVK_HUD": "devinfo,fps", }' > .local/share/Steam/steamapps/common/Proton\ 3.16/user_settings.py
After that, launch your game and you should be able to see DXVK HUD in the left upper corner of the screen.
Links
Below is just a bunch of links, someone might find them useful.