/WiVRn

An OpenXR streaming application to a standalone headset

Primary LanguageC++GNU General Public License v3.0GPL-3.0

WiVRn

License: GPL v3 CI Format

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.

Installation

Server (PC)

See building.

Packages are available on AUR for Arch, Guru for Gentoo.

Client (headset)

Prebuilt apk

Download apk from Releases. Install with adb (headset connected to PC), developer mode must be enabled.

adb install WiVRn.apk

Compilation

See building.

Usage

Running

Prerequisites

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.

Running

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!

Notes for OpenVR and Steam

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 that XR_RUNTIME_JSON uses /run/host/usr prefix and that VR_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.

Audio

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

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.

Credits

WiVRn uses the following software: