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.
It supports a wide range of headsets such as Quest 1/2/pro/3, Pico Neo 3/4, HTC Vive Focus 3, HTC Vive XR elite and most other Android based headsets.
See building.
Packages are available on AUR for Arch, Guru for Gentoo.
Download apk from Releases. Install with adb (headset connected to PC), developer mode must be enabled.
adb install WiVRn.apk
See building.
Avahi must be running:
systemctl enable --now avahi-daemon
If a firewall is installed, open port 5353/UDP for avahi. Open ports 9757/UDP+TCP for WiVRn itself.
On the computer, run wivrn-server
, from checkout directory
build-server/server/wivrn-server
Then, on headset, launch WiVRn from the App Library, in "unknown sources" section.
You should now see your server in the list, click connect, screen will show "waiting for video stream". Now on your computer you can run an OpenXR application, and it will show on your headset, enjoy!
WiVRn only provides an OpenXR runtime. For games that use OpenVR, OpenComposite should be used to translate the APIs.
If using Wine/Proton, it will probe for OpenVR at startup, so even for OpenXR applications, OpenComposite is required.
If using Steam, games will be sandboxed by pressure vessel, which is not OpenXR aware yet.
- Files under
/usr
are mapped into/run/host/usr
, if OpenComposite or WiVRn are installed there, make sure thatXR_RUNTIME_JSON
uses/run/host/usr
prefix and thatVR_OVERRIDE
or~/.config/openvr/openvrpaths.vrpath
also uses this configuration. - WiVRn uses a socket to communicate between the application and the server process, this socket needs to be whitelisted as
PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/wivrn_comp_ipc
.
When headset is connected, wivrn-server will create a virtual output device named WiVRn. It is not selected as default and you should either assign the application to the device when it is running, or mark it as default. To do so you can use pavucontrol
or your desktop environment's configuration panel. Please note that in pavucontrol
it will appear as a virtual device.
For microphone, you first have to enable it on the settings tabs on the headset (and give permission when prompted). It will then appear as a virtual input device named WiVRn(microphone) and also needs to be assigned like for output device.
Configuration is done on server side, in $XDG_CONFIG_HOME/wivrn/config.json
or if $XDG_CONFIG_HOME
is not set, $HOME/.config/wivrn/config.json
.
All elements are optional and have default values.
See configuration for configurable items.
WiVRn uses the following software:
- ambientCG
- Avahi
- Boost.Locale
- Boost.PFR
- Dear ImGui
- fastgltf
- ffmpeg optional, for hardware encoding on AMD/Intel
- FreeType
- glm
- HarfBuzz
- Monado
- nvenc optional, for hardware encoding on Nvidia
- sd-bus
- spdlog
- VulkanMemoryAllocator
- WebXR input profiles
- x264 optional, for software encoding