Monado #
![]()
Monado is an open source XR runtime delivering immersive experiences such as VR and AR on mobile, PC/desktop, and other devices. Monado aims to be a complete and conformant implementation of the OpenXR API made by Khronos. The project is currently being developed for GNU/Linux and aims to support other operating systems such as Windows in the near future.
Essentially, Monado is an open source implementation of the OpenXR API, which can be used as an alternative to SteamVR when combined with the right tools.
Monado can offer a better overall experience (if with less features) compared to SteamVR, however has reduced game compatibility. Please bring up feature requests or report issues you come across in our server!
Monado is made for PCVR headsets. If you have a standalone headset, check out WiVRn.
Envision #
Envision provides a fairly low-barrier setup and development of both Monado and xrizer/OpenComposite on most any modern distro.
Reprojection #
By default Monado will use the compute compositor to make the GPU schedule the reprojection shader before other rendering tasks, however on AMD this requires the monado-service process to have the CAP_SYS_NICE capability. Envision and the AUR package take care of setting this automatically, otherwise you may have to manually set the capability for reprojection to work reliably:
Manual build #
Run sudo setcap CAP_SYS_NICE=eip path/to/monado-service.
NixOS #
Set services.monado.highPriority = true; in your config.
Base-station (Lighthouse) tracked headsets #
In order to use the SteamVR lighthouse driver in Monado, you just need to set the environment variable STEAMVR_LH_ENABLE=true.
You should run SteamVR Room Setup first to make sure your floor height is set correctly - see our section about Room Setup.
You may want to disable SteamVR automatically starting whenever you turn on your controllers, since it will interfere with trying to use them with Monado:
-
Launch SteamVR at least once, to create the
<steam install directory>/config/steamvr.vrsettingsfile<steam install directory>is probably$HOME/.steam/steamor$HOME/.local/share/Steam, remember this for the next command
-
Run the following command in a terminal (make sure you have
jqinstalled):STEAMHOME="<steam install directory>"; jq '.power.autoLaunchSteamVROnButtonPress = false' $STEAMHOME/config/steamvr.vrsettings > /tmp/steamvr.vrsettings && mv /tmp/steamvr.vrsettings $STEAMHOME/config/steamvr.vrsettings -
Launch SteamVR again to apply the config.
Steam and OpenVR apps #
You must set the launch option PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 %command% on Steam games, since the Steam Linux Runtime (pressure-vessel) does not expose OpenXR in the container by default.
For Windows apps running under Proton, you must be using Proton 9 or newer. xrizer or OpenComposite are required for them to connect to Monado, since Proton checks if OpenVR is available before exposing OpenXR.
You must also setup xrizer/OpenComposite when running apps that use the OpenVR API (like VRChat, Resonite, Google Earth VR, etc.), since Monado only implements OpenXR.
Troubleshooting #
“Some of my devices aren’t showing up in game!” #
You must turn on all your devices before starting Monado, since Monado currently does not support hotplug, however this is currently being worked on.
If your full-body trackers still aren’t showing up, take note that upstream xrizer does not currently support full-body tracking. See the section on the xrizer page.
“Perspective of some visual effects (bloom, mirrors/reflections) look off or different in one of my eyes” #
This happens because some games expect both eyes/views to be parallel, but some HMDs (e.g. Valve Index, Pimax headsets) have canted displays.
Setting the OXR_PARALLEL_VIEWS=1 environment variable returns parallel view poses to the application to avoid this issue, but may reduce the field of view. For Steam games, set the launch command to OXR_PARALLEL_VIEWS=1 %command%.
[NVIDIA-specific] “NVIDIA: No allowlisted displays found!” #
This may be caused by a few different issues:
- NVIDIA driver misnaming the display: If you see a display simply named “NVIDIA” in the output, the NVIDIA driver may be using a fallback name.
This can be worked around by setting the environment variable
XRT_COMPOSITOR_FORCE_NVIDIA_DISPLAY=NVIDIAin your Envision profile or otherwise passed to Monado. - HMD display completely missing from the list: Try unplugging and replugging the power adapter.
[NVIDIA-specific] “I’m getting screen tearing inside of my wired VR headset!” #
This is caused by having a monitor with VRR enabled, while using a Nvidia GPU. Turning it off in KDE Plasma’s display settings will not fix it. You need to add the kernel parameter nvidia-modeset.conceal_vrr_caps=1 to your boot loader.
ArchWiki has a guide on how to add kernel parameters in general, but here’s an example if you boot with GRUB.
- Open your terminal and type
sudo nano /etc/default/grub - Add
nvidia-modeset.conceal_vrr_caps=1inside the parameters ofGRUB_CMDLINE_LINUX_DEFAULT= - Close nano after saving the changes to the text file
- Update your grub config by typing
sudo grub-mkconfig -o /boot/grub/grub.cfg - Restart your PC
[NVIDIA-specific] “vkAcquireXlibDisplayEXT: VK_ERROR_UNKNOWN (0x000058b7a0764a80)” #
Try unplugging and replugging the power adapter. If the issue still occurs and you are on a Wayland session, try setting the environment variable XRT_COMPOSITOR_FORCE_WAYLAND_DIRECT=1.