XR Devices#
Support Table#
A non-comprehensive table of various VR/XR devices and the drivers that support them.
Devices are generally ranked under the following medals on their compatibility with Linux. This ranking system is adapted from ProtonDB’s ranking, and is defined as follows:
| Platinum | Perfect out of the box. |
| Gold | Perfect after tweaking. |
| Silver | Usable after tweaks. |
| Bronze | Barely usable, even after tweaks. |
| Borked | Broken/Unusable, no matter what. |
| Unknown | Uncategorized, feel free to contribute! |
PCVR#
⚠️ WarningSteamVR is not recommended for any devices, due to general unreliability.
ℹ️ NoteWired headset experiences with Nvidia GPUs may be affected by the DRM lease presentation latency issue - see the Monado troubleshooting section. Results on SteamVR have been mixed.
| Device | Medal/Rating | Monado | SteamVR (not recommended) |
|---|---|---|---|
| Valve Index | Platinum* | ✅ | ✅ |
| HTC Vive/Pro/Pro Eye | Platinum | ✅ | ✅ |
| HTC Vive Pro 2 | Platinum* | ✅ (With kernel patches required for full resolution on AMD) | ✅ (custom driver and patches) |
| Bigscreen Beyond 1/2(e) | Gold | ✅ (refer to the BSB Kernel page) | ✅ (refer to the BSB Kernel page) |
| Sony PSVR 1 | Bronze | ? | ? |
| Sony PSVR 2 | Gold* | 🚧 Bronze Monado driver Gold Ignition driver |
✅ (Ignition SteamVR driver) |
| Oculus Rift CV1 | Silver | ✅ (OpenHMD plugin based support) | ✅ (OpenHMD SteamVR plugin) |
| Oculus Rift S | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| Pimax 4K | Gold | 🚧 (WIP, with kernel patches, Nvidia requires patching EDID) | ❌ (Planned) |
| Pimax 5K Plus/XR/Super | Gold | ✅ (WIP, with kernel patches, Nvidia requires patching EDID) | ❌ (Planned) |
| Pimax 8K | Gold | ✅ (WIP, with kernel patches, Nvidia requires patching EDID) | ❌ (Planned) |
| Pimax Vision 8K X | Gold | ✅ (WIP, with kernel patches) | ❌ (Planned) |
| Pimax Vision 8K PLUS | Gold | ✅ (WIP, with kernel patches, Nvidia requires patching EDID) | ❌ (Planned) |
| Pimax Crystal OG | Borked | ||
| Pimax Crystal Light | Borked | ||
| Pimax Crystal Super | Borked | ||
| Pimax Dream Air | Borked | ||
| Pimax Dream Air SE | Borked | ||
| HP Reverb G1 | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| HP Reverb G2 | Bronze | ✅ (experimental 6dof controllers, 60Hz-only on Nvidia) | ✅ (Monado SteamVR plugin, 60Hz-only on Nvidia) |
| Varjo VR-1/2/3 | Unknown | ? | ? |
| Varjo Aero | Borked | ||
| Lenovo Explorer | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| Dell Visor | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| HP WMR headset | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| Samsung Odyssey | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| Samsung Odyssey+ | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| Asus HC102 | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| Acer AH101 | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| Acer OJO 500 | Bronze | ✅ (experimental 6dof controllers) | ✅ (Monado SteamVR plugin) |
| Somnium VR1 | Borked | ||
| VRgineers XTAL | Borked | ||
| StarVR One | Borked | ||
| Arpara 5K | Borked |
Standalone#
Generally, all standalone headsets are considered to be Platinum .
⚠️ WarningALVR is not recommended for use due to the project’s lack of focus on Linux support, which has lead to it becoming effectively deprecated. ALVR on Linux does not work with SteamVR versions 2.16.7 or later.
It is highly recommended to use WiVRn or Steam Link instead.
| Device | WiVRn | Steam Link | ALVR (not recommended) |
|---|---|---|---|
| Quest | ✅ | ❌ | ✅ |
| Quest 2 | ✅ | ✅ | ✅ |
| Quest Pro | ✅ | ✅ | ✅ |
| Quest 3/3s | ✅ | ✅ | ✅ |
| Pico Neo 3 | ✅ | ✅ | ✅ |
| Pico 4/4 Ultra | ✅ | ✅ | ✅ |
| HTC Vive Focus 3 | ✅ | ❌ | ✅ |
| HTC Vive Focus Vision | ✅ | ✅ | ✅ |
| HTC Vive XR Elite | ✅ | ✅ | ✅ |
| Lynx R1 | ✅ | ❌ | ✅ |
| Apple Vision Pro | ❌ | ❌ | ✅ |
Headset Notes#
Vive Pro quirks#
- The Vive Pro microphone’s sample rate should be set at 44.1khz, as feeding in 48khz raises the pitch of the audio.
- The Vive Pro creates an HDMI Output Source after startup of SteamVR/Monado. Use it instead of the Vive Pro USB Audio Source, since the audio might appear distorted.
Vive Pro 2 quirks#
- On Monado, the Vive Pro 2 defaults to a lower resolution (3680x1836@90hz). Please see the Vive Pro 2 documentation on how to change this. Kernel patches may be required.
Valve Index quirks#
- The Valve Index uses your GPU’s DisplayPort for audio output. If you are unable to hear audio after switching to the GPU output, try changing the output port in an application like pavucontrol.
- The Valve Index audio output sample rate should be set to 48khz, or else no audio will be output.
- The Valve Index may be put in a bad state the first time it is connected to the system, or when plugged in before the system boots up, causing symptoms such as DRM lease failing. You should try replugging the power connector to reset the HMD.
Other HMD hardware notes#
- Vive Pro Eye: HMD functional, eye tracking functionality with ReVision
- Pimax: Initialization code WIP. Distortion matrix dump work in progress.
- Bigscreen Beyond 2e: To use eyetracking on your headset, please follow the guide in the Bigscreen Beyond eyetracking page.
- Sony Playstation VR2: HMD is functional with minor jitter on lateral movements. A guide on how to set it up for use with the Ignition driver, the Monado driver, Eye tracking and for headsets on Pre-PC firmware (V5.00) is in the PSVR2 page.
- Oculus Rift CV1: Controllers jitter heavily (and HMD to a lesser extent) if using more than one sensor camera.
- Eyetrack VR and Project Babble will both be implemented through oscavmgr to emit proper unified flexes over OSC.
- Tracking technologies can be mixed Monado/WiVRn by using motoc.
Trackers#
See the trackers page for information on face, eye, and full-body trackers.
Troubleshooting#
Desktop hangs on start of SteamVR or Monado#
ℹ️ NoteOnly applies to kernel versions before linux-6.19!
Symptoms:
- When starting the SteamVR or Monado for the first time after a reboot, the desktop freezes and after 15 seconds the SteamVR window is open but the Headset does not show a picture.
- Restarting SteamVR solves this.
- Unplugging the headset and plugging it back in solves this.
dmesg | grep amdgpuprints a line containingERROR dc_stream_state is NULL for crtc '1'!(or some other number).
This is an issue with the RADV driver, and is fixed in linux-6.19. A kernel patch (for versions 6.18 and below) is available on this GitLab issue. See the section on how to apply a kernel patch.
Applying a kernel patch (for Vive Pro 2, Bigscreen Beyond, Pimax)#
Jump to your distro: Arch / Fedora / NixOS / Gentoo
If your distro is not listed here, please refer to your distro’s official documentation on applying kernel patches.
Arch#
ℹ️ NoteTo speed up compilation, it is highly recommended to compile with all available cores. Specify
MAKEFLAGSwherever shown. This tells makepkg to utilize all cores.makepkg defaults to use a single core, which can take a long time. See makepkg - ArchWiki to learn how to set this option by default.
Bigscreen Beyond#
You can install the latest kernel pre-configured with patches for the Beyond with the linux-bsbAUR package.
First install yay (or another AUR helper like paru), then install linux-bsbAUR:
MAKEFLAGS="--jobs=$(nproc)" yay -S linux-bsbYour boot loader needs to know about this new kernel in order to boot it. Your next steps depend on which boot loader you are using.
- EndeavourOS users - generates a boot entry automatically thanks to the reinstall-kernels concept; no action needed.
- GRUB - generates a boot entry automatically; no action needed.
- systemd-boot - read this ArchWiki article.
- In short, you should create a loader entry for linux-bsb in e.g.
/boot/loader/entries/. You can duplicate one of the .conf files in there and make some edits:- Replace
/vmlinuz-linuxwith/vmlinuz-linux-bsb - Replace
/initramfs-linux.imgwith/initramfs-linux-bsb.img - Edit the title to your liking
- Replace
- In short, you should create a loader entry for linux-bsb in e.g.
- If you are not sure which boot loader you are using:
- Run
bootctl status. If “Current Boot Loader” reads “Product: systemd-boot” followed by a version number, you are using systemd-boot. - Your ESP (which can be mounted at
/bootor/efi) should contain references to “grub” or “systemd-boot”.
- Run
When you reboot, select the option labeled linux-bsb in the menu.
The output of the command uname -r should mention “bsb”. Consider making linux-bsb your default boot entry, so you don’t mistakenly/automatically boot into the unpatched kernel.
Manual kernel build#
This section explains how to manually build the kernel with patches on Arch Linux.
Download the patch file(s), then follow the steps on Kernel/Arch build system - ArchWiki. Each section in this article roughly corresponds the steps printed below.
-
(Section 1 of the above link)
mkdir ~/build/ cd ~/build/ sudo pacman -S --needed devtools base-devel pacman-contrib pkgctl repo clone --protocol=https linux cd linux -
(Section 2 of the above link) Open the PKGBUILD in that directory and modify the
pkgbaseline (at the top) to read e.g. “pkgbase=linux-customvr”. Then add a line containing your patch file(s) to the sources array:source=( https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/${_srcname}.tar.{xz,sign} <patchfilename>.patch $url/releases/download/$_srctag/linux-$_srctag.patch.zst{,.sig} config # the main kernel config file )Close the PKGBUILD, then run:
updpkgsums -
(Sections 3 and 4 of the above link) Run this to build and install the kernel package.
MAKEFLAGS="--jobs=$(nproc)" makepkg -sir --skippgpcheck -
Follow section 5 to tell your boot loader about the custom kernel, and restart. Make sure you select the custom kernel in the boot menu if prompted. Consider setting it as your default boot loader entry.
Fedora#
-
Prepare the kernel
git clone https://src.fedoraproject.org/rpms/kernel.git cd kernel # replace 41 with your fedora version git switch f41 # install the build dependencies for the kernel, if you haven't already sudo dnf builddep kernel.spec # name this the 'bsb' build sed -i 's/# define buildid .*/%define buildid .bsb/g' kernel.spec -
Add patch files to the root of the cloned folder, find these blocks in the
kernel.specand add the commented patches:## Patches needed for building this package %if !%{nopatches} Patch1: patch-%{patchversion}-redhat.patch # Add your custom patches below: #Patch2: your-first-patch.patch #Patch3: your-second-patch.patch %endif%{log_msg "Start of patch applications"} %if !%{nopatches} ApplyOptionalPatch patch-%{patchversion}-redhat.patch # Add your custom patches below: #ApplyOptionalPatch your-first-patch.patch #ApplyOptionalPatch your-second-patch.patch %endif -
Build RPMs:
fedpkg local -
Install kernel:
sudo dnf install --nogpgcheck ./x86_64/kernel-${version}.rpm -
Reboot and check that using
uname -athat thebsbkernel is running.
Official guide: Building a Kernel from the Fedora dist-git
NixOS#
-
Download the patch(es)
-
Add this to your
configuration.nixor other nix file you use:boot.kernelPatches = [ { name = "type what the patch is for here"; patch = /path/to/patch/file.patch; } ];
Gentoo#
While manually patching your /usr/src/linux directory and performing a normal kernel build and install will work, you can use the /etc/portage/patches system with a source kernel package for a more robust solution that will survive version upgrades.
These instructions use gentoo-sources, replace that with gentoo-kernel or whatever kernel sources you are using in the directory names and emerge commands.
⚠️ WarningThese instructions will not work with
gentoo-kernel-binbecause it has no local source to patch.
- Download the patch(es)
- Create the directory
/etc/portage/patches/sys-kernel/gentoo-sources/and copy the patches there.- If desired, you can limit to a specific version by appending the version number to the directory, e.g.
/gentoo-sources-6.18.18/.
- If desired, you can limit to a specific version by appending the version number to the directory, e.g.
- Run
sudo emerge -a gentoo-sources, which will overwrite the existing sources with the patched source. - Perform your normal kernel build and install, if any.
- For
gentoo-kernel, this will have been done by the previous step.
- For