Create Blog “2026-09-20-steamvr-works-over-a-cable-o”
This commit is contained in:
76
content/blog/2026-09-20-steamvr-works-over-a-cable-o.md
Normal file
76
content/blog/2026-09-20-steamvr-works-over-a-cable-o.md
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
title: SteamVR works over a cable :O
|
||||
date: 2026-09-20T18:34:00
|
||||
draft: false
|
||||
description: I play vr ok shut up
|
||||
---
|
||||
|
||||
## Oculus and You
|
||||
|
||||
For the longest time, the Oculus ecosystem has been a closed loop. This is bullshit, fuck you meta. The first party closed source Oculus link app is windows only, so for us losers who don't want their data stolen over on linux, it was third party or go home. Obviously, there's nothing worth any money on the meta store, and I didn't want to use the Oculus link app anyways, but for ages it was literally the only option. If you were on linux and wanted to play your "legally purchased" copy of Beatsaber + ALL DLC BUILD v2026.08.04, you were flat out of luck. I own a quest 2, I bought it the week it came out, and that was so long ago that I was still using windows. It's so long ago, in fact, that I still call it an Oculus Quest, because that's the logo of the company on the front of my headset. We miss you, Oculus.
|
||||
|
||||
From the instant I connected to pcvr, I could feel that SteamVR was the superior option. Mostly because there wasn't an easy way to add cracked games to the Oculus home launcher. But I still had to connect to Steam through Oculus, There was always a middleman. Every time I put on my headset, I had to wait for Oculus to do it's shit before I could launch SteamVR and get on with my life. Not to mention the lackluster Quest interface back in those days (even though I think the modern one is shittier because now you have to be online to access apps from unknown sources, which doesn't even make sense). Anyway, my point is that the Oculus link app, probably the slowest and most useless app on my PC at the time, was the most integral part of my setup. Without that, there was no PCVR.
|
||||
|
||||
And then I switched to linux.
|
||||
|
||||
## The Olden Days
|
||||
|
||||
I switched to linux over a holiday on my laptop, just as a taster, which meant that I couldn't play VR at all. When I got back, I didn't touch my headset until I was well and truly free from anything with microsoft's name on it. If the school computers didn't run windows (badly, I'll admit), I wouldnt've touched microslop anything for well over six months by the time I was itching for some beatsaber. I looked on steam first, because obviously, and saw that SteamVR was linux native, so I installed it immediately.
|
||||
|
||||
I then searched for something like "Oculus link arch linux", which I thought was innocent enough. The first result came back as a Reddit post (this was long long long before the time of AI overview, even before chatgpt at all I believe), with a title along the lines of "is there really no way to get Oculus link on linux?". Foreboding. I ignored it for the moment and scrolled down until I came to the Oculus download page, which presented me with one harrowing option: "Download for Windows (.exe)". No linux option. Devastating.
|
||||
|
||||
I clicked on the Reddit post, which presented me with a few thousand comments saying that there wasn't a way to get cable PCVR working without a SteamVR native headset. No Oculus support at all. Scrolling down a bit further, there were some people shilling a wireless streaming app, ALVR, but I was skeptical at best. I was deep into VR youtube at the time, and combined with my experience with the absolutely terrible Oculus Air Link, "wireless VR" didn't exactly pique my interest.
|
||||
|
||||
I looked around a bit more, tried to run it through wine, which someone on some github thread somewhere had said worked "good enough", but only with some specific kernel options and a dedicated network interface or something, but to no avail. There was no Oculus Link on linux.
|
||||
|
||||
## ALVR, etc.
|
||||
|
||||
You have to remember, this time period was the wild west for VR. The phrase "metaverse" was only used to refer to movies and sci fi. Meta was still called Facebook. I was basically an early adopter. The comparison between the Quest 2 and Steam Frame is almost as distant as the one between the first or second samsung fold and the Iphone duo. That is to say, nobody was interested in wasting their time reverse engineering the Link protocol just to port it to linux. And so, the only option was wireless.
|
||||
|
||||
Without some dodgy ADB commands, which worked worse than no cable at all in most cases, the only "supported way" to play PCVR on linux was ALVR, wirelessly. As far as I can remember, in the early days it used a wireless ADB debugging connection (this was before meta locked developer mode behind having a dev account. Fuck you meta) to hook into a partner apk on the quest, allowing it to send and decode a video stream. It was highly inefficient, slow, looked like shit, and had enough latency to make sure that you couldn't hit more than 3 blocks in a row on any moderately hard song. I'm taking like 40ms here. If someone was watching youtube in the other room, that could spike to 150 easily.
|
||||
|
||||
But that was the only option, unless all you wanted to play was bonelab with mediocre graphics. However, ALVR got better over time, like most foss projects, and figured out a way to get peer to peer networking, removing the ADB latency altogether. That made it "playable", but the resolution still needed to be heavily reduced for you to be able to play anything for a reasonable time without throwing up.
|
||||
|
||||
Then I stopped using VR for a while. As in like a year. I accidentally erased all my games, too, so if I wanted to play beatsaber, I would have to re-download it and hook it up to steam and it was a whole thing that took ages because I still had slow internet. Once upon a time it would take me literal days to download a 20gb game. When I had returned to the VR scene, mostly because of the release of some game or another (pretty sure I had seen a VTOL VR video and was immediately hooked), wireless VR had taken another step in the right direction.
|
||||
|
||||
### Wivrn or something
|
||||
|
||||
Steam link supposedly worked for VR games by this point. I had used it on the quest before to play satisfactory on a 200" screen, which was fun, but apparently VR support was only on windows, with "linux coming soon", as is standard. Important to mention that this was before the steam deck even existed, so it made sense for valve not to care as much about linux support as they do now. But, because valve isn't a shitty company (_cough cough meta cough_), the code they were using to interface with SteamVR was public to a certain extent. That meant that some insane individuals reimplemented the whole thing and put it under GPLv3. This was wivrn.
|
||||
|
||||
With minimal fiddling, you could get full resolution (at least 80%) with an average of 10ms latency. You could actually play beatsaber on a quest without installing windows! It helped to turn down the graphics settings, but other than that, VR was fully functional, wireless, and with no oversight from meta at all!
|
||||
|
||||
Then I stopped playing VR again.
|
||||
|
||||
## The actual interesting bit
|
||||
|
||||
Recently, I decided I wanted to play boneworks. I suddenly realised that I had never played it, and didn't want to miss out on the experience, despite the fact that the game came out like 7 years ago now. So, I charged my quest and opened the wivrn app, like I remembered doing the last time I wanted to play a VR game. But, on my computer, there was no wivrn app to be found. I chalked that up to having messed about with my nix config, so I made a module for it and opened it up. While my computer was rebooting, though, in the app menu on my quest, I spotted the steam link icon, just sitting there. So I decided to try it.
|
||||
|
||||
It worked flawlessly. Other than my headstrap snapping halfway through the playthrough, I can report that boneworks is still one of the best VR games there is. All wirelessly, directly to SteamVR. It was incredible! The latency was still in the high 20s, a far cry from the 2 or 3ms you would get if you used a cable, but definitely playable. Not beatsaber playable, but I could kill a few nullmen without too much issue.
|
||||
|
||||
Once, when I opened the app on the headset, a popup appeared. A system popup, the kind you just agreed to just so it would leave you alone. It said something like "Allow SteamVR to access devices connected over USB", but I paid it no mind and moved on with my life. Until I wanted to play beatsaber. It got me thinking. Previously, the USB on the quest had been reserved for charging and official meta stuff, hence the need for ADB and developer mode, so surely I couldn't just play SteamVR through it, right? Right??
|
||||
|
||||
Wrong. Just in case, I turned the headset's wifi off, plugged in my old dusty link cable, and pressed connect. 4ms latency on average. Four. Four, with a capital F. There was no noticable difference between using steam link and Oculus link, and it blew my mind. Full resolution, 72hz, at less than 10ms of delay. True PCVR was finally possible. But there was a catch. Well not really, but there kind of was
|
||||
|
||||
## How to fix the network issues
|
||||
|
||||
In the logs, every 30 seconds or so, it would cite a network reset, and the video would freeze for a second or two. This would, first and foremost, cause you to fail whatever beatsaber level you were playing, and secondly, was really annoying. My first instinct was that it was USB autosleeping, I had had problems with that in the past, but it turns out it was simpler than that. NetworkManager.
|
||||
|
||||
### Fixing it
|
||||
|
||||
Hi future me, you're probably here because you forgot the command that lets you play beatsaber. How sad. You loser.
|
||||
|
||||
Basically, NetworkManager was managing the interface, and it polled it every so often, causing the aforementioned hitch in the video stream. You can fix it by doing the following
|
||||
|
||||
1. Run `ip a` with the headset connected to SteamVR.
|
||||
2. Take note of the interface that's at the bottom of the list, starting with `enp`, altname starting with `enx`
|
||||
3. Use the following command to prevent NetworkManager from fucking with the interface:
|
||||
|
||||
```shellscript
|
||||
sudo nmcli device set enp11s0f3u4i3 managed no
|
||||
```
|
||||
|
||||
And you can now run SteamVR over a cable on linux. You're welcome.
|
||||
|
||||
## Moral of the story
|
||||
|
||||
Fuck meta.
|
||||
Reference in New Issue
Block a user