VR Stack Control is a lightweight Linux GUI + systemd user service that manages a modular VR stack:
Tracking -> Streaming Server -> VR App
It keeps OpenXR/OpenVR state sane (no stuck SteamVR overrides, no missing OpenVR paths) and launches things in the right order every time.
Made by: David Coates (idea + testing) + ChatGPT (implementation help)
Repo: https://github.com/devnet82-ship-it/wivrn-stack-control Pages: https://devnet82-ship-it.github.io/wivrn-stack-control/
WiVRn:
- Project: https://github.com/WiVRn/WiVRn
- Website/docs: https://wivrn.app/
- Releases: https://github.com/WiVRn/WiVRn/releases
- Flathub (optional PC install): https://flathub.org/apps/io.github.wivrn.wivrn
WayVR:
- Project: https://github.com/wayvr/wayvr
SlimeVR:
- SlimeVR Server: https://github.com/SlimeVR/SlimeVR-Server
- AUR slimevr-beta-bin: https://aur.archlinux.org/packages/slimevr-beta-bin
XRizer (OpenVR -> OpenXR for Steam/OpenVR titles):
- Project: https://github.com/Supreeeme/xrizer
- AUR xrizer-git: https://aur.archlinux.org/packages/xrizer-git
Download v0.6.85 zip from Releases: https://github.com/devnet82-ship-it/wivrn-stack-control/releases
Install (fish-safe):
cd ~/Downloads
# Replace this with your exact filename if needed
set ZIP vr-stack-control-v0.6.85-openxrfix9-close-steam-on-wivrn21.zip
rm -rf vr-stack-control-v0.6.85
unzip -o "$ZIP" -d vr-stack-control-v0.6.85
cd vr-stack-control-v0.6.85
chmod +x install.sh uninstall.sh bin/*
./install.sh
systemctl --user daemon-reloadRun GUI:
vr-control --guiOptional tray:
vr-control tray
vr-control tray-enable
vr-control tray-disableDoctor:
vr-control doctor- XR Runtime dropdown
- WiVRn = Quest streaming (should NOT start Steam/SteamVR)
- SteamVR = SteamVR/OpenVR path (for SteamVR/legacy)
- Start = launches the stack in the correct order
- Stop = stops everything cleanly
- Doctor = prints a health report (OpenXR runtime + OpenVR paths + services)
- Tray = optional small icon for quick Start/Stop/Doctor
- Open:
vr-control --gui - Set XR Runtime = WiVRn
- (Optional) Enable SlimeVR / Tracking toggle if you want body tracking
- Click Start
- Put on the Quest -> open WiVRn (Quest Store app) -> connect to your PC
- When done, click Stop
-
Quest streaming / VRChat / WiVRn worlds
- XR Runtime = WiVRn
- Click Start
- Connect in the Quest WiVRn app
- Click Stop when finished
-
SteamVR mode (only if you specifically want SteamVR)
- XR Runtime = SteamVR
- Click Start
- Launch SteamVR/Steam game
- Click Stop when finished
- Click Stop
- Run Doctor:
vr-control doctor
- What “good” looks like for WiVRn:
- OpenXR runtime shows Monado/WiVRn (not SteamVR)
- OpenVR paths are present (canonical not missing)
- If Steam opens when you select WiVRn:
- Click Stop
- Set XR Runtime back to WiVRn
- Start again (WiVRn mode should keep Steam/SteamVR closed)
sudo pacman -Syu
sudo pacman -S --needed git base-devel avahiEnable Avahi (WiVRn discovery uses mDNS):
sudo systemctl enable --now avahi-daemonIf you previously used beta/dev WiVRn:
sudo pacman -Rns wivrn-full-git 2>/dev/nullInstall WiVRn stable:
yay -S --needed wivrn-server wivrn-dashboard
pacman -Q | grep -i wivrnsudo pacman -S --needed wayvr
command -v wayvrThis guide uses slimevr-beta-bin because it has been reliable for this setup.
yay -S --needed slimevr-beta-bin
pacman -Q | grep -i slimevryay -S --needed xrizer-git xrizer-common-git lib32-xrizer-git
mkdir -p ~/.local/share/openvr
printf "%s\n" \
"{" \
" \"jsonid\": \"vrpathreg\"," \
" \"runtime\": [\"/opt/xrizer\"]," \
" \"version\": 1" \
"}" \
> ~/.local/share/openvr/openvrpaths.vrpath
set -Ux VR_PATHREG_OVERRIDE "$HOME/.local/share/openvr/openvrpaths.vrpath"You do NOT need ADB for normal use.
- On Quest 3: open the Store
- Search: WiVRn
- Install or Update it
- Open WiVRn and connect to your PC (same network)
Only do this if you must sideload a specific build (testing) or you are debugging.
Install ADB tools:
sudo pacman -S --needed android-tools
adb versionEnable Developer Mode:
- Meta Quest phone app -> Devices -> Quest 3 -> Developer Mode ON
- Reboot headset
Enable USB Debugging in headset:
- Settings -> System -> Developer -> USB Debugging ON
Authorize:
adb kill-server
adb start-server
adb devicesIf you see "unauthorized": accept the USB debugging prompt in-headset and tick "Always allow".
Optional: GitHub Actions APK method (only if matching a dev PC build):
sudo pacman -S --needed github-cli
gh auth login
gh workflow list --repo WiVRn/WiVRn
gh run list --repo WiVRn/WiVRn --workflow "Build" --branch master --limit 10
# pick a RUN id that has apk-Release artifact
set RUN 21321590049
gh run view $RUN --repo WiVRn/WiVRn
gh run download $RUN --repo WiVRn/WiVRn --name apk-Release
unzip -o *.zip
adb install -r *.apkOpen the GUI:
vr-control --guiSelect XR Runtime:
- WiVRn: Quest streaming (no SteamVR)
- SteamVR: Steam Link / legacy OpenVR paths
Start/Stop from GUI or:
systemctl --user start vr-stack-control.service
systemctl --user stop vr-stack-control.service
journalctl --user -fu vr-stack-control.service