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 / 3S, Pico Neo 3 / 4, HTC Vive Focus 3, HTC Vive XR elite and most other Android based headsets.
We recommend using the flatpak package from Flathub:
Alternatively, packages are available:
Follow the wizard in the dashboard to install the client app on the headset: it will either lead you to the Meta Store or download the correct APK.
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 your computer, run "WiVRn server" application, or
wivrn-dashboard
from the command line, it will show the connection wizard the first time you launch it. - On your headset, run WiVRn from the App Library. If you are using a Quest and you have installed it from an APK instead of the Meta Store, it will be in the "unknown sources" section.
- You should now see your computer in the list: click connect, the screen will show "Connection ready. Start a VR application on your computer's name".
You can now start an OpenXR application on your computer. For Steam games, you will also need to set the launch options to be able to use WiVRn:
- Right-click on the game you want to play in VR in Steam and click "Properties".
- In the "General" tab, set the launch options to the value given in the dashboard.
You can set an application to be started automatically when you connect your headset in the dashboard settings or manually
The flatpak also includes OpenComposite, used to translate the OpenVR API used by SteamVR to OpenXR used by WiVRn, see SteamVR for details.
If using Wine/Proton, it will probe for OpenVR at startup, so even for OpenXR applications, OpenComposite is required.
When you start the server through flatpak, it will automatically configure the current OpenVR to use OpenComposite.
When the headset is connected, WiVRn 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.
See building for building the dashboard, server (PC), and client (headset)
Configuration can be done from the dashboard.
See configuration for editing the configuration manually.
If the server list is empty in the headset app:
- Make sure your computer is connected on the same network as your headset
- Check that avahi is running with
systemctl status avahi-daemon
, if it is not, enable it withsystemctl enable --now avahi-daemon
- If you have a firewall, check that port 5353 (UDP) is open
- If you have a firewall, check that port 9757 (UDP and TCP) is open
- The server and client must be compatible:
WiVRn uses the following software:
- ambientCG
- Avahi
- Boost.Locale
- Boost.PFR
- CLI11
- Dear ImGui
- fastgltf
- ffmpeg optional, for hardware encoding on AMD/Intel
- FreeType
- glm
- HarfBuzz
- Monado
- nvenc optional, for hardware encoding on Nvidia
- Qt 6 optional, for the dashboard
- spdlog
- VulkanMemoryAllocator
- WebXR input profiles
- x264 optional, for software encoding