An Experiment: Trying VR on Linux

I was recently hanging out with a friend in VRChat, who mentioned that he was playing on Linux at the time, and that it actually all worked okay. I was mildly suspicious of this, but I was in search of something to procrastinate on this evening, so I decided to try it out.

I am following the Linux VR Adventures Wiki for my info here.

The first step was to install the software I’m gonna need. At the expense of access to my usual OpenVR overlays, I will not be using SteamVR, so that amounts to WiVRn for an OpenXR runtime and streaming server, xrizer or OpenComposite for an OpenVR compatibility layer, WLXOverlay-S for an in-game overlay, and Proton-GE-RTSP to make video players work properly in VRChat.

yay -S wivrn-dashboard vivrn-server xrizer opencomposite-git wlx-overlay-s-git proton-ge-custom-rtsp-bin

I also install VRChat through Steam.

Now, Avahi needs to be running for WiVRn to work:

systemctl start avahi-daemon

and now opening WiVRn Dashboard gives me a PIN via a system notification, and opens a setup wizard. At this point, I turn my headset on and connect it to the network, to make sure WiVRN will be able to see it.

My given options are to install the WiVRn app from the Quest Store, or to install over USB. This is rather unhelpful to me, so I install the release client build from Github on my headset instead and hit Next.

The Wizard now prompts me to choose one of [None, Rez Infinite, Thumper, VRChat, or WLXOverlay-S], an application to start when my headset connects. Neat! I picked WLXOverlay-S. It prompts me to go to the settings for my steam games and paste PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 %command% as the launch options, so I do that for VRChat.

Now I open the WiVRn app on my headset, which prompts me to enable or disable microphone and body tracking, then drops me to the UI. As directed by the Wizard, I click on my PC in the list and entex the PIN.

My headset now prompts me to pick a game, so I click VRChat. I like the interaction in this streamer - the performance and settings UI is rendered on the client side, and you can click down both thumbsticks to open settings. You can drag this window with grip, but also pressing grip while not in game just summons the window to you, which I very much like. It stops you losing the UI.

VRChat failed to launch with an EAC error, so I set the Proton version to RTSP hoping this would work. I notice by the way that Steam only asks which mode I want to launch VRChat in when I dont have WiVRn running, that it is in fact aware of WiVRn!

To my surprise, I find that I drop easily and directly into VRChat in VR! It works! What doesn’t is audio, I’ll have to fix that myself. Using qpwgraph, I wire the monitor for my desktop audio device into WiVRn, so everything that comes out of my speakers will also go to my headset, and when I do this the VRChat lobby sound becomes audible on my headset, WIN!

I notice that unlike Pico Connect, WiVRn lets me hear what’s happening in VR when I’m in passthrough mode, nice.

I noticed that WLXOverlay-S had docked itself to my wrist and was fully interactable, which is nice to see, but clicking the button to open mirroring threw an error that WayVR was missing.

yay -S wayvr-dashboard

which prompted me the following, and so I did it:

To use wayvr-dashboard, create ~/.config/wlxoverlay/wayvr.conf.d/dashboard.yaml and add:

dashboard:
  exec: "/usr/bin/wayvr-dashboard"
  args: ""
  env: []

I had set my bitrate to 200Mbps, which I know my network can handle, but when I got from the loading screen to the actual game, my graphics were very screwed. Weird.

I disconnected streaming, and when later reconnecting, the client just prompted me to start an app. In fact, it took multiple minutes of just leaving it before it realised that VRChat was running and dropped me back into VR.

Wondering if this was an xrizer issue (xrizer is generally considered the more modern OpenVR runtime, but it is less feature complete than OpenComposite, and I already installed OpenComposite to try full-body tracking later), I switched to OpenComposite in WiVRn settings, and tried again.

Again, the stream was garbled, different bugs presented themselves, and WayVR Dashboard loaded but appeared to be completely useless.

Annoyed at the failure of WiVRn to really work at all, I decided to do something stupid, and try SteamVR, despite its famous bugginess on Linux.

I uninstalled WiVRn, xrizer, OpenComposite, WLXOverlay-S, and WayVR.

yay -Runs wivrn-server wivrn-dashboard opencomposite-git xrizer wlx-overlay-s-git wayvr-dashboard

Then, I installed SteamVR and ALVR (yay -S alvr), and launched ALVR. ALVR prompted me to set firewall rules, requiring me to do an admin login, but that worked. The UI I was presented with was familiar to me from using ALVR in Windows, so I configured my stream how I like it, and hit Launch SteamVR.

SteamVR asked for admin to finish setup, then closed. It appears to always crash on startup. Looking at steam logs, the error is:

This application failed to start because it could not find or load the Qt platform plugin "wayland;xcb".

Available platform plugins are: xcb.

which implies that SteamVR’s QT is too old to understand this QT platform directive and fallback to XWayland. I set QT_QPA_PLATFORM=xcb %command% and tried again. This time, I got SteamVR!

Launching via ALVR prompted me the following:

Make sure you have put the following line in your SteamVR launch options and restart it: /home/sink/.local/share/Steam/steamapps/common/SteamVR/bin/vrmonitor.sh %command%

After applying this to my launch options, I tried once more, and ALVR successfully connected!

With the usual crashiness, it worked, though my audio was not working, and naturally SteamVR desktop mirroring didn’t work.

While it worked, it was a bit jittery, and the lack of audio was a bit of a deal breaker.

I decided to try and get my overlays working, just for the hell of it though, and no. OpenVR Toolkit explicitly told me that it could not connect to SteamVR, and fpsVR and OpenVR Advanced Settings both just kind of did nothing.

I decided to switch gears, and try Steam Link, since perhaps that is built into Steam, and might work nicer than ALVR. I also uninstalled fpsVR, OVRTk, and OVRAS, as it was clear those weren’t going to work.

This did not work.

I tried removing ALVR’s launch argument tweaks from SteamVR, to no avail. This wasn’t going to work.

Conclusion

If you want to do VR on Linux, the way that is generally cited to work well is to use WiVRn/Monado.

I found that ALVR and SteamVR got me further, but still not to a complete experience. Maybe WLXOverlay-S with SteamVR would have added back all I was missing, but given the lack of audio, and the requirement to use ALVR, which is janky, I doubt it.

For the forseeable future, I shall be using Windows for all my VR gaming needs.

— Hazel

QUIET SYSTEM YELLOWSINK @ UWUNET 2025-10-18