Installation for Linux

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.

About OpenXR and Monado.

Software that supports VR by using the OpenXR API requires two software packages to work:

The OpenXR Loader provided by Khronos
An OpenXR runtime like Monado or SteamVR (with OpenXR support)

OpenXR runtimes like Monado can be though of as “VR headset and VR controller drivers” and the OpenXR loader, analog to the Vulkan loader, is responsible for finding and connecting applications to this “driver” so that OpenXR applications do not need to interact directly with a runtime. Applications link to only the libopenxr_loader.so or .dll library and use the C headers provided by the OpenXR SDK.

More general background information about OpenXR and OpenXR runtimes can be found at About Runtimes.

The initial focus of Monado lies on desktop VR usage. In the future a main goal will be to bring Monado to mobile and standalone AR devices, but desktop VR support will remain an important aspect for Monado for the foreseeable future.

Monado Requirements.

Monado currently runs on Linux. A windows port is in progress.

The Monado compositor requires a Vulkan driver with the instance extensions:

  • VK_KHR_external_fence_capabilities
  • VK_KHR_external_memory_capabilities
  • VK_KHR_external_semaphore_capabilities
  • VK_KHR_get_physical_device_properties2
  • VK_KHR_surface

For direct mode on Linux/X11

  • VK_KHR_display
  • VK_EXT_direct_mode_display
  • VK_EXT_acquire_xlib_display

Device extensions:

  • VK_KHR_dedicated_allocation
  • VK_KHR_external_fence
  • VK_KHR_external_fence_fd
  • VK_KHR_external_memory
  • VK_KHR_external_memory_fd
  • VK_KHR_external_semaphore
  • VK_KHR_external_semaphore_fd
  • VK_KHR_get_memory_requirements2
  • VK_KHR_swapchain

OpenXR applications using Vulkan are supported with all Vulkan drivers that support the listed extensions. In particular radv, intel anv and the nvidia proprietary driver are tested and confirmed to work.

OpenXR applications using OpenGL require an OpenGL driver with support for the GL_EXT_memory_object_fd OpenGL extension. OpenGL applications are supported with radeonsi and the nvidia proprietary driver. Intel does not currently support this extension in mainline mesa but there are WIP MRs for mesa/iris and for mesa/i965 that have been tested to work with Monado.

Running Monado with the amdvlk Vulkan driver generally works but may not render OpenXR applications using OpenGL correctly.

Distribution packages.

Debian through OBS.

# Download signing key - fingerprint E841 FAF3 32F5 9D73 9A7F 9D9E FBB1 3322 8F00 CDBA
wget -nv https://download.opensuse.org/repositories/home:rpavlik:monado/Debian-10/Release.key -O obs-monado.asc
# Add to apt
sudo mv obs-monado.asc /etc/apt/trusted.gpg.d/
# Add apt repo
echo 'deb http://download.opensuse.org/repositories/home:/rpavlik:/monado/Debian-10/ /' | sudo tee /etc/apt/sources.list.d/monado.list
# Update package lists
sudo apt update

CI builds for buster.

# Download CI signing key
sudo wget -nv https://people.collabora.com/~rpavlik/monado-ci-packages/monado-ci.asc -O /etc/apt/trusted.gpg.d/monado-ci.asc
# Add apt repo
echo 'deb https://monado.pages.freedesktop.org/monado/apt buster main' | sudo tee /etc/apt/sources.list.d/monado-ci.list
# Update package lists
sudo apt update

Ubuntu packages.

The core packages are

  • libopenxr-loader1
    • This is libopenxr_loader.so library. OpenXR applications link to this library and can not be compiled/run without it.
  • libopenxr-dev
    • The OpenXR headers are required to compile OpenXR C/C++ applications.
  • libopenxr1-monado
    • The Monado OpenXR runtime

Useful packages:

  • xr-hardware
    • udev rules allowing users without root permissions to use XR hardware, installation is highly recommended
  • libopenxr-utils
    • OpenXR applications and demos, including the hello_xr example openxr-layer-corevalidation
  • A validation layer for OpenXR. Can be enabled with the environment variable XR_ENABLE_API_LAYERS=XR_APILAYER_LUNARG_core_validation
  • openxr-layer-apidump
    • Another layer that can dump all OpenXR calls an application makes to a file
  • monado-cli, monado-gui
    • See Tools for a detailed description.