Windows Mixed Reality (WMR)#

Windows Mixed Reality headsets (including models from HP, Samsung, Lenovo, Dell, Acer, and ASUS) are supported on Linux using the Oasis Driver for Windows Mixed Reality alongside the Ignition translation layer. This setup provides 6DOF tracking for both the headset and motion controllers across supported devices.

There is also the FOSS option through Envision, but that is not recommended for general use, since the controller tracking is very rough.

ℹ️ Headset-internal Bluetooth receivers

Some headsets (such as the Samsung Odyssey+ or HP Reverb G2) feature integrated Bluetooth receivers. If you have paired the motion controllers to your PC previously, you can use the “pair a new controller” option that pops up when you launch Oasis. Alternatively pair your controllers via this tool: wmr-utilities.

Prerequisites & setup#

Ensure all required software dependencies are installed and configured before setting up the hardware:

Setting up Oasis Driver and SteamVR#

Switch SteamVR to Beta#

In Steam, right-click SteamVR → Properties → Betas, and select the beta - SteamVR Beta Update branch.

Install udev rules#

WMR headsets require specific USB device permissions to communicate with the driver.

Choose one:

  • Navigate to ~/.steam/steam/steamapps/common/Oasis Driver for Windows Mixed Reality/ then copy 70-wmr.rules to /etc/udev/rules.d/
  • Or, create the rules manually by creating the file /etc/udev/rules.d/70-wmr.rules and pasting in the following:
    1# HP Reverb G2 / WMR HoloLens Sensors & USB Interfaces
    2SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="0659", MODE="0666", TAG+="uaccess"
    3SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", ATTR{idProduct}=="0582", MODE="0666", TAG+="uaccess"
    4SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", ATTR{idProduct}=="0c6a", MODE="0666", TAG+="uaccess"
    5
    6# HID Raw Permissions for Motion Controllers & Receivers
    7SUBSYSTEM=="hidraw", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0659", MODE="0666", TAG+="uaccess"
    8SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="066a", MODE="0666", TAG+="uaccess"

Make sure the filename is kept intact; due to a systemd quirk, the number in the filename must be 73 or under for the uaccess tag to apply.

Reload udev rules#

To apply the udev changes from above, run this command in a terminal:

sudo udevadm control --reload-rules && sudo udevadm trigger

Bluetooth adapter setup issues#

This section and all subsections are not relevant for headsets with integrated Bluetooth receivers. This is for headsets whose controllers must connect directly to a Bluetooth adapter on the PC.

If this doesn’t apply to you, skip ahead to the next section: #Pairing the controllers

WMR motion controllers require a stable Bluetooth connection. If your system uses e.g. an internal MediaTek Bluetooth/Wi-Fi combo card (such as the RZ616 or MT7921), you may encounter br-connection-create-socket errors. This is caused by aggressive power management and 2.4 GHz Wi-Fi/Bluetooth coexistence conflicts within the kernel driver.

If you run into issues connecting the controllers via Bluetooth, apply these configuration tweaks:

Enable BlueZ FastConnect#

Edit the main Bluetooth configuration file /etc/bluetooth/main.conf and ensure the following options are present under the [General] section:

[General]
FastConnectable = true
Privacy = off
JustWorksRepairing = always

Disable Bluetooth autosuspend#

Prevent the kernel module from powering down the adapter during controller handshake:

sudo bash -c 'echo "N" > /sys/module/btusb/parameters/enable_autosuspend'

Disable Wi-Fi (temporarily)#

To avoid 2.4 GHz interference during the initial pairing handshake, temporarily disable Wi-Fi in your network manager or run this command:

nmcli radio wifi off

Wi-Fi can be re-enabled once both controllers are paired and connected.

Restart the Bluetooth service#

sudo systemctl restart bluetooth

Pairing the controllers#

ℹ️ Pairing problems with GUI Bluetooth managers

Graphical Bluetooth managers (like KDE/Gnome settings) often time out when pairing WMR controllers. Pair them using bluetoothctl in the terminal instead.

Open a terminal and start the interactive shell#

bluetoothctl

Initialize the pairing agent#

agent NoInputNoOutput
default-agent
power on
scan on

Pair the left controller#

Open the battery compartment on the left controller and hold the small pairing button until the ring LEDs pulse slowly.

🛑 Caution

Do not hold both the pairing button and the windows button on the controller. Doing so reverts the controller firmware to an old one, making it unusable with Oasis.

Locate the MAC address (e.g., B4:A9:FC:ED:40:6C) when it appears as a [NEW] Device.

Stop scanning and pair the device:

scan off
pair [MAC-ADDRESS]
trust [MAC-ADDRESS]
connect [MAC-ADDRESS]

To verify it worked, the terminal will output “Connection successful” and “ServicesResolved: yes”. The controller’s LEDs will stay solid bright, and the controller may vibrate.

Pair the right controller#

Turn scanning back on (scan on), hold the pairing button on the right controller, and identify its MAC address.

Then, stop scanning (scan off) and execute the same pair, trust, and connect sequence of commands, but for the second MAC address.

Note on br-connection-create-socket Errors#

If bluetoothctl returns Failed to connect: org.bluez.Error.Failed br-connection-create-socket when pairing the second controller, the Bluetooth driver socket has hung. Clear the state by running:

bluetoothctl remove [MAC-ADDRESS]
sudo systemctl stop bluetooth
sudo rmmod btusb
sudo modprobe btusb disable_autosuspend=1
sudo systemctl start bluetooth

Remove and reinsert the controller batteries, then attempt the pairing sequence again. It may take several tries to get them paired the first time.

Re-enable Wi-Fi#

Once both controllers show Connected: yes and Trusted: yes in bluetoothctl, you can safely turn Wi-Fi back on.

Running SteamVR#

Connect hardware#

Plug your WMR headset into power, DisplayPort (or HDMI for 1st-gen devices), and a USB 3.0 port.

Launch the driver#

Start Oasis Driver for Windows Mixed Reality from your Steam library. Oasis will initialize the Ignition translation layer in the background and launch SteamVR automatically. Put on the headset to enter the SteamVR environment.

Reverb G2 on Nvidia#

Nvidia GPU users with an HP Reverb G2 require patched kernel modules to run the headset at 90 Hz. Otherwise, it is limited to 60 Hz. Nvidia setups also require some extra steps for the headset to function at all.

To set up the HP Reverb G2 on Nvidia GPUs, follow these steps:

  1. Follow the above guide above to install Oasis and SteamVR.
  2. Quit and re-launch Steam itself with the -pipewire command-line argument. If it makes it easier, edit the Steam entry in your application launcher’s menu editor, and add this to the list of command-line arguments.
  3. Install libdrm-dev. The exact installation method varies based on distro.
    • Ubuntu: sudo apt install librdrm-dev
    • Arch: Already preinstalled.
  4. If you set 60 Hz mode in SteamVR settings, then it should work and you can stop here.
  5. To get 90 Hz working, you will have to use a patched version of the Nvidia open kernel modules.
    • Arch or CachyOS users: Refer to nvidia-open-dkms-g2AUR
    • Kubuntu: Download the G2 Nvidia Driver Patch tarball and follow the instructions in the README.txt.
      • Before running it, you may also need to mark the script as executable with chmod +x build-nvidia-g2.sh
    • All other distros: You will have to patch manually. Take the .patch file from the above tarball and follow the general guide to kernel patching at the bottom of the hardware page.