Please carefully read everything, especially the requirements and compromises sections, it will save you a lot of headaches and frustration.
Please also note this guide is based upon my own experiences, testing, and opinions and is by no means a comprehensive guide to everything VR or Linux!!! I am simply sharing my advice based on my own testing!!!
The best way I have found to play with standalone VR headsets in Linux is by using WiVRn.
WiVRn is a solution similar to ALVR, Air Link, and Virtual Desktop Standalone, all providing a wireless solution to VR gaming. ALVR supports both Microsoft Windows and Linux, while both Air Link and Virtual Desktop Standalone both only support Microsoft Windows.
WiVRn supports both wired (via USB) and fully wireless play, but this guide only covers wireless VR, as I personally have not tried a Link Cable before.
I fully consider standalone wireless VR as fully stable for regular everyday use, assuming all of the following requirements are met.
-
Basic knowledge of Linux and terminal/command line.
- Not everything can be done with a GUI, and some terminal usage will be needed
- Basic knowledge of terminal and how to solve issues yourself will go a long way, especially if something goes wrong.
- Ability to search for help and answers on your own via Google/Reddit.
- Understanding the importance of finding and following relevant documentation.
-
A headset that is supported by WiVRn.
- WiVRn supports the following headsets for wireless play:
- Quest 2, Quest 3, Quest 3S, Quest Pro, Pico Neo 4, HTC Vive Focus 3, and HTC Vive XR Elite
- WiVRn supports the following headsets for wireless play:
-
A decent WiFi 5 or newer (AC, AX) network.
- WiVRn requires a decent wireless and wired network with little to no interference. I have tested WiVRn on both AC and AX networks. I highly recommend a dedicated router in AP (access point) mode directly connected to your computer via wired ethernet to greatly improve the experience.
- There is a wired USB mode for WiVRn, but I have not tested it myself, so it is not covered by this guide.
- WiVRn requires a decent wireless and wired network with little to no interference. I have tested WiVRn on both AC and AX networks. I highly recommend a dedicated router in AP (access point) mode directly connected to your computer via wired ethernet to greatly improve the experience.
-
Wired Gigabit connection between computer and router.
- Latency and quality will both have issues if you try using any form of wireless/hotspot to connect your computer to your router. Other solutions like Air Link, ALVR, and Virtual Desktop also REQUIRE a wired GIGABIT connection from the computer to the router, and so does this guide. YOU MUST HAVE WIRED ETHERNET FROM YOUR COMPUTER TO YOUR ROUTER!!! Use of wireless hotspots is NOT SUPPORTED under any circumstances.
-
A stable network.
-
A correctly configured ethernet and WiFI network, as well as no wireless interference is essential for a good wireless VR experience. See the [Advanced Network Testing](#Advanced Network Testing) subsection in the Troubleshooting section for information on how to fully test your local network.
- NOTE: Your internet speed DOES NOT matter for wireless VR -- but your LAN speed does! This includes both your wired and wireless network, as well as your networking card and cables. All of these things need to be working correctly.
-
-
Linux kernel version 6.15 or newer.
-
A proton branch that supports ntsync, such as Proton-GE or cachyos-proton.
-
Stable hardware, software, and network. Many VR issues can be tracked down to being unrelated to the VR hardware or software. Ensure your system is up to snuff before attempting to run VR in Linux.
-
A fully functioning Steam installation.
WiVRn has several limitations compared to other streaming solutions, especially those that utilize Microsoft Windows. Before deciding if this guide is for you, be aware of the following limitations:
-
No spacewarp/motion smoothing.
- Currently no form exists for Linux that I personally know of. If you run older/weaker hardware and are already heavily dependent on frame gen to provide stable frame rates in VR, be aware that your FPS will be cut in HALF by moving to Linux due to lack of any motion smoothing. You can compensate by lowering your streaming resolution, but it will result in a loss of quality otherwise.
-
Time investment:
- Expect some extra troubleshooting and setup, as per this guide. Knowledge is key, and although the switch from Windows to Linux seems daunting, it just takes learning and practice like with anything. This guide should help you on your journey, and make things far more painless for you.
NOTE: this section is based on my own recommendations, experiences, and testing. There are as many Linux distributions as stars in the night sky, so this is not a comprehensive list.
I have personally tested VR in both Bazzite, CachyOS and PikaOS.
NOTE: I have only tested on the following distibutions, but that does not mean the following software in this guide won't work on other distros. I make this guide in free time and can only cover a limited number of distros.
Bazzite is an semi-immutable distro by universal blue based on Fedora Atomic. A highly simplified distro, it is mainly designed for ease of use and is very beginner friendly. Mainly uses Flatpak for applications which can easily be installed via the Bazaar app store. The system is much more locked down that traditional distros, and it is mainly geared towards HTPC setups with controllers. Also has builds for handhelds like the SteamDeck.
CachyOS is a traditional rolling release distribution based on Arch Linux. CachyOS has gained a lot of momentum the past year, and recently reached #1 most popular distro on Distrowatch. Features the complexity and flexibility that Arch offers, but simplifies a lot of the setup and comes with tons of tweaks specific to newer hardware, as well as a great GUI installer. Features x86_64-v3 optimized packages for newer CPUs as optional choice during installation.
PikaOS is a fairly new rolling release distro based on Debian. Unlike Bazzite, PikaOS is a traditional distro that doesn't lock down the system. Features tons of gaming related tweaks like CachyOS, but requires more modern CPUs that support x86_64-v3. A stable base with updated applications thanks to custom packages and Flatpaks, PikaOS uses Discover as it's app store. Similar to Bazaar that Bazzite uses, Discover is much more mature and features full category sorting. NOTE: PikaOS is a newer distro that hasn't matured as much as the others. It also features an older kernel and modules, and may cause issues. For me, I had repeated USB resets with my 10 port powered USB hub, even though no other distros had this issue.
Choosing a linux distribution can be a difficult choice for many reasons. I will only list distributions that I have personally extensively tested myself.
The following table list these distros, their required "skill levels", and links to the relevant documentation to help you make an informed choice. Note these are recommendations. If in doubt which to use, just use Bazzite, it is by quite a large margin the easiest to setup and use.
| Distribution | Distro Type | Based On | Skill Level | Wiki Link |
|---|---|---|---|---|
| Bazzite | Immutable | Fedora Atomic | Beginner | Bazzite Docs |
| PikaOS | Traditional | Debian | Beginner/Intermediate | PikaOS Wiki |
| CachyOS | Traditional | Arch Linux | Intermediate/Advanced | CachyOS Wiki |
Bazzite is best served as a HTPC hooked up to a large TV with Steam Big Picture mode and also has images made for the Steam Deck and other handhelds, but also has a standard desktop image featuring KDE Plasma. It's desktop experience is very good, and fully usable on desktops as an everyday operating systems. Bazzite has SELinux enabled by default, and with some post-installaton tweaking it also fully supports Secure Boot and TPM auto-unlock for LUKS encrypted root volumes.
CachyOS is hailed for it's flexibility, speed, and availability of most software due to the Arch User Repository. CachyOS is also a traditional distro that uses native system packages. I wouldn't recommend CachyOS to novice computer users who are new to Linux. Expect things to work out of the box, but if you want to tweak it you need to learn to ready CachyOS and ArchWiki documentation in detail or you will run into issues.
CachyOS has optimized packages for newer AMD Zen processors which can give certain gains in code compilation and gaming, although these are usually almost always single-digit performance improvements.
The AUR also can be very dangerous if you do not fully check and understand PKGBUILDs as they should personally checked and validated by you for each package you want. The AUR can be an avenue for malware, so package sources should be careful understood and vetted by the user.
The CachyOS Wiki is the best place to learn more about CachyOS and should always be your first stop for more information and should be followed when installing and setting up CachyOS. The ArchWiki is also a great second resource even for CachyOS as they share the same base.
PikaOS is still a fairly new distro without a well known proven track record, but has a lot of potential. Very beginner friendly like Bazzite, but features similar performance and tweaks like CachyOS on a stable Debian base, this is a very good distro. This is a good choice if you are familiar with Debian and prefer having a very stable base. Note that because it is based on Debian, certain packages related to your desktop environment will be slightly more out of date compared to the other distros.
LACT, or the "Linux GPU Control Application", does just what it's name suggests. For AMD GPU users, it's very important to properly set the correct power profile when running WiVRn. Without this being set to the "VR" power profile while playing, AMD GPUs try to save some power in between frames, but this can result in motion sickness due to frame jitter, especially when in GPU limited scenarios like VR gaming. The program also works for other GPU brands, but the VR power profile issue only applies to AMD cards.
In Bazzite, LACT's flatpak can easily be installed via the Bazaar App Store. Once installed, open the application and follow the graphical prompts to setup the LACT GPU control daemon. Enter your password if prompted.
In CachyOS, install LACT using:
paru -S lact
Then enable the LACT GPU control daemon:
systemctl enable --now lactd.service
In PikaOS, install LACT using the Discover App Store, then follow the graphical prompts to setup the LACT GPU control daemon. Enter your password if prompted.
With LACT installed on your system, open it and the main screen should have a notice at the top to enable the overclocking features. This MUST be done to enable you to control power profiles, and also unlocks custom fan curves and overclocking if needed. A reboot will be required afterwards to enable these features.
As each GPU is different, the actual setup of fan curves and overclocking will not be covered in this guide. It is important that LACT be properly setup for your GPU, especially your boost clocks and power level must be set correctly. If unsure, try to look up your exact GPU model on the internet. Techpowerup has a great library of GPU spec pages that can be easily found by pasting your full "Card Model" and "VBIOS Version" from the "Information" tab in LACT into your web search.
Once LACT has been fully setup and overclocking has been enabled, open up the main GUI. You will click on your GPU in the top left of the application to view profiles, which are not enabled by default.
The "Default" profile is the fallback profile when no matching settings are found. Use the "+" button to create a new profile and name it "WiVRn" or a similar name. Then set the "Performance Level" under the "OC" tab to "Manual", then directly below that set "Power Profile Mode" to "VR". Make sure you only set the VR profile with the "WiVRn VR" profile selected.
Now, using the top left menu, click the hamburger menu next to the new "WiVRn VR" profile that was just created and select "Edit Rules".
Following the above image, you want to make this profile automatically load whenever the "wivrn-server" process is running. This will make the VR power profile load automatically when the server is running on your desktop, then change back to the Default profile after it is closed.
To enable automatic profile switching, you must select the top left menu in LACT again and make sure "Switch automatically" is checked. At this point if everything was done correctly, you should be able to leave LACT open on your desktop and open up the WiVRn dashboard and the profile in the top left of LACT will change from "Default" to "WiVRn VR". You can also check to see that the VR profile is loaded correctly under the "Performance" section of the "OC" tab. Simply closing out of the WiVRn dashboard should make it switch back to the Default profile.
The LACT GUI does not need to be open for profile switching to work, and can be closed at this point, you shouldn't need it going forward unless you want to change settings or fan curves.
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. Mainly for Meta Quest headsets, but also supports a number of Pico headsets.
The installation method for WiVRn will vary depending on your distro of choice.
Search for "WiVRn" in your package manager of choice (Bazaar on Bazzite or Discover on PikaOS) and install the Flatpak just as you would have for LACT.
If you are on CachyOS, you can use the following command to use paru to install it from Arch User Repository:
paru -S wivrn-dashboard
Go ahead and launch WiVRn via your application launcher if you have not already.
You will first be greeted by the setup wizard. For this guide, you can skip the wizard completely by clicking through it and accepting all defaults until you get to the main page:
Note the two sliders:
-
Running:
- If this is toggled off, WiVRn will not run or accept connections from any headsets. You should always leave this toggled on.
- Note: The WiVRn dashboard MUST be open on your desktop or the server will not be running or accept new connections. Completely closing the WiVRn dashboard completely shuts it down entirely.
- You can hide the WiVRn dashboard while it is running but clicking the tray icon once. Minimizing or closing to tray isn't supported at this time.
- If this is toggled off, WiVRn will not run or accept connections from any headsets. You should always leave this toggled on.
-
Pairing:
- Enabled by default, the pairing slider allows headsets to be paired to your computer.
First, let’s set up WiVRn optimally for streaming quality and performance. Go ahead and click the “Settings” button in the top right of the WiVRn dashboard.
You should now see this page:
Note the following settings:
-
Encoder:
- Use the following tables to determine what is best based on your GPU.
-
Quest 2 | Quest Pro | Pico Neo 4 | HTC Vive Focus 3 | HTC Vive XR Elite:
| GPU | Encoder | Codec |
|---|---|---|
| AMD | vaapi | H265 |
| NVIDIA | nvenc | H265 |
NOTE: Above headsets do not support AV1 decoding, even if your GPU supports it, so use H265 instead.
- Quest 3, Quest 3S
| GPU | Encoder | Codec |
|---|---|---|
| AMD | vaapi | AV1 |
| NVIDIA | nvenc | AV1 |
NOTE: On newer kernel and mesa versions (Like in Bazzite), using Vulkan instead of Vaapi is prefered but can have issues with older hardware. Try vulkan and if you still struggle with latency, using vaapi as an alternative fallback option. I myself have no issues running vulkan on my 7800 XT with at least the 6.17 kernel and Mesa 25.3.4.
If your GPU hardware doesn't support AV1, use H265 as fallback instead.
You can try switching your codec to h.264 to get a reduction in latency, but note that you may see more banding in gradients if you do so. (This is true even on 8 bit displays!)
I personally set mine as seen in the image above for my AMD GPU to ensure I am always using vulkan as it is more supported going forward and now also supports realtime bitrate switching in WiVRn.
- Autostart application:
This allows you to launch a specific game or application once WiVRn has successfully connected to your computer. This is very useful, for instance when setting up WayVR as covered in the later part of the guide.
- OpenVR compatibility library:
One of the major advantages to using the WiVRn flatpak is that it already comes bundled with xrizer, which will allow you to play certain games that normally require OpenVR/Steam VR such as Half Life:Alyx in OpenXR instead, completely removing the need for Steam VR to even be installed.
For Meta Quest headsets, simply install the WiVRn app from the Meta Quest store on your headset.
For others, you must download the APK and sideload it manually. The latest APK can be found on the GitHub releases page for WiVRn.
Once the app is installed, open it on your headset. You will be greeted by a simple UI. By default, camera passthrough will be enabled on headsets that support it.
Go ahead and click on your computer using the green “Connect” button. Make sure that the dashboard is open and running on your computer, and that your headset is connected to the same network.
You need to enter your pin PIN listed on the WiVRn dashboard the first time you connect to verify the connection.
Sometimes the code will time out as pairing mode disables after a few minutes for security. Move the pairing slider in WiVRn over to the right by clicking on it to re-enable pairing, or fully restart WiVRn on your computer and try again.
Please also note that your firewall may block connections to your PC. Refer to the WiVRn GitHub page for instructions on what ports to allow.
Once connected to your computer, you should see a message stating it was successful like so:
At this point, WiVRn is connected to your computer and is waiting for a game to start. By default, there is no way to control your Linux desktop or launch games from within the headset itself, but we will address this shortcoming later in the guide.
Now click the blue “disconnect” button as we need to change some settings in the app directly for the best experience. Many such settings can only be changed while you are disconnected from your computer.
Select the settings page on the left side of the panel in front of you.
-
Language:
- You can easily change the language of the UI to that of your choice here.
-
Refresh Rate:
- I recommend only using at max the 90 Hz refresh rate on battery powered headsets. 120 Hz will heat up your headset SOC and battery, and decrease your overall internal battery lifespan vs 90 Hz, as well as reduce battery life by around 25%. At 90hz, you will have to keep your CPU and GPU frametimes under 11.1ms in order to prevent issues.
-
Resolution resolution:
- By default, WiVRn runs games at 140% resolution.
- The extra 40% accounts for barrel distortion. Note that this article applies to all modern headsets, not just Rift as the documents suggests.
- If you have a weaker GPU, you can turn this slider down to improve performance, which will result in a loss of image clarity. Note that turning the slider down will decrease the resolution and clarity in the center of the display first -- the lower the resolution slider is, the bigger the circle with a lower resolution will become.
- By default, WiVRn runs games at 140% resolution.
-
Stream resolution:
- Newer versions of WiVRn send the stream resolution at 50% by default, which adjusts the foveated encoding that WiVRn uses. When set to 100%, you can disable foveation entirely for the highest picture quality. Turning this slider up will require more GPU power depending on how intensive of a game you play is. Adjust accordingly and try to strike a balance between image quality and performance.
-
Codec:
- H.265 is preferred over H.264 as it will result in a smaller encoded video size while streaming, and also allow for checking "10-bit" to show less color banding it the image, as well as more striking dark scenes. H256 generally adds about 3ms of extra latency during the encoding process, but this trade off is worth it for the higher quality image and less banding.
-
Bitrate:
- WiVRn should be able to support the full 200Mbit/s bitrate on good WiFi networks with little interference. The quality difference is only noticeable at sub 80Mbit/s bitrates. NOTE When using VAAPI hardware acceleration, you have to fully restart the headset app and server on PC to change it.
-
High power mode
- Useful for getting high quality recordings in headset, but will drain your battery faster and also force the GPU to a higher clock rate. This can cause massive stuttering and headset issues if it overheats, so I recommend leaving this unchecked, especially if you record on your desktop instead.
-
Enable microphone:
- Enable this to allow the in-headset microphone to pass through to your computer. You will get a prompt from the headset asking to enable microphone permissions, and you must accept them for microphone passthrough to work.
-
Show performance metrics:
Enable quality supersampling when running the default 140% resolution. If you turn the slider down to a resolution lower than your headsets resolution, you would turn supersampling off and use quality sharpening instead.
The recommended proton version will vary depending on your distro of choice, and also on the specific game you want to play.
There are many resources you can use to check game compatibility and determine the best Proton version to use for a specific game or distro.
-
ProtonDB is a crowd sourced compatibility list for games on Proton in Linux. You can simply search for your game on the site. Use the filter options on the site to search for similar hardware specs to yours, and even sort reports by distro. A great resource for determining relevant Proton versions or launch parameters needed to get your games working. You can also easily submit your own reports to help out the community!
-
A great resource for checking if your online/multiplayer game supports Linux. Certain games, particularly those with kernel level anti-cheat don't support Linux and may even ban you for attempting to play. Note that using kernel level anti-cheat even in Microsoft Windows can have various possible privacy, security, stability, and performance drawbacks, and it's highly unlikely such level of access will ever be adopted into Linux because of these issues due to the ethical and security concerns of such wide access.
-
A community-driven effort to provide an open database that helps users determine which VR games are compatible with Linux and potentially discover solutions or workarounds for specific issues.
- Proton-GEProton-GE is a very popular version of Proton that is not associated with Valve or Steam. Created and maintained by Thomas Crider, aka GloriousEggroll, this version has lots of tweaks and improvements over the default proton versions, and also has ntsync support enabled in it's latest versions.
- Install: Open up ProtonPlus from your application launcher (installed by default).
Click on “Proton-GE” listed at the top of the page in ProtonPlus.
Click on the download icon next to "Proton-GE Latest" and wait for it to download. If you run into issues with games on this latest version, try the next one down on the list (GE-Proton10-10 in the example image).
There are tons of other Proton versions you can try, but I personally have never needed to use any others. Some work better on much older GPUs or help for running much older games.
There are two custom proton versions that come bundled with CachyOS.
-
proton-cachyos - based on Proton bleeding-edge, this is a custom Proton version that uses native libraries and has a ton of tweaks. This is best installed along with Steam and other dependencies using the CachyOS Wiki instructions.
-
proton-cachyos-slr - a version of Proton that supports both Easy Anti-Cheat (EAC) and BattlEye (BE) anti-cheats in games. If a game you play uses either of these, make sure to install the package "proton-cachyos-slr" and manually enable it for each game that needs it. Without this proton version you risk being kicked from servers or having connection issues.
You can easily install both of these versions of Proton in CachyOS with the following command:
paru -S cachyos-gaming-meta proton-cachyos-slr
This has the advantage of integrating updates to these Proton versions with your regular system updates, simplifying upgrades.
In addition to these CachyOS specific versions, you can also easily install ProtonPlus and also use Proton-GE if that version gives you better supports for certain games.
Ntsync is now enabled by default when using Proton-GE, and no user input is needed to get it work.
To check if ntsync is working, simply launch a game using Proton-GE and use lsof from the terminal:
lsof /dev/ntsync
This will print out any processes using ntsync at the time of running. It should list various steam processes, including your game executable.
Note that this only means ntsync is enabled with your game. Most games will work fine with ntsync and may receive various performance benefits that come with it, but for some games it may cause issues. Perform your own testing to determine if it is worth using, especially if the game isn't covered in ProtonDB well. NOTE If you run into issues with Proton-GE, always try the latest stable official proton version.
Now, go ahead and reconnect WiVRn to your computer. It should say connected and is now waiting for you to start a game.
By default, WiVRn will configure the streaming audio devices on your computer, but both the output and input audio streams for WiVRn should be selected by you on your desktop.
You can do this by left clicking on the audio icon in your tray and selecting WiVRn as both default output and input devices while connected.
These should auto connect in the future when you connect, and only need to be selected the first time. The output will send your audio from your computer to your headset, and the input will send the Quest headset's microphone back to your computer for the game to use.
If you use a different audio device like a separate headset, just select those audio devices instead.
If selecting the audio device doesn't seem to "save" your prefered outputs, you can install "pavucontrol" from Bazaar. Use that application to setup your default audio devices before, during, and after headset connection, then your system should "remember" your default devices going forward.
At this point, it is a good idea to just launch a VR game and see how the it runs before playing with mods or tweaks. You can either run the game from Steam on you monitor or use the following .
If the game starts on your desktop but doesn’t connect to the headset, try fully re-booting WiVRn and Steam. Sometimes it also takes a full reboot of the headset and computer to make things work.
You way tweak the WiVRn dashboard settings as discussed previously. Try increasing or lowering the bitrate as needed.
If you still have quality or stream corruption issues, especially if having to drop the bitrate down to 50 MBit/s or lower, then suspect a faulty hardware or software install, or network quality issues.
Once your game is running, get to a good stop where you can pause the game, or stay at the main menu. All that matters at this point is the game is putting some GPU load on your system, and that your actually running a VR application.
Once connected to your PC, some of the interface within WiVRn will change. You can pull up the WiVRn user interface at any time by pushing down both thumbsticks at the time on each of your VR controllers.
You should then see the following menu show up. Note that it can be grabbed by pointing your controller at it and holding grip to move it around in 3D space.
The default tab is the "Applications" tab. This shows your running VR apps, as well as any overlays, and easily allows you to kill any of them with the red X on the right side.
The next tab is "Start".
The start tab detects any Steam games that you can start streaming without having to use your physical mouse and keyboard. Note that this normally only shows Steam games, and will launch them using the normal options, so not all games work out of the box.
The next tab is "Settings", and this is where you can tweak more.
Note that this settings page is different from the previous one that shows up before you connnect to your PC.
The options are:
-
Refresh rate: This allows you to easily change your refresh rate while in game. Useful for lowing the refresh rate in more intense games.
-
Bitrate: You can click this button to change your bitrate in real time. The overlay should change to the following:
You may now more your right joystick up and down to adjust the VR bitrate in real time and actively see the quality changes. When done, click "A" on your right controller to return to the previous screen. NOTE When using VAAPI the dynamic adjustment does not work. In order to change bitrate, make your changes and fully restart both the headset app and server on PC.
-
OpenXR post-processing: We setup these options previously, and they don't need any adjustment.
-
Foveation center override: You shouldn't need to change this unless your headset is very new or unsupported by WiVRn.
Next is the "Stats" tab.
The Stats page is very important and allows you to understand your CPU and GPU frametimes, your network conditions, as well as encoder timings which are often split into multiple encoders, which is why there are multiple timing graphs.
The graphs will be broken down more in the next page.
- CPU and GPU frame times: At 90hz, you want both of these to remain under 11.1ms. Any spikes above that will result is missing or discarded frames to the headset, and in high motion games you might get sick while playing VR. NOTE In my images, the screenshot shows higher frame times because of the Quest 2 native screenshot function causes a short pause in the display, throwing off timing from WiVRn.
The next two tabs titled "Statistics overlay" and "Compact view" are both static overlays that will display over your current game.
The "Statistics overlay" tab is the same as the previous "Stats" page -- but this time in an overlay instead of a tab.
Here are some details about the relevant graphs.
-
CPU time: Shows your current CPU frame time processing in milliseconds (ms). A value greater than 11.1ms would indicate a CPU bottleneck, memory, or driver issue.
-
GPU time: Shows your current GPU frame time processing in millisceonds (ms). A value greater than 11.1ms would indicate a GPU or PCI-E lane bottleneck.
-
Network: This shows your related network bandwidth being used. Note that the usage depends on many factors including the encoder and how much movement and detail is in a scene. In the above screenshot, I can see the Network graph averages around 120Mbit/s, even with my encoder set to 200Mbit/s as I am not moving my head and it's mostly a static scene in the background with a bit of movement. What you don't want to see in this graph are huge spikes or drops constantly -- that would indicate a network issue.
-
Timings: These show the various steps in the encoding, processing, and decoding phases. WiVRn calculates the full chain, so anything below 100ms should be okay for fast VR movement, with 80ms or lower considered very good. NOTE 20ms is the "actual" maximum motion to photon latency in reality to prevent motion sickness, but WiVRn is measuring the entire chain GPU chain, resulting in a much higher number here.
As this page says at the bottom, press both thumbsticks down to close the overlay and return to the normal menu.
The "Compact view" is the simplest overlay in terms of determining your performance at a glance.
-
Download: The download rate in Mbit/s from your computer to your headset in realtime.
-
Upload: The upload rate in MBit/s from your headset to your computer in realtime. This includes motion tracking data from your headset and microphone if enabled.
-
CPU and GPU time: Both should be below 11.1ms at 90hz. Lower values for GPU frame times indicate you may have some headroom to raise the resolution.
-
Motion to photon latency: This value should remain between 80-100ms in WiVRn for optimal gameplay. Lower values are ALWAYS better.
Finally, there is a "Close" tab that will simple close out the overlay and allow you to return to game (you can also just use the thumbsticks to close it any time).
The "Disconnect" button can be used to close your connection to your computer, which is useful if you have multiple computers in the same network you want to connect to.
WayVR is a VR overlay for Linux that allows you to fully control your desktop from within VR, similar to how overlays such as xsoverlay or OVR Toolkit work in SteamVR on Windows.
You will be able to fully control your PC monitors, type on a virtual keyboard, listen to music, watch videos, and use your web browser in your headset.
Installing WayVR will vary depending on your distro of choice. Due to my limited ability to test other distros, I will only cover using the WayVR appimage in Bazzite for this guide.
Simply download the latest appimage from the GitHub releases page for WayVR listed above.
Once downloaded, install the appimage with Gear Lever.
For other distros, check your package manager or download WayVR from the releases manually.
Also make sure to set your virtual keyboard in KDE settings to "Fcitx 5" so that keyboard inputs from the virutal keyboard in WayVR work correctly. This can be found under "Keyboard" > "Virtual Keyboard" in KDE settings.
You can automatically set WayVR to run automatically once your headset connects to WiVRn.
Go to the main WiVRn dashboard page and click the settings button.
Notice the "Application" field on this page -- simply select "WayVR" from the dropdown to enable WayVR to autostart when your headset connects.
I recommend fully reading the GitHub page when you have the time. You can customize your controller bindings, disable the quest pass-through, disable space move, and even set a custom texture background for your environment. All the info is already located at the WayVR GitHub Wiki page. I won't cover these in the guide as the information is already listed there, and much of the setup is specific to each user's preferences.
Certain games on Steam, like Half-Life: Alyx are dependent upon Valve's own SteamVR. SteamVR actually uses OpenVR under the hood as it's default programming interface and runtime.
SteamVR runs fairly poorly in Linux on newer Proton versions, and most of the time it won't even run at all.
xrizer is a re-implementation of OpenVR on top of OpenXR. This enables WiVRn to run supported OpenVR games through any OpenXR runtime without running SteamVR.
It's very simple to download and add as the default OpenVR compatibility library in WiVRn, meaning games that normal frequently require OpenVR/SteamVR can be ran directly without the use of SteamVR!
- xrizer is a rewrite of OpenComposite. xrizer is considered immature at this time, but currently enables support for games that OpenComposite struggles with, such as Half-Life: Alyx.
- To learn more about why xrizer exists, visit Why rewrite OpenComposite? over at the xrizer GitHub page.
Installing xrizer is only needed on CachyOS. In both Bazzite and PikaOS, it is bundled with the WiVRn flatpak and only need to be enabled in the settings.
Install xrizer with paru:
paru -S xrizer
Setting xrizer to run with WiVRn is very simple. In the WiVRn dashboard settings, scroll down to the very bottom of the page and set the "OpenVR compatibility library" to "xrizer".
The only SteamVR/OpenVR game I have fully tested is Half-Life: Alyx. I find that the game runs far better in WiVRn with xrizer than it does in SteamVR in Windows ever did for me.
Headset: Meta Quest 2
CPU: Ryzen 7 7800X3D
GPU: Sapphire Nitro+ 7800 XT 16GB
MEM: G.SKILL 2x16GB DDR5 6000 MT/s
MOBO: GIGABYTE x670 Aorus Elite AX on F35 Bios
NVMe: Samsung 980 Pro 2TB
PSU: Corsair RM750
Router: Asus RT AX-3000 (can be bought on Amazon for around $80 USD.
Kernel: 6.17.7-ba22.fc43.x86_64 (64-bit)
DE: KDE Plasma 6.5.4
Mesa: 25.3.1
Proton: Proton-GE Latest
Kernel: Linux 6.19.6-2-cachyos
DE: KDE Plasma 6.6.2
Mesa: 26.0.1
Proton: proton-cachyos-slr
Kernel: Kernel Version: 6.16.3-pikaos
DE: KDE Plasma 6.3.6
Mesa: 25.1.7
Proton: Proton-GE10-15 and Proton-GE Latest
The follow games have been extensively tested on the previously listed hardware and software by me personally. I have included the exact launch parameters I use in Steam.
VTOL VR requires ntsync to run correctly, and enabling it is done the same as any regular flatscreen game -- by added the correct variable to the launch parameters of the game in Steam.
NOTE: These values are examples. Make sure you check WiVRn dashboard's main page for the relevant launch parameters to ensure WiVRn can connect to your games correctly. The values below are examples from my own installation and yours may vary.
- Vanilla Gameplay:
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn/x86_64/stable/68d7958a1999e2762b7d8d36140035b8d7286580b8f0f0c2db4ac0596891f213/files/xrizer %command%
VTOL VR has has unofficial mod loader available on Steam. Many mods hosted on the Steam workshop page for the mod loader do work in multiplayer. Install the free mod loader from steam and search it's workshop for mods. Once downloaded, run the mod loader and enable mods on an individual basis using the rocketship icon in the application.
- With Mod Loader:
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn/x86_64/stable/68d7958a1999e2762b7d8d36140035b8d7286580b8f0f0c2db4ac0596891f213/files/xrizer WINEDLLOVERRIDES="winhttp.dll=n,b" %command%
- NOTE:
- The mod loader MUST use the same proton version that use for the main game. Make sure the proton version in Steam properties for both VTOL VR and the mod loader is identical or you can run into issues with the mods loading correctly.
- With recent updates to the mod loader, you can leave the launch parameters set as above. When wanting to play with mods, launch the mod loader and click "Play" to start the game modded. If you launch the game normally through Steam, you can play unmodded without having to disable mods or uninstalling the mod loader.
- When playing with mods in multiplayer, all players must use the exact same mods to be able to play with each other. Also check the VTOL VR mod loader workshop to ensure a mod supports multiplayer. Older mods break, and VTOL VR updates are known to break mods until they are fixed by the mod creators.
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn/x86_64/stable/68d7958a1999e2762b7d8d36140035b8d7286580b8f0f0c2db4ac0596891f213/files/xrizer %command% PROTON_USE_NTSYNC=1 %command%
Half-Life: Alyx runs very well with OpenXR and WiVRn. I highly recommend forcing the fidelity level to it's highest setting to prevent pop-in of textures and greatly reduce traversal and rotation stutter during gameplay. Also note that you need the specific Proton version listed below or you will have crashes and graphical issues.
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 PRESSURE_VESSEL_FILESYSTEMS_RW=/var/lib/flatpak/app/io.github.wivrn.wivrn/x86_64/stable/68d7958a1999e2762b7d8d36140035b8d7286580b8f0f0c2db4ac0596891f213/files/xrizer %command% PROTON_USE_NTSYNC=1 %command% +vr_fidelity_level_auto 0 +vr_fidelity_level 3
- The above fidelity options will stop Alyx from using some tricks that try to help keep a stable framerate in the game. These often result in textures that constantly switch from high to lower resolutions, resulting in some jarring changes while in VR.
- Alyx doesn't run on recent version of Proton-GE or Proton Experimental. I have found Proton 8.0-5 to work best with the game..
- When loading levels in game, you will be stuck in a grey void with audio. You will hear a beep sound when a level is finished loaded, and can click your trigger on the right controller to load, then display should come back.
- If in doubt, clearly check the requirements and compromises sections of this guide to make sure you haven't missed or misunderstood anything. Sometimes taking a break is a good idea and coming back later with a clear frame of mind, especially if you are feeling overwhelmed and/or frustrated.
- Lag and/or fast connecting/disconnects, Quality and/or bitrate low:
- Try restarting your Quest headset. Sometimes Quest headsets can overheat or have software problems or have other issues on the headset side. A reboot of your headset will usually fix these issues. If the issue persists, try completely rebooting your computer and/or rebooting your network/router. If these issues persist, suspect your network has hardware, software, or interference issues.
- A common issue is that Quest/Meta headsets will drop to a lower WiFi link rate after sleep/resume and get stuck at that rate. I often find my headset will be stuck at 300 MBit or less vs the normal 1200 MBit. Restarting the headset or toggling the WiFi off and back on again in the headset fixes this issue until the next sleep/resume cycle. You can check for this bug in the WiFi menu on your headset by selecting your network details and scrolling down. This doesn't appear to happen with all headsets or access points.
- Still having quality/rate issues?:
- The most common issue is poor network performance. A good router is required, but so is a good connection between the router and your headset, as is between your computer and the router. Sometimes the air will be over-saturated with too much data traffic, or maybe even your LAN is being overwhelmed or having issues due to faulty hardware/software -- sometimes it could be a faulty ethernet cable. Advanced setup of both wired and wireless networks is not covered by this guide, as that is a very complicated topic by itself. Another issue is poor GPU performance. Give the COMPROMISES section another quick read, and also take into consideration your hardware specs.
- Note that shared network like common home networks can cause issues. I have a Spectrum WiFI 7 Tri-Band router at home that provides great speeds but has issues with wireless VR due to the other 10 devices sharing the wireless connection.
- I instead use a dedicated Asus RT AX-3000 in AP mode connected to my desktop on channel 100 (DFS channel) in 80 MHz mode and I get no issues.
- The most common issue is poor network performance. A good router is required, but so is a good connection between the router and your headset, as is between your computer and the router. Sometimes the air will be over-saturated with too much data traffic, or maybe even your LAN is being overwhelmed or having issues due to faulty hardware/software -- sometimes it could be a faulty ethernet cable. Advanced setup of both wired and wireless networks is not covered by this guide, as that is a very complicated topic by itself. Another issue is poor GPU performance. Give the COMPROMISES section another quick read, and also take into consideration your hardware specs.
OpenSpeedTest is a free and open-source HTML5 local speedtest that can very easily be installed and ran. A great tool to test your entire network stack including your networking card, ethernet connection, router, wireless signal and headset connection all together in realistic conditions.
While their website can be used to test your Internet connection, we will be downloading and running it manually on our local network to test our local area network. This will NOT test your internet connection as that happens outside your LAN -- we want to test your local area network including your WiFi connection.
In Bazzite, CachyOS, or PikaOS, I recommend going to the download page for OpenSpeedTest and fetching the latest AppImage for the GUI. The installation of OpenSpeedTest will be the same as WayVR. Simply download and install the AppImage with Gear Lever. Note that due to how it is hosted on their website, you cannot enter a URL to update the GUI like with WayVR.
Once installed, simply launch OpenSpeedTest from your application launcher and it will be awaiting connections from any browser.
On all recommended distros the port 3000 should be open by default so long as you don't change any settings, so no port forwarding is required.
OpenSpeedTest should be open on your desktop so it can await connections. To test your WiFi and network, startup your VR headset and stand/sit in your normal playing location. Ensure your router is setup in it's usual location as well so you can fully test the locations of your headset and router for interference.
Now, due to following:
-
Take note of the address listed inside of the server GUI on your desktop. You will need to manually type this in shortly on your headset.
-
Put on your headset and ensure you connected to the right network.
-
Open the "Browser" app on your headset and navigate to the IP address of the server. Fully type it in manually, including port.
Note that the exact IP will vary for each user. Also note I have appended ?=60s to the end of the URL -- this will make the server perform a 60 second test instead of the default shorter test so we can get better results.
-
The webpage should load and show a blue "Start" button in the lower left. Simply click this button to start the speedtest. The test takes about two minutes.
-
When finished, you should see the results page similar to this:
Since I am using a dedicated AP with only my headset connected, I am getting very good results as shown in the image above. This is also because I have little to no interference and play within line of sight of my router, about 5-6 feet away. These speeds are possible even with longer ethernet cables (25m from PC to router, and 25M from router to main router).
The limiting factor of my network is the 1 Gbit connection from my computer to my router, and my WiFi connection! This ensures a latency and lag free connection while playing.
If you are seeing much lower speeds, first check that all your ethernet cables are working correctly -- if a single twister pair is damaged, your network connection will drop from 1 Gbit to only 100 Mbit, so 1/10th of the normal speed!
Wireless is susceptible to interference from other wireless signals from other routers, phones, tablets, and computers. Solid objects like brick, concrete, and even water can fully or nearly fully block these signals.
A clear line of sight between your play space and your router is the best practice. Place your router up as high as possible along a wall, away from corners and away from other solid objects.
Even with all these things considered, if you live in an area that is heavily congested with WiFi signals and traffic such as a multi-level apartment building, you will likely experience signal interference with other networks.
There is a free tool to check for this interference from from your phone. The two I will recommend can be installed from Google Play (I have an android phone and have tested both of these apps.) If you use Apple, you can check your store and search for "WiFi Analyzer" apps to scan the area.
-
Free Version and Paid Version with more features (Free version will work fine)
Ideally you would have a free 5GHz channel in your area. If you live near many people, most of these channels will already be in use.
The best practices in order of best case scenarios are as follows:
-
A clean, unused channel, supporting the highest width supported.
-
A shared channel that exactly lines up with another channel, but the conflicting signal is of low quality.
- A shared channel exactly lines up with another channel, but matching signal strengths.
-
Note that having a shared channel isn't a bad thing, so long as the channel is EXACTLY overlapping with yours. channels that share only part of the total channel width as yours will cause packet loss and interference will all channels in that spectrum (including their own!) Non-overlapping channels are best!
Study the following image of 5Ghz Channel Allocations in North America:
Note that on most ISP provided and cheap routers, the DFS(dynamic frequency selection) channels listed in orange and yellow above are NOT AVAILABLE. Availability of certain wireless channels also varies by countries due to laws. In most cases, only the channels listed in green are easily available.
With newer routers like the Asus RT AX-3000 do have DFS channel availability, increasing the amount of WiFi channels you may be able to use. These channels are allowed by the FCC on supported devices, but these channels come with caveats.
-
These channels are shared with military aircraft radars, weather station radars, and other military/government equipment. By federal law, if your router detects any such aircraft or facilities using these channels, your devices MUST change channel right away -- usually to a non-DFS channel, causing an interruption in your connection!
-
Only devices tested and certified by the FCC in the United States can be allowed or sold to use these channels.
This channel switching cannot be disabled if you use DFS channels, and a failure to auto-switch channels is a violation of federal law, at least in the United States. Only devices that have their signal switching and are approved by the FCC and fully tested may use them as thing signal switching capability must work when needed.
These channels are a great choice if you live far enough away from local airports or radio stations, such as in larger homes or rural areas. Note that any aircraft flying above your location (Even at very high altitudes) use radar to detect altitude and/or weather and may cause issues with using DFS channels.
I personally use DFS channel 100 in 80MHz mode and have had no issues for several years. The nearest airport is more than 30 miles away, and my location has no aircraft flying directly above. I also have only one other WiFi channel in the 5Ghz spectrum in my area, and it is on a free channel and is very weak compared to mine due to the distance to my neighbors.
The only way to know if you these channels are free is to use and test them.
Without DFS channels, the max amount of non-overlapping channels available in an area will be limited to 9 at 20Mhz, 4 at 40Mhz, or 1 at 80Mhz.
This number jump to 25 at 20Mhz, 12 at 40Mhz, or 6 at 80Mhz if you are able to use DFS channels, a huge jump in the availability of clean channels.
If in a saturated network area, do not use the higher widths such as 80Mhz, as this will greatly reduce the amount of channels available to your neighbors. 40Mhz will work fine for VR, you should only use the higher channels width in free areas.
Note that nearly all Android based headsets feature 2x2 antennas, which limit their available bandwidth to HALF of the possible spectrum, as they cannot support the higher widths.
Refer to the following table for the max layer speeds supported by relevant WiFi routers depending on their set channel widths:
| WiFi Generation | 20Mhz | 40Mhz | 80Mhz |
|---|---|---|---|
| WiFi 5 (AC) Released: 2013 | 174Mbit | 400Mbit | 866Mbit |
| WiFi 6 or 6e (AX) Released: 2021 | 286Mbit | 574Mbit | 1200Mbit |
A quick glances reveals that the bandwidth uses is much more important than the generational uplift gained from WiFi 5 to 6.
20Mhz isn't suited for VR, especially at higher resolutions and bitrates. 40Mhz is the sweetspot. Using 80Mhz will net you a faster connection to your computer and the internet assuming your internet speeds are fast enough, but it isn't required for VR.
Always remember that each step up in channel width uses 2x the channels than the last. So a network setup in 80Mhz width is using the same amount of channels that as 4 20MHz networks.
The sweet spot is at least WiFI 6 AX in 80Mhz, as that nets you the best chance of higher speeds and low latency. Going higher than 80Mhz is pointless because headsets don't support it, and most computers network cards are limited to 1 Gbit ethernet.
I used a WiFI 5 AC router for over a year at 80Mhz (866Mbit) with no issues as well, so older routers are fine unless you need the extra channel availability such as DFS channels.



















