linux vr setup
initally written
current version
world in picture: Umbra by Blue Cat
assuming:
- quest headset (quest 2 or quest 3), NOT lighthouse
- machine with nvidia gpu (proprietary driver), though amd works too
- X11, NOT wayland (don't talk to me about wayland. i do not care. it probably works tho)
- flatpak setup, NOT native
- i can't use envision. my gcc is broken. can't compile wivrn
- monado with wivrn, NOT steamVR
- as foss as i can, because SVR is abandonware / valvetime-ware
flatpak install flathub io.github.wivrn.wivrn
flatpak run io.github.wivrn.wivrn
get wlxoverlay-s while at it
get xrgears while at it. there's no specific appimage or whatever so you'll need to build it. link is for void-packages (i use void linux, you may be able to find it on AUR if arch)
then pair the headset (get wivrn app from meta quest store) to the server, and connect to it. you aren't dropped to vr until there's a vr client, so open another terminal and ./wlxoverlay-s-whatever-version-u-got.appimage
i recommend looking over wlxoverlay-s' readme to see controller mappings. i also recommend configuring it such that show/hide follows your HMD center (xsoverlay-style behavior, i know)
audio #
- i use pipewire + pipewire-pulse
- need to configure default devices to use wivrn, got a small script that does it
- i believe those become availble as soon as HMD connects
#!/bin/sh set -eux pactl set-default-sink wivrn.sink pactl set-default-source wivrn.source
full body tracking #
- i use slimevr
currently https://lvra.gitlab.io/docs/slimevr/ gives 3 options
- linux steamvr (nope, this is not a steamvr setup lol)
- linux solarxr (maybe, but can't compile myself until void updates gcc. i should try compiling with clang)
- vrchat osc (can use)
vrchat osc with slimevr sucks if your trackers are using cheap IMUs like mine (my bad experience with ozivr), since osc does not give HMD position, slimevr has to assume HMD is always upright, which requires you to always stay upright on any reset (yaw, full, mounting), which i have to do every 10 minutes or so. makes for good exercise i guess, but for me it's unusable until solarxr comes along.
relevant prs:
- slimevr (merged!) https://github.com/SlimeVR/SlimeVR-Server/pull/1247
- monado (soon, hopefully!) https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2253
video games #
generally, copy the environment variables from wivrn into the steam game's launch options and it'll mostly likely work (test results as of
- vrchat (works, generally), save for:
- as long as you disable antialiasing on nvidia gpus (or else, bad performance on mirrors)
- some worlds' shaders don't work very well on linux (one example i got is a world where its lights were way brighter than windows version, it was still a good world but it can be jarring to ppl)
- bug at loading environment. something related to opencomposite not working with steamvr overlays, which vrchat's loading screen is
- lvra is a good resource https://lvra.gitlab.io/docs/vrchat/
- beat saber (works, no issues. haven't tested mods as they assume windows, i should try to use this)
- pistol whip (works, missing: downloading custom maps from within proton, recentering)
- synth riders (works, including custom songs here. missing: recentering)
- tetris effect (works, missing: there's a black border around my HMD display, recentering has a 180deg offset)
random notes #
- never use h265, broken. h264 for the win
- somehow i can now take 8k vrc pictures without everything locking up (and in the worst cases, not coming back to life), at worst vrchat is a bit slow for 5 seconds, but not frozen for 10~20
- if you use barrier it'll fuck up spetacularly with wlxoverlay, requires a reboot to get that functionality back
- i am able to get syncthing to synchronize linux vrchat's pictures to my main computer without much issue (save for faulty ram which triggered disk corruption but shhh we don't talk about that)
- vrcx has a stable linux build! https://github.com/vrcx-team/VRCX/releases/tag/v2025.01.31, this should Just Work (as long as you have dotnet) but if it doesn't, talk around in vrcx discord and we'll hook you up
avahi on void linux #
need avahi on void
xbps-install avahi
sudo ln -s /etc/sv/avahi-daemon/ /var/service/
- set
enable-dbus=yes
on/etc/avahi/avahi-daemon.conf
need dbus fixed on void
- i have both a system bus and a session bus
- got
dbus-run-session /usr/bin/awesome
configured under/usr/share/xsessions/awesomewm.desktop
already - seems avahi cant connect to system bus tho
2025-01-25T01:04:55.77879 daemon.warn: Jan 24 22:04:55 avahi-daemon[21245]: WARNING: No NSS support for mDNS detected, consider installing nss-mdns!
2025-01-25T01:04:55.77935 daemon.err: Jan 24 22:04:55 avahi-daemon[21245]: dbus_bus_request_name(): Connection ":1.12091" is not allowed to own the service "org.freedesktop.Avahi" due to security policies in the configuration file
2025-01-25T01:04:55.77939 daemon.warn: Jan 24 22:04:55 avahi-daemon[21245]: WARNING: Failed to contact D-Bus daemon.
need to restart dbus methinks. avahi package installs avahi.conf into dbus settings so it has perms
NOTE: need to restart entire system after restarting dbus system bus. everything explodes otherwise
https://stackoverflow.com/questions/4560877/dbus-bus-request-name-connections-are-not-allowed-to-own-the-service
wivrn can't start due to unknown error (999) in nvenc encoder #
following https://github.com/obsproject/obs-studio/issues/11381, i did this:
nvidia-smi
sudo modprobe -r nvidia-uvm
sudo modprobe nvidia-uvm
- restart wivrn
also https://github.com/tensorflow/tensorflow/issues/53341#issuecomment-1166532019