<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>aiix · Aditya Mehra · #vr</title>
  <subtitle>Posts by Aditya Mehra tagged vr.</subtitle>
  <link href="https://aiix.space/tags/vr/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="https://aiix.space/tags/vr/" rel="alternate" type="text/html"/>
  <id>https://aiix.space/tags/vr/</id>
  <updated>2026-10-25T12:00:00.000Z</updated>
  <author><name>Aditya Mehra</name><uri>https://aiix.space/</uri></author>
  <icon>https://aiix.space/icon-512.png</icon>
  <logo>https://aiix.space/og.png</logo>
  <entry>
    <title>Oculus Rift CV1 on Linux: Introducing RiftLinux</title>
    <link href="https://aiix.space/blog/riftlinux-oculus-rift-cv1-on-linux/" rel="alternate" type="text/html"/>
    <id>https://aiix.space/blog/riftlinux-oculus-rift-cv1-on-linux/</id>
    <published>2026-10-25T12:00:00.000Z</published>
    <updated>2026-10-25T12:00:00.000Z</updated>
    <summary>RiftLinux is a free, open-source Oculus Rift CV1 driver for Linux: full head and Touch controller tracking in SteamVR and OpenXR. No Windows, no Meta account.</summary>
    <content type="html">&lt;p&gt;I use Linux full time, and I still love my Oculus Rift CV1. That used to mean rebooting into Windows every time I
wanted to fly in VTOL VR. Not anymore: &lt;strong&gt;RiftLinux&lt;/strong&gt; is an Oculus Rift CV1 driver for Linux that I built so the CV1
just works. Full 6DoF tracking of the headset and both Touch controllers through the original Constellation sensors,
in SteamVR and in OpenXR apps, installed from a single package. No Windows, no Oculus app, no Meta account.&lt;/p&gt;
&lt;p&gt;Here it is running VTOL VR on Ubuntu with GNOME, through SteamVR and Proton:&lt;/p&gt;
&lt;iframe width=&quot;1100&quot; height=&quot;619&quot; src=&quot;https://www.youtube.com/embed/7lwqVgMlDiw&quot; title=&quot;YouTube video&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id=&quot;why-i-built-a-rift-cv1-driver-for-linux&quot;&gt;Why I built a Rift CV1 driver for Linux&lt;/h2&gt;
&lt;p&gt;The CV1 is a 2016 headset, but it still holds up well as a lightweight PC VR headset with OLED panels, and plenty of
people have one stored away somewhere. I have one, and I wanted to use it without leaving Linux. Switching to Windows
just to use the headset was getting painful, with Windows updates that took forever and Meta’s support for the CV1 on
Windows getting worse.&lt;/p&gt;
&lt;p&gt;On Linux there were two options, and neither got the CV1 fully working:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OpenHMD&lt;/strong&gt;: no longer actively maintained; its last release was in 2019.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monado&lt;/strong&gt;: CV1 support unknown without OpenHMD, with a few pull requests still coming together.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is also a principle here. Hardware should keep working on the system its owner chooses. A Rift CV1 is still a
good headset, and it shouldn’t turn into e-waste because one vendor’s software moved on.&lt;/p&gt;
&lt;h2 id=&quot;how-rift-cv1-tracking-works-on-linux&quot;&gt;How Rift CV1 tracking works on Linux&lt;/h2&gt;
&lt;p&gt;The CV1 tracks itself from the outside in. The headset and each Touch controller carry infrared LEDs at known
positions. The Constellation sensors are cameras that see those LEDs; from where each LED shows up in a sensor’s
picture, RiftLinux works out where the headset and controllers are and which way they face, and each device’s IMU
(gyroscope and accelerometer) carries the motion between camera frames.&lt;/p&gt;
&lt;p&gt;Here’s how well that works:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://aiix.space/images/blog/riftlinux/sensor-frame-side-by-side.png&quot; alt=&quot;Oculus Rift CV1 tracked on Linux: the same Constellation sensor frame with the headset&amp;#x27;s LEDs placed by the Oculus runtime and by RiftLinux&quot;&gt;&lt;/p&gt;
&lt;p&gt;That’s one frame from a Constellation sensor, captured on Windows: on the left, the headset’s LEDs where the Oculus
runtime tracked them; on the right, where RiftLinux tracked them from the very same frame. They line up. Over the first part of that recording, RiftLinux’s headset pose matches the Oculus
runtime’s to within 4.7 mm and 0.28° (median).&lt;/p&gt;
&lt;p&gt;RiftLinux is a modified Monado, specialized for full Rift CV1 support, and what makes the CV1 work was built for
RiftLinux: 394 of the 410 commits it adds on top of Monado are its own, each tested on the real hardware or against
recorded sessions. The highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tracking measured against the Oculus runtime.&lt;/strong&gt; I captured the sensors’ camera frames over USB on Windows, together
with the poses the Oculus runtime computed from them, then ran RiftLinux’s tracker on the same frames: for each kind
of movement, it keeps the Touch controllers tracked within 1-2 percentage points of what Oculus managed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Touch controllers that stay where your hands are.&lt;/strong&gt; Mirrored and flipped poses of the LED ring resolved with each
controller’s own sense of gravity, edge-on and few-LED views solved, each controller’s IMU and gyro calibrated, and
sunlit spots in bright rooms kept out of the search, so tracking holds by day and by night.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The display as the CV1 needs it.&lt;/strong&gt; Lens distortion corrected for the CV1’s field of view, brightness and persistence
set as the Oculus runtime sets them, and the OLED panel switched off when the headset isn’t worn and back on the
moment it is.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Oculus runtime’s own settings.&lt;/strong&gt; The LED and radio settings the headset and controllers need were read from the
Oculus runtime’s USB traffic, and so was controller pairing: Touch controllers pair on Linux, without Windows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No setup app.&lt;/strong&gt; The sensors are placed from your movement, levelled by the headset’s gravity, and found and placed
again when one is moved or knocked, even mid-game.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Room scale.&lt;/strong&gt; The LEDs on the back of the headband are measured on your headset and tracked, so a sensor behind you
keeps tracking it and you can turn all the way around.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One package.&lt;/strong&gt; Packages for Debian, Ubuntu and their relatives, Arch and CachyOS, Fedora, and a tarball for
everything else; the SteamVR driver registers itself.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;steamvr-proton-and-vr-games-on-linux&quot;&gt;SteamVR, Proton and VR games on Linux&lt;/h2&gt;
&lt;p&gt;Native Linux VR games run, and so do Windows VR games through Steam’s Proton. I’ve played VTOL VR, No Man’s Sky VR, Beat
Saber and Bigscreen on it. OpenXR applications also run without SteamVR, on RiftLinux’s own OpenXR runtime.&lt;/p&gt;
&lt;p&gt;The picture goes through RiftLinux’s own compositor in direct mode, on Wayland and X11, with GNOME or KDE Plasma: the
desktop hands the headset’s display over, and when you take the headset off its display switches off and the desktop
gets it back. The compositor renders at the CV1’s true resolution and adds motion smoothing similar to ASW 1.0 when a
game can’t keep up, and for the OLED panels there’s an optional Auto-HDR that turns SDR games into HDR right in the
headset.&lt;/p&gt;
&lt;p&gt;The Oculus button opens a menu in the headset for headphone volume, the microphone, floor height and picture settings.&lt;/p&gt;
&lt;h2 id=&quot;rift-cv1-on-linux-quick-answers&quot;&gt;Rift CV1 on Linux: quick answers&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Does the Oculus Rift CV1 work on Linux?&lt;/strong&gt; Yes, with RiftLinux: the headset, the Constellation sensors and both Touch
controllers, with full 6DoF tracking in SteamVR and OpenXR apps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do I need Windows, the Oculus app or a Meta account?&lt;/strong&gt; No. Install one package, plug in the Rift, start SteamVR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which Linux distributions?&lt;/strong&gt; Ubuntu, Debian, Linux Mint and Pop!_OS (.deb), Fedora (.rpm), Arch, CachyOS, EndeavourOS
and Manjaro, and a tarball for any other x86-64 distribution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do Windows VR games work?&lt;/strong&gt; Yes, through Steam’s Proton, as VTOL VR in the video above.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wayland or X11?&lt;/strong&gt; Both, on GNOME and KDE Plasma.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Which graphics cards?&lt;/strong&gt; NVIDIA and AMD have been tested; if you try it on Intel, I’d love to hear how it goes.&lt;/p&gt;
&lt;h2 id=&quot;try-riftlinux&quot;&gt;Try RiftLinux&lt;/h2&gt;
&lt;p&gt;RiftLinux is free and open source (BSL-1.0, the same as Monado):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Website: &lt;a href=&quot;https://riftlinux.com&quot;&gt;riftlinux.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Getting started: &lt;a href=&quot;https://riftlinux.com/guide/getting-started/&quot;&gt;the RiftLinux guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download: &lt;a href=&quot;https://github.com/AIIX/RiftLinux/releases/latest&quot;&gt;the latest release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source code and issues: &lt;a href=&quot;https://github.com/AIIX/RiftLinux&quot;&gt;github.com/AIIX/RiftLinux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On GNOME, grab the &lt;a href=&quot;https://github.com/AIIX/RiftLinux/releases/tag/v0.1.2&quot;&gt;0.1.2 pre-release&lt;/a&gt;: it fixes GNOME logging
you out when you take the headset off. If tracking ever misbehaves, &lt;code&gt;riftlinux-setup record on&lt;/code&gt; records a session I can
replay, and the bug report form shows how to attach it.&lt;/p&gt;
&lt;p&gt;Got a Rift CV1 in a cupboard? Dust it off and give it a try. And if it works for you, a star on
&lt;a href=&quot;https://github.com/AIIX/RiftLinux&quot;&gt;GitHub&lt;/a&gt; helps other CV1 owners find it.&lt;/p&gt;</content>
    <category term="linux"/>
    <category term="vr"/>
    <category term="oculus-rift"/>
    <category term="steamvr"/>
    <category term="gaming"/>
    <category term="riftlinux"/>
    <category term="open-source"/>
    <link rel="enclosure" href="https://aiix.space/images/blog/riftlinux/sensor-frame-side-by-side.png" type="image/png" length="99611"/>
  </entry>
</feed>
