A lightweight OpenXR/OpenVR overlay for Wayland and X11 desktops, inspired by XSOverlay.
WlxOverlay-S lets you to access your desktop screens while in VR.
In comparison to similar overlays, WlxOverlay-S aims to run alongside VR games and experiences while having as little performance impact as possible. The UI appearance and rendering techniques are kept as simple and efficient as possible, while still allowing a high degree of customizability.
We are available on either:
#linux-vr-adventures:matrix.org
Questions/issues specific to WlxOverlay-S will be handled in the wlxoverlay
chat room.
chmod +x WlxOverlay-S-*.AppImage
AUR package is wlx-overlay-s-git.
You may also want to build from source.
When the screen share pop-up appears, check the terminal and select the screens in the order it requests.
In case screens were selected in the wrong order:
rm ~/.config/wlxoverlay/conf.d/pw_tokens.yaml
then restartSteamVR users: WlxOverlay-S will register itself for auto-start, so there is no need to start it every time.
Envision users: Set wlx-overlay-s --openxr --show
as the Autostart Command on your Envision profile! This will show a home environment with a customizable background!
Please continue reading the guide below.
The working set consists of all currently selected overlays; screens, mirrors, keyboard, etc.
The working set appears in front of the headset when shown, and can be re-centered by hiding and showing again.
Show and hide the working set using:
showhide
binding must be bound)Much of the functionality in WlxOverlay-S depends on what color of laser is used to interact with a UI element. \ Using the default settings, there are 3 modes:
Please see the bindings section below on how to activate these modes.
The guide here uses the colors for ease of getting started.
Check your left wrist for the watch. The watch is the primary tool for controlling the app.
Hovering a pointer over a screen will move the mouse. If there are more than one pointers hovering a screen, the pointer that was last used to click will take precedence.
The click depends on the laser color:
To curve a screen, grab it with one hand. Then, using the other hand, hover the laser over the screen and use the scroll action.
See the bindings section on how to grab, move and resize screens.
The keyboard is fully customizable via the keyboard.yaml file. \
Download it into the ~/.config/wlxoverlay/
folder and edit it to your liking.
Typing
Modifier Keys are sticky. They will remain pressed until a non-modifier key is pressed, the modifier gets toggled off, or the keyboard gets hidden.
To customize bindings on OpenXR, refer to the OpenXR Bindings wiki page.
If your bindings are not supported, please reach out. \ We would like to work with you and include additional bindings.
When an error is detected, we often print tips for fixing into the log file.
Logs will be at /tmp/wlx.log
for most distros.
Check here for tips.
Hyprland users: Hyprland v0.41.0 changed their absolute input implementation to one that does not respect existing absolute input standards. Make your voice heard: Hyprland#6023・Hyprland#6889
Niri users: use on Niri 0.1.7 or later.
X11 users might be dealing with a Phantom Monitor.
Other desktops: The screens may have been selected in the wrong order, see First Start.
There are some driver-desktop combinations that don't play nice with DMA-buf capture.
Disabling DMA-buf capture is a good first step to try when encountering an app crash or gpu driver reset.
echo 'capture_method: pw_fallback' > ~/.config/wlxoverlay/conf.d/pw_fallback.yaml
Without DMA-buf capture, capturing screens takes CPU power, so let's try and not show too many screens at the same time.
This has been idenfitied as an issue with SteamVR versions 2.5.5 and above (latest tested 2.7.2). One way to avoid the crash is by switching to the temp-v1.27.5
branch of SteamVR (via beta selection) and selecting Steam-Play-None under the compatibility tab.
This is a rare issue that can make KDE Plasma not react to click or keys due to what seems to be a race condition with modifiers. Restarting the overlay fixes this.