Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,716 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WiVRn

License: GPL v3 CI Format

Fully FOSS PCVR streamer

About

WiVRn is an application that wirelessly streams a virtual reality game to a standalone VR headset from a Linux computer.

WiVRn support a wide range of VR devices:

Headset Supported Notes
Quest 1
Quest 2
Quest 3
Quest 3s
Quest Pro
Pico Neo 3
Pico 4
HTC Vive Focus 3 Laggy
HTC Vive XR Elite Laggy
Samsung Galaxy XR
Other Android VR ? Cannot know
Play for Dream #465
Non-Android VR Not Android
Non-VR Android VR required

A Linux client does exist, only for debugging. It has no audio or hardware decoding.

Getting started

PC Server/Dashboard

We recommend using native packages if available for your distribution:

For OpenVR and Steam compatibility, you also need a compatibility library such as xrizer or OpenComposite.

A Flatpak is available on Flathub for all distributions:

Flathub

The Flatpak contains both xrizer and OpenComposite.

Note that due to Flatpak sandboxing, some features such as support for SteamVR tracked (Lighthouse) devices, or virtual gamepad/keyboard/input devices forwarded from the headset, may not be available.

Headset Client/App

Follow the wizard in the PC dashboard to install the client on your VR headset.

It should either lead you to the Meta Store (for Meta Quest headsets) or to download the correct APK (for other headsets).

Warning

The VR client and PC server need to be on the same version of WiVRn

Tip

If the headset fails to connect to the computer, see troubleshooting.

Usage

Running

Prerequisites

Avahi must be running:

systemctl enable --now avahi-daemon

On SteamOS, the Avahi configuration needs to be modified to allow user services such as WiVRn to publish services on the network; see #1001 (comment) for instructions on how to do so.

  • If a firewall is installed, open port 5353/UDP for Avahi and ports 9757/UDP+TCP for WiVRn.
  • For example, if using UFW run ufw allow 5353/udp and ufw allow 9757.

Start the PC server process

The graphical frontend is listed as "WiVRn server" in the application list, and is wivrn-dashboard on command line. On first start, a wizard will guide you through the initial steps.

The actual server for headless usage is wivrn-server. When installed through your distribution's package manager, a systemd user service named wivrn is also installed, which can be enabled to automatically start on login with systemctl --user enable --now wivrn.

For Steam games, depending on the installation method, you may need to set launch options in the Steam properties for each game you want to run. Either the dashboard or command line output will display the launch command if it is required.

Start the headset application

On the headset, when installed from the store, simply start WiVRn. If you installed the app via the dashboard, or manually via adb, it will be in an "unknown sources" section.

On first start, it will ask if you want to enable some features such as microphone, hand tracking, eye tracking, etc., as they will require permissions to be granted. It is possible to grant those later from the Settings tab.

It is highly recommended to use default settings and only tweak them if you experience issues.

Connect to the server

The headset application will start on a server list. Your computer should be visible and have a connect button. Simply click it to start streaming.

When the headset is connected, wivrn-server sets the OpenXR and OpenVR configuration to use WiVRn. Thus, applications will only be able to run in VR once the headset connection is established. The configuration is reverted once the connection ends and all running VR applications are closed.

The headset connection also triggers the creation of a virtual speaker and, if enabled in the headset app settings, a microphone. You will have to set them as the default output and input devices in your system audio configuration. This setting persists to future sessions until you change the defaults to other devices.

Start an application

When the headset is connected and no XR application is running, it will show an application launcher. Applications in that list are sourced from:

  • Steam games that are flagged as VR. Steam may need to be restarted for the list to be updated when new games are installed.
  • .desktop files that contain X-WiVRn-VR in the Categories section. Files are searched in standard locations which usually include ~/.local/share/applications and /usr/share/applications/.

You can set an application to be started automatically when your headset is connected, in the dashboard settings or manually.

Steam Flatpak

Flatpak applications are only able to access the Flatpak version of WiVRn.

If you're using the Steam Flatpak, you'll need to grant read only access to the following paths:

flatpak override \
  --filesystem=xdg-run/wivrn:ro \
  --filesystem=xdg-data/flatpak/app/io.github.wivrn.wivrn:ro \
  --filesystem=/var/lib/flatpak/app/io.github.wivrn.wivrn:ro \
  --filesystem=xdg-config/openxr:ro \
  --filesystem=xdg-config/openvr:ro \
  com.valvesoftware.Steam

When using a user installation of flatpak Steam, use override --user instead of override.

The same overrides should work for other VR applications distributed as Flatpaks.

Building

See building for building the dashboard, server (PC), and client (headset)

Configuration

Most settings are controlled through the headset app, while the server has configuration for items that are specific to the server. Use the dashboard to edit the latter, or see configuration for editing it manually.

Troubleshooting

My computer is not seen by the headset

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 with systemctl enable --now avahi-daemon
  • If you have a firewall, check that port 5353 (UDP) is open
My headset does not connect to my computer
  • If you have a firewall, check that port 9757 (UDP and TCP) is open
  • The server and client must be the same version.
How do I use a wired connection manually?
  • Make sure the WiVRn Server is installed and running on your computer
  • Make sure you have the WiVRn app installed on your headset
  • After starting the "WiVRn Server" on your computer and ensuring your device is connected to your PC via cable, run the following in your terminal (Note: using adb on some devices may require developer mode to be enabled):
    •  adb reverse tcp:9757 tcp:9757
       adb shell am start -a android.intent.action.VIEW -d "wivrn+tcp://localhost" org.meumeu.wivrn
    • Depending on your install type, you may need to replace org.meumeu.wivrn (Meta Store install) with:
      • org.meumeu.wivrn.github for releases on Github
      • org.meumeu.wivrn.github.nighly for Github nightlies (wirvn-apk repository)
      • org.meumeu.wivrn.github.testing for Github CI builds
      • org.meumeu.wivrn.local for developer builds
  • You can now continue the pairing process as documented in the running section.
How do I see server logs when using the dashboard?
  • Click Troubleshoot > Open server logs
  • Or, navigate to ${XDG_STATE_HOME}/wivrn/wivrn-dashboard
    • In other words, on common setups, the dashboard writes logs to ~/.local/state/wivrn/wivrn-dashboard
    • For WiVRn Flatpak, the dashboard writes logs to ~/.var/app/io.github.wivrn.wivrn/.local/state/wivrn/wivrn-dashboard
My NVIDIA GPU P-State is limited to P2 instead of reaching the highest P0 while using the NVIDIA NVENC encoder
  • See nvenc for troubleshooting.
I have high motion latency, black borders following my view, hear corrupted audio or see a corrupted, pixelated image
  • When connecting through USB, make sure the headset isn't connected through WiFi (switch off WiFi)
  • Reset the settings using the button at the bottom of the settings tab
  • Try switching to software encoding
  • Decrease the bitrate
  • Decrease the resolution in the WiVRn app
  • Connect through USB or use a better WiFi router.

Note: WiVRn isn't properly optimized for NVIDIA GPUs due to the lack of developers with NVIDIA hardware. Motion latency may be significantly worse at rendering resolutions higher than default.

Community Support

We are available on either Discord or Matrix space:

LVRA Discord LVRA Matrix

Please use the wivrn chat room for questions or issues specific to WiVRn.

Contributing

Translations

See translating for procedure.

Credits

WiVRn uses the following software:

About

The Linux OpenXR streaming application to standalone headsets

Topics

Resources

Stars

1.6k stars

Watchers

13 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages