WiVRn #
WiVRn wirelessly connects a standalone VR headset to a Linux computer. You can then play PCVR games on the headset while processing is done on the computer.
WiVRn is based on Monado and can be used with OpenComposite to support a majority of titles available for SteamVR. A wide range of standalone headsets are supported.
Installing WiVRn #
We recommend using Envision to install and launch WiVRn & OpenComposite. Envision will handle all configuration seamlessly and avoids many of the pitfalls of a manual setup.
Alternatively, you can use the WiVRn Flatpak which includes OpenComposite as part of it. Processes in Flatpak cannot take advantage of setcap, and so your performance may suffer when compared to Envision.
General WiVRn Notes #
WiVRn uses Avahi for network discovery. Ensure it is running with the following terminal command:
systemctl enable --now avahi-daemon
(If Avahi is not available, the IP address of the server must be entered into the client.)
If a firewall is installed, make sure ports 5353/UDP and 9757/UDP+TCP are open for Avahi and WiVRn itself, respectively.
If using Nvidia proprietary drivers older than 565, install the Monado Vulkan Layers, otherwise games will crash with a segmentation fault.
For audio in WiVRn, you will need to assign applications, or the system as a whole, to output audio to the virtual output “WiVRn” which is created upon connection between the server and the headset.
It is possible to use WiVRn Flatpak with Steam Flatpak, though Steam Flatpak isn’t generally recommended for VR. If you are using Steam Flatpak, you just need to grant it access to the relevant paths:
flatpak override --user --filesystem=xdg-config/openxr:ro com.valvesoftware.Steam
flatpak override --user --filesystem=xdg-config/openvr:ro com.valvesoftware.Steam
flatpak override --user --filesystem=xdg-run/wivrn com.valvesoftware.Steam
flatpak override --user --filesystem=/var/lib/flatpak/app/io.github.wivrn.wivrn:ro com.valvesoftware.Steam
As an added bonus to the above, this command will save you the effort of having to set launch options for every single VR game in your Steam library:
flatpak override --user --env=PRESSURE_VESSEL_FILESYSTEMS_RW=/run/user/1000/wivrn/comp_ipc:/var/lib/flatpak/app/io.github.wivrn.wivrn com.valvesoftware.Steam
Wired WiVRn #
You can use WiVRn with a cable instead of Wi-Fi. Use a 5Gbps cable & port at the very least.
WiVRn version: 0.19+
Using Envision:
- Connect the headset via USB.
- In Envision, click the
Start WiVRn Client (Wired)
button.- If it’s not there, you may need to update Envision.
Manual steps:
- Connect the headset via USB.
- If WiVRn is running on the headset, close it now.
- While in the system lobby of the headset, run the following
adb
commands on the PC:adb reverse tcp:9757 tcp:9757 adb shell am start -a android.intent.action.VIEW -d "wivrn+tcp://127.0.0.1" org.meumeu.wivrn
WiVRn + SlimeVR trackers #
To use SlimeVR trackers through WiVRn, you currently must use a fork of WiVRn:
Usage with Envision #
To use this fork within Envision, edit these fields in your profile:
- XR Service Repo:
https://github.com/notpeelz/WiVRn.git
- XR Service Branch:
solarxr-patches
Then save and clean build the profile.
NixOS setup #
Override the wivrn
package from nixpkgs with something resembling the following, replacing [COMMIT HASH HERE]
with the latest commit hash from https://github.com/notpeelz/WiVRn/commits/solarxr-patches and filling in the correct src hash. Do note you may need to adapt this depending on how you install WiVRn:
{ pkgs, lib, ... }:
{
services.wivrn = {
enable = true;
defaultRuntime = true;
package = pkgs.wivrn.overrideAttrs (old: rec {
version = "[COMMIT HASH HERE]";
src = lib.fetchFromGitHub {
owner = "notpeelz";
repo = "WiVRn";
rev = version;
# This will throw an error when evaluating and give you the correct hash - put that here
hash = "";
};
cmakeFlags = old.cmakeFlags ++ [
(lib.cmakeBool "WIVRN_FEATURE_SOLARXR" true)
];
});
};
}
WiVRn + Lighthouse driver #
This section covers using WiVRn 0.19 and newer with any Lighthouse-tracked device (such as Index/Vive controllers, Vive/Tundra trackers, etc.)
You must have SteamVR installed (no need to run it).
Envision #
Set WiVRn Profile as such:
- XR Service CMake Flags:
WIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON
- Environment Variables:
WIVRN_USE_STEAMVR_LH=1
LH_DISCOVER_WAIT_MS=6000
Perform a Clean Build after changing the CMake flags!
NixOS #
Override the wivrn
package and launch wivrn-server with the required environment variables:
{
services.wivrn = {
enable = true;
defaultRuntime = true;
package = pkgs.wivrn.overrideAttrs (old: {
cmakeFlags = old.cmakeFlags ++ [
(lib.cmakeBool "WIVRN_FEATURE_STEAMVR_LIGHTHOUSE" true)
];
});
monadoEnvironment = {
WIVRN_USE_STEAMVR_LH = "1";
LH_DISCOVER_WAIT_MS = "6000";
};
};
}
Manual #
Simply pass -DWIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON
to CMake and export the above environment variables before starting wivrn-server
.
Usage tips #
Discovery happens only on first connection, so be sure to have all Lighthouse devices powered on and in line-of-sight of your base stations before connecting the headset! Once a device is discovered, you may power it off and on at-will.
You can use Motoc to calibrate the two tracking technologies to work together.
Once video appears in the headset, check motoc monitor
to make sure your devices all show up.
If one or more devices are missing, try:
- Spread the devices out more; Lighthouse devices get discovered quicker if they’re not piled up on each other. Simply strapping them on is good, too.
- Increase
LH_DISCOVER_WAIT_MS
, though this delays the client on first connection.
To re-discover devices, restart WiVRn server.
At this point, your Lighthouse devices will be randomly floating about somewhere. To calibrate them, follow the guide in the Motoc README.