Asset Posted Saturday at 08:09 PM Posted Saturday at 08:09 PM Hi gents, I am a Linux enthusiast (no pro, though) and long time Windows opponent. IMO it actually got worse with every Windows version. As such I am quite pleased with the way gaming under Linux evolved in recent history thanks to all the effort Valve put into Proton. Unfortunately DCS was always one of the games that still caused trouble for me, esp as I only play it in VR. Once you tasted VR you cannot go back! So I invested some time to get it working under Linux in VR. There are some useful howtows out there, but none really was up to date or usable for my setup. This is why I'd like to share my knowledge on how I got DCS standalone no Steam with Lutris with VR to work. It was heavily helped by https://github.com/TheZoq2/dcs_on_linux/issues/26#issuecomment-1528227256 but needed some tweaks, as this post is 2 years old by now. My system: AMD 5600X AMD 6900XT Arch Linux HP Reverb G2 Software we will be using: Lutris Monado (OpenXR runtime) Proton GE 10-10 I will assume you know your way around your Linux system, like installing software with the package manager of your distro and also how to install packages from source (like the Arch AUR) if your distro does not provide everything out of the box. 1. Install Lutris 2. Get Proton GE For me Proton GE 10-10 worked well. Anything newer causes an error which I have not put any effort into investigating. It is a decently new version and zou can get it here https://github.com/GloriousEggroll/proton-ge-custom/releases/tag/GE-Proton10-10. The page has installation instructions. If you have steam installed you can install this Proton GE version for Steam and Lutris will find it as well. If you don't have Steam install it into your Lutris Wine runners directory, which should be /home/<username>/.local/share/lutris/runners/wine. Alternatively you can use a tool like protonup-qt to manage your Proton (GE) and Wine installations. 3. Select Runner A Runner in Lutris lingo is what runtime should run your game/app. We set it to the freshly installed Proton GE 10-10 by clicking the round play button right of "Wine" on the left panel. Then we selct "GE Proton 10-10" as the Wine version and save on the top right. 4. Install DCS Get the standalone installer from the ED homepage. Open Lutris, select "Games" and on the top right click the hamburger menu > ADD Games. Select "Install a Windows Game from an executable". Name it "DCS" > Install > Select "Wine Setup file" > Install > choose and installation location > Continue > Select the DCS Installer .exe by clicking "..." > Install. 5. Go to sleep and let DCS download and install its massive amount of data At least at my place it takes a while to download everything 6. Configure Proton/Lutris We need to make some changes to variables and stuff to be able to run DCS. Right click on your freshly installed DCS in Lutris > Configure. 6.1 Game Options Under the game options tab change the "Executable" to the path to the dcs.exe in your installation directory. It should be at <installation dir>/drive_c/DCS World/bin-mt/DCS.exe if you want to use the multithreading version of DCS. As "Arguments" put "--no-launcher --force_enable_VR --force_OpenXR" As "Working Directory" put "<installation dir>/drive_c/DCS World". Not sure if this is really required but for sure it is cleaner. 6.2 Runner Options In the Runner Options tab add a new "DLL override" with name "wbemprox" and value "n". Select "Output logging info" as "Inherit from environment". 6.3 System options Add a few "Environment variables", "PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES" with value "1", "PRESSURE_VESSEL_LOG_INFO" with value "1", "WINEDEBUG" with value "+openxr,+loaddll,+debugstr", "XR_LOADER_DEBUG" with value "all". Only the first one is important to get DCS to work in VR, but the others help to find the cause in case you have an issue. You can remove those once everything is running satisfactorily. 7. Add stuff to Proton We need to install some other versions of libraries Proton is using and other stuff. Select DCS in Lutris, then click on the up arrow next to the wine glass at the bottom > Winetricks. A window will pop-up. Select "Select the default wine prefix" > OK > "Install a Windows DLL or component" > OK. Select "d3dcompiler_47" and "xact" > OK. Once done go back and this time select "Install a font" > "corefonts" > OK. Once done > Cancel until the window closes. Then go again to the up arrow next to the wine glass > Wine regisrty. You will most likely need to create a folder named "VR" under "HKEY_CURRENT_USER/Software/Wine". In this VR folder right click > add > DWORD. give it the name "state" with value "1". Add two other DWORDS with names "openxr_vulkan_device_vid" and "openxr_vulkan_device_pid" and two strings with names "openxr_vulkan_device_extensions" and "openxr_vulkan_instance_extensions". Don't worry about their values yet, we will set those at a later stage. 8. Try out DCS in 2D mode Select it in Lutris and press the "Play" button at the bottom. After a short while it should ask you for your credentials. As every system is different a lot of different issues can occur at this point. You can right click on DCS in Lutris > "show logs" to figure out what the issue might be, the debug settings we set earlier should help getting a good picture. You can ignore issues related to XR-LOADER and openxr in general at this point. This is the next item we will tackle. From here on onwards I assume your DCS is working in 2D. I would have suggested you relax with a round of Combined Arms, but sadly it is hopelessly neglected by ED 9. Get VR working I will not go into much detail about this as this is very much dependent on the distro and VR hardware you use. What you need to do is get the OpenXR runtime Monado working. Under Arch, the distro I am using, this is a semi easy task. It is not part of the official package repository so I could not simply install it. But it is available in the Arch User Repository (AUR). Also, Monado has a lot of dependencies which can all be installed either via AUR packages or the offcial pacman packages. There are some tools that make self compiling and installation from the AUR easier, like yay or paru. I did it all by hand via makepgk. Other distros offer Monado as part of their general package database, like Debian or Ubuntu. I any case, from here on onwards I assume you have VR working with Monado and can run the test app hello_xr. 10. Set registry data In 7. we added some registry entries, now we need to populate them. In my experience it did not matter what I put into openxr_vulkan_device_vid/pid. However I used the vendor and product id of my GPU, that seemed the most sensible choice and who knows what happens in the future. Maybe it is used in case you have more than one GPU (onboard vs dedicated), I don't know. In any case, start monado-service in a console and look for "INFO [vk_print_device_info] Device info:", it will say "vendor:" and "product:" a few lines below. These are the values I used for openxr_vulkan_device_vid/pid in the registry. Next run "hello_xr -v -g Vulkan2" in a terminal. You can close it right away, because we are only interested in its console output. You will find something that looks like this: LOG in xrCreateVulkanInstanceKHR: Creation of VkInstance: result: VK_SUCCESS vulkanInstance: 0x55aac8967360 extensions: VK_KHR_external_fence_capabilities VK_KHR_external_memory_capabilities VK_KHR_external_semaphore_capabilities VK_KHR_get_physical_device_properties2 VK_EXT_debug_utils This is a list of INSTANCE extensions. Write all the listed extensions, separated my a space, into the "openxr_vulkan_instance_extensions" key. Similarly, a bit further down, is the following output: LOG in xrGetVulkanGraphicsDeviceKHR: Creation of VkDevice: result: VK_SUCCESS vulkanDevice: 0x55aac8a11ee0 vulkanInstance: 0x55aac8967360 external_fence_fd: true external_semaphore_fd: true timelineSemaphore: true extensions: VK_KHR_dedicated_allocation VK_KHR_external_fence VK_KHR_external_memory VK_KHR_external_semaphore VK_KHR_get_memory_requirements2 VK_KHR_external_memory_fd VK_KHR_external_semaphore_fd VK_KHR_external_fence_fd VK_KHR_image_format_list VK_KHR_timeline_semaphore This is a list of DEVICE extensions. Do the same thing, add all listed extensions to the "openxr_vulkan_device_extensions" key. If my memory serves me correctly these should be all the steps needed to get DCS running. So, plugin your headset, start the monado-service and then click Play in Lutris with DCS selected. Useful tips: Changing some setting of Monado might make for a better experience. Adding EUROC_HMD=0 as an environment variable when launching monado-service helped make my headtracking stutter less. I also added WMR_HANDTRACKING=0 since I don't use any sort of handtracking when playing DCS. So my Monado command line looks like this, "EUROC_HMD=0 WMR_HANDTRACKING=0 monado-service". For a somewhat better performance you can grant higher priviledges to Monado by running sudo setcap 'cap_sys_nice=eip' $(which monado-service). This is required only once. In case you experience issues with running DCS in VR or not even staring, look at the lockfile Lutris provides by right-clicking on Lutris' DCS entry and then selecting "Show logs". A.1: Proton uses a sandbox to run programs, meaning it provides of mix of system libraries and its own libraries as an environment where programs run in that is detached from your real system. Knowing this is particularly important if Proton is complaining about missing libraries or files in general. This happened to me with libcjson.so. It is installed under /usr/lib, but Proton cannot find it because the sandbox, which is automatically provided by a runtime tool called "pressure-vessel", recreates its own "/usr" path with a predefined set of libraries. A somewhat clunky way around this is manually adding the missing library by copying it into the base folder pressure-vessel uses to build its /usr sandbox and adding it as well to its "directrory"-file named usr-mtree.txt.gz. It is located at /home/<username>/.local/share/umu/steamrt3/sniper_platform_3.0.20250929.168600/. So, first copy the missing file to the sandbox preparation folder, cp /usr/lib/libcjson.so.1.7.19 /home/<username>/.local/share/umu/steamrt3/sniper_platform_3.0.20250929.168600/files/lib/x86_64-linux-gnu/ then add the file itself and a link to a generic, non-versioned name to that file as well to the usr-mtree.txt.gz file, gunzip usr-mtree.txt.gz add the following lines: ./lib/x86_64-linux-gnu/libcjson.so.1.7.19 type=file ./lib/x86_64-linux-gnu/libcjson.so type=link link=libcjson.so.1.7.19 and the re-zip the file gzip usr-mtree.txt.gz With this method you can introduce a file that is missing in the sandbox. There might be better ways, but I was happy to at least figure this one out, as there maybe are some docs on this pressure-vessel sandbox, but I did not find any that really explained how to extend the file collection of the sandbox. You can add PRESSURE_VESSEL_SHELL=instead as an environment variable to DCS in Lutris in the System Options tab. This will open a terminal instead of DCS when you hit Play. In this terminal you can expolore the folders and files of the sandbox the game will run in. There you should also find libcjson.so under /usr/share/x86_64-linux-gnu. When in this terminal you can start DCS by typing "$@". IMPORTANT: The XR_RUNTIME_JSON environment variable can be used to configure which OpenXR runtime should be used. If this variable is not present the config active_runtime.json in /etc/xdg/openxr/1/ is used. In my experience setting XR_RUNTIME_JSON, in Lutris or otherwise, caused a problem with the very important "PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES" we set earlier, leading to pressure-vessel not poperly including the local files needed for VR into the sandbox. So, don't use XR_RUNTIME_JSON and make sure your /etc/xdg/openxr/1/active_runtime.json points to the correct runtime. It has been a while since I did all of this, so I hope I did not forget anything. An honest word on performance: It is not good. Single player should be doable, under Win10 I had 60fps, under Linux I have very inconsistent 45fps. Multiplayer however is impossible for me, I literally get 7 fps. I am not sure if this is a Monado, Vulkan, or Proton thing. I still decided to write this guide in the hopes you have more luck and also spread the word. Maybe someone smarter than me figures out a way to get more performance and to to further push the good cause of Linux gaming and Windows independence. Now is a good time to move to Linux and be the boss of your own PC again! Also got a new mechanical keyboard, so I enjoy a bit of typing atm Cheers! 2
ChariotOfFLAME Posted Sunday at 01:51 AM Posted Sunday at 01:51 AM @BIGNEWY can we get this pinned? Seems like a good thread for the growing Linux crowd pre-Vulkan release 1
LancerVI Posted Monday at 03:02 PM Posted Monday at 03:02 PM (edited) Better yet......can we get ED to start looking at Linux as a serious alternative/option to Windows. With Valve's help, linux gaming has taken a huge jump forward. Anything to get off Windows. Flight simming is the ONLY reason I have windows installed. Edited Monday at 03:16 PM by LancerVI
ChariotOfFLAME Posted Monday at 08:18 PM Posted Monday at 08:18 PM 5 hours ago, LancerVI said: Better yet......can we get ED to start looking at Linux as a serious alternative/option to Windows. Pretty sure once it runs on Vulkan, that should be a lot easier
MigratoryBird Posted Tuesday at 01:13 AM Posted Tuesday at 01:13 AM DCS in VR is the only reason I'm still running Windows on the flight simming rig. I'd love to switch that over to linux........ 1
sleighzy Posted Tuesday at 02:05 AM Posted Tuesday at 02:05 AM (edited) Not against Linux myself, however the steps to get this setup are gonna be beyond a lot of users. Until such time as DCS and other vendors provide their software for peripherals, VR runtimes, and any other supporting software all decide and support one Linux distro (or one common enough that it will work on multiple distros) then some of these points are moot. A lot of software vendors will not port their software to Linux. I'd certainly look at Linux, but right now all those other items are a complete blocker. This is not just a DCS issue. Edited Tuesday at 02:06 AM by sleighzy AMD 7800x3D, 4080Super, 64Gb DDR5 RAM, 4Tb NVMe M.2, Quest 2
Recommended Posts