# 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`` to ``ubuntu: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](https://lwn.net/Articles/720983/) 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? 1. I want to set-up more fences when running the code I cannot always trust nor verify; [issue 3671](https://github.com/valvesoftware/steam-for-linux/issues/3671) 2. 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; 3. I like cleanliness: I can erase Steam and all its dependencies in a matter of seconds by just removing this image; 4. 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](https://www.docker.com/) - [Docker Compose](https://docs.docker.com/compose/) minimum version 1.7.3 # Building and launching Steam ## Launching Steam in Docker ```sh 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: ```sh xhost +SI:localuser:$(id -un) ``` You can use the following alias: > add this to your ``~/.bash_alias`` file ```sh function docker_helper_up() { command cd ~/git/$1 docker-compose up -d "$1" command cd ~- } function steam() { docker_helper_up "$FUNCNAME" } ``` ## 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](https://docs.docker.com/compose/compose-file/) 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: ```sh docker-compose run --rm steam --reset ``` ## Vulkan / DXVK DXVK is a Vulkan-based compatibility layer for Direct3D 11. It allows running 3D applications on Linux using Wine. To fully leverage the DXVK, you need the following: 1. Vulkan library installed; 2. Capable GPU that supports Vulkan; 3. Latest GPU drivers which support Vulkan; 4. Wine 3.10+ with the [DXVK](https://github.com/doitsujin/dxvk/) (Steam's Proton already has DXVK installed); 5. 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. - https://github.com/ValveSoftware/steam-for-linux/issues - https://github.com/ValveSoftware/Proton/issues - https://wiki.ubuntu.com/Valve - https://developer.valvesoftware.com/wiki/Steam_under_Linux#Ubuntu - http://media.steampowered.com/client/installer/steam.deb - http://repo.steampowered.com/steam/archive/precise/steam_latest.deb - http://repo.steamstatic.com/steam/ - https://developer.nvidia.com/vulkan-driver - https://en.wikipedia.org/wiki/Vulkan_(API)#Compatibility - https://github.com/lutris/lutris/wiki/How-to:-DXVK - https://github.com/doitsujin/dxvk/wiki/Driver-support - https://www.protondb.com - https://lutris.net