VR

From NixOS Wiki
Revision as of 08:57, 8 April 2024 by Scrumplex (talk | contribs) (Add warning about Proton failing to launch with OpenComposite)

Monado

Monado is an open source OpenXR runtime. It offers support for a variety of hardware using its built-in drivers and can be used to run any OpenXR and, with the help of OpenComposite, most OpenVR applications.

Monado can be configured using its NixOS options since 24.05:

/etc/nixos/configuration.nix
services.monado = {
  enable = true;
  defaultRuntime = true; # Register as default OpenXR runtime
};

In order to configure Monado, you might want to add additional environment variables:

/etc/nixos/configuration.nix
systemd.user.services.monado.environment = {
  STEAMVR_LH_ENABLE = "1";
  XRT_COMPOSITOR_COMPUTE = "1";
};

For further information about available environment variables and tweaks, read the Linux VR Adventures wiki and the Monado documentation about environment variables

OpenComposite

OpenComposite is a compatibility layer for running OpenVR applications on an OpenXR runtime like Monado. It is comparable to tools like DXVK or vkd3d, but for translating OpenVR calls to OpenXR.

In order to run OpenVR games on anything other than SteamVR, you need to configure the OpenVR runtime path defined in ~/.config/openvr/openvrpaths.vrpath. A reliable way to do this is to use Home Manager to create this file.

If this file is not set to read-only, SteamVR will add its runtime path back, hence the use for Home Manager.

Warning: Proton will always query the current OpenVR runtime. If you use OpenComposite, and it fails to initialize an OpenXR context, Proton will fail to launch. A workaround is to delete the ~/.config/home-manager/home.nix file and then retry launching the game.

An example configuration for enabling OpenComposite may look like this:

~/.config/home-manager/home.nix
xdg.configFile."openvr/openvrpaths.vrpath".text = ''
  {
    "config" :
    [
      "${config.xdg.dataHome}/Steam/config"
    ],
    "external_drivers" : null,
    "jsonid" : "vrpathreg",
    "log" :
    [
      "${config.xdg.dataHome}/Steam/logs"
    ],
    "runtime" :
    [
      "${pkgs.opencomposite}/lib/opencomposite"
    ],
    "version" : 1
  }
'';

If you are planning to play any OpenVR game on Steam or OpenXR games through Proton, you will have to use OpenComposite in this manner. In most cases you also have to allow access to the socket path of your OpenXR runtime to Steam's runtime, by using the following launch options for XR applications on Steam: env PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/monado_comp_ipc %command%. This example is for Monado, while other XR runtimes might differ.

See also