I've been working on getting my Oculus Rift CV1 to work properly on Linux, and today I put out the first release on GitHub.
RiftLinux is a driver for the Oculus Rift CV1, its Constellation sensors and its Touch controllers. It's a modified Monado, specialized for this one headset, and it installs as a single package. No Windows, no Oculus app, no Meta account, and it doesn't need OpenHMD or upstream Monado either.
Why bother with a 2016 headset: plenty of people still might have an Oculus Rift CV1 stored away somewhere 😄, at least I do, and it still holds up well as a lightweight PCVR headset with OLED panels. On Linux the options were OpenHMD, which its own README now marks as unmaintained and which tracks the Touch controllers' rotation only, and upstream Monado, whose Rift CV1 support is still experimental: its sensor calibration and Touch tracking work is still waiting in open merge requests.
RiftLinux began by trying those two merge requests, but they were incomplete: the controllers barely tracked. What it has now was built from there. The tracking was reworked and checked against the Oculus runtime's own data, by day and by night: mirrored and flipped controller poses, the Touch controllers' IMU calibration, bright rooms where the sensors pick up sunlit spots, and the LED and radio settings the Oculus runtime uses, read from its USB traffic. The sensors are placed from your movement, with no setup app, found and placed again when one is moved or knocked (even mid-game), levelled by the headset's gravity, and measured again by themselves when moved too far. For room scale, the LEDs on the back of the headband are measured on your headset and tracked, so a sensor behind you keeps tracking it. On top of that came the SteamVR integration, the picture pipeline (direct mode, Auto-HDR, motion smoothing/ASW), controller pairing worked out from the Oculus app's USB traffic, and the one-package install.
Additionally, I mostly use Linux full time, and having to switch to Windows just to use the Rift CV1 and fly VTOL VR or other sims was getting painful, especially with Windows updates (Waiting forever) and Meta's support for the CV1 on Windows getting worse.
What works:
- Head and Touch controller tracking (6DoF) with two sensors. Room scale with three (or more): the LEDs on the back of the headband are measured on your headset and tracked, like the Oculus runtime does, so you can turn all the way around.
- The sensors are measured from your movement and saved. If you move or knock one, it's found and placed again automatically.
- SteamVR: native games and Windows VR games through Proton. I've played No Man's Sky VR, VTOL VR and Bigscreen with it. OpenXR apps also run without SteamVR, on RiftLinux's own runtime.
- Pairing Touch controllers without Windows (`riftlinux-setup pair`).
- The Oculus button opens a menu in the headset: headphone volume, microphone, floor height, picture settings.
- The CV1's true render resolution, and motion smoothing similar to ASW 1.0 when a game can't hold 90 fps.
- An optional Auto-HDR for the OLED panels (SDR to HDR), on X11 and Wayland alike.
- HDR supported games are shown as HDR, and a video player can hand over its HDR10, HDR10+ or DV metadata (through an OpenXR extension or the driver's socket); no player does that yet.
- X11 and Wayland (GNOME and KDE Plasma).
How the tracking compares with the Oculus runtime: the sensors' camera frames, and the poses Oculus computed from them, were captured over USB on Windows. RiftLinux's tracker then ran on those same frames and was scored against Oculus' poses. For each kind of movement, it keeps the controllers tracked within 1-2 percentage points of what Oculus managed.
Packages: .deb (Debian, Ubuntu, Mint, Pop!_OS), Arch, Fedora .rpm, and a tarball for everything else. x86-64 only.
Licence: BSL-1.0, the same as Monado.
Tested so far on NVIDIA only (drivers 580 and 615), on Ubuntu 25.04 with GNOME and CachyOS with KDE Plasma. AMD and Intel should work through Vulkan, but I don't have the hardware, so reports from AMD or Intel users are welcome.
Known issues are in the README, each linked to the bug in the project it belongs to. The one you're most likely to hit: Steam's client can crash when a flat (non-VR) game opens a window while SteamVR is running. That's a SteamVR for Linux bug (#963), not the driver.
If tracking misbehaves for you, `riftlinux-setup record on` records a session I can replay to see what went wrong; the bug report form explains how to attach it.
Rift CV1 owners on Linux might want to dust off their headsets and give it a try!