Gaia Sky VR on Linux

Some tips as to how to best run Gaia Sky VR on Linux.

Running VR on Linux is notoriously “experimental,” especially when mixing NVIDIA hardware with Wayland-native compositors like Hyprland. SteamVR is making strides every release, and the hopes are high that before the release of the Steam Frame, VR on Linux will be on par with Windows. However, it is still not there. Gaia Sky VR on Linux with SteamVR works well, but it has sync problems that produce stutters at times. Nowadays, the better experience (according to our tests) is provided by the awesome open-source project Monado. In our experience, this runtime presents no sync issues or stutters, and offers an excellent experience if you can make it work. Of course, your mileage may vary. In this post, I detail how to run Gaia Sky VR on Linux with Monado.

Our setup has a couple of particularities that may make it especially problematic:

  • Hyprland/Wayland as desktop environment and compositor. Hyprland implements DRM leasing, which is needed for VR on Linux. For instance, KDE also implements it, but Gnome does not.
  • NVIDIA GTX 1070 (Pascal). NVIDIA dropped support for Pascal and earlier GPUs in their recentest driver updated. These old architectures do not match very well with modern drivers, so performance on Linux is not as good as it could be.
  • Valve Index as HMD. In principle, this is a solid choice for Linux.
  • Arch Linux. The distro is not very important, probably, but I will provide the commands for Arch.

Prerequisites

  1. Monado Service: The open-source OpenXR runtime. Install it from the AUR with paru -S monado.
  2. libsurvive: For lighthouse and headset tracking. Will be pulled with monado.
  3. xr-hardware: Ensure your udev rules are installed. Should also be pulled with monado, but if it is not, use paru -S xr-hardware to also install it from the AUR.

Instructions

On NVIDIA hardware, Monado may attempt to use an X11-based “Direct Mode” that crashes on Wayland with a vkAcquireXlibDisplayEXT error. To fix this, you must force Monado to use the Wayland DRM Lease protocol via environment variables.

I have prepared a justfile to handle these environment variables correctly. This setup bypasses the crashing NVIDIA backend and fixes the “washed out” color issues common on Pascal (10-series) cards by forcing the usage of SRGB.

monado-clean:
	-killall -9 monado-service vrcompositor vrmonitor survive-cli
	-rm -f /run/user/1000/monado_comp_ipc

monado: monado-clean
	env XRT_COMPOSITOR_FORCE_NVIDIA=0 \
	   XRT_COMPOSITOR_FORCE_WAYLAND_DIRECT=1 \
	   XRT_COMPOSITOR_FORCE_SRGB=1 \
	   SURVIVE_GLOBALSCENESOLVER=0 \
	   monado-service

monado-debug: monado-clean
	env XRT_COMPOSITOR_FORCE_NVIDIA=0 \
	   XRT_COMPOSITOR_FORCE_XCB=0 \
	   XRT_COMPOSITOR_FORCE_WAYLAND_DIRECT=1 \
	   XRT_COMPOSITOR_FORCE_SRGB=1 \
	   XRT_VULKAN_FORMAT=VK_FORMAT_B8G8R8A8_SRGB \
	   XRT_COMPOSITOR_GAMMA=0.45 \
	   SURVIVE_GLOBALSCENESOLVER=0 \
	   monado-service

You can run the monado service with just monado. Use just monado-debug in case something does not work and you need to be more explicit with the environment.

Scan the logs and look for the following:

  • Failure sign: INFO [...] Selected NVIDIA Direct-Mode backend! – If you see this, Gaia Sky VR won’t start.
  • Success sign: INFO [comp_window_direct_wayland_init] Using wp_drm_lease_device_v1 – If you see this, you are good to run Gaia Sky VR.

Leave the service running, and then open a new terminal and run Gaia Sky with:

XR_RUNTIME_JSON=/usr/share/openxr/1/openxr_monado.json gaiasky -vr

If you are compiling yourself and running from source, do this:

XR_RUNTIME_JSON=/usr/share/openxr/1/openxr_monado.json gradlew core:run --args="-vr"

If everything went fine, you should be able to enjoy Gaia Sky VR with excellent performance on Linux. See the following video:

I got it fully working, and performance is stellar:

[image or embed]

— Gaia Sky (@gaiasky.bsky.social) January 30, 2026 at 2:55 PM

Back to news