Windows Mixed Reality on Linux? Yes... yes, some people are just crazy and make everything possible. I tried it and it works very well. Much better than you would expect. More often than not, the Linux tools are far FAR more stable than the official windows tools (which are kinda not good. They are bad... like really bad. They are so bad that even my mum asked why the official tools are so unstable). Just wow and huge respect to the developers and the community behind the Linux Software!!!
Important: [AUR] means I used the AUR from Arch to install the software (using yay, pamac or any other software that can use the AUR). It's the same as installing the source code directly, but much more buggy and you need to check EVERY PKGBUILD for safety and make sure all dependencies are installed correctly. You can also just download the source of everything and just install it as it is done in the PKGBUILD files. [GIT] means you have to get it directly from the hosted repository to do a step. I use Steam normally (not as a flatpack). If you are using a flatpack, you will need to add "/run/host/" to each of the paths. I do not recommend flatpacks for this because of the bleeding edge nature of it all. You need quick and easy access to all the files, without extra steps to fix the tools. "###YOUR_USERNAME###" means that this should be your username from your linux porfile or you need to put your name there (ALSO IN SCRIPTS!).
At the time of writing, WMR controllers do not yet work. You have to use another controller, a ???Wii-Mote or hand tracking (which will never work very well with WMR because of the bad cameras. They were never meant to be used for this kind of detail detection, but that may change as I know the open source community by now :D).
First things first; This is the software and hardware I used. How I did setup everything, read on!
Hardware/OS:
Software:
(Install all dependencies, This not in the required installation-order! For the order read further)
Mod's:
I tried it on OpenSuse first, but some libraries are compiled incorrectly for this usecase there, which makes it hard to get everything working. So I am using Arch Linux for this. The scripts in the AUR are unfortunately not very good. A lot of dependencies are missing, this means you have to read every error output during installation for the missing dependencies / read the comments under the PKGBUILD page and add them yourself to the system.
This video by one of the developers (I think) can help you get started; https://youtu.be/Oqla04P_2QA. This is what I did to install everything correctly:
External Drivers:
monado : /usr/share/steamvr-monado
###########
###########
#!/bin/bash
# For OpenComposite, sould SteamVR not work:
#VR_OVERRIDE=/run/host/usr/share/opencomposite XR_RUNTIME_JSON=/run/host/usr/share/openxr/1/openxr_monado.json PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/monado_comp_ipc %command%
# VR-SafeMode-CleanUp (https://linuxhint.com/replace_string_in_file_bash/):
# - Assign the filename
filename="/home/###YOUR_USERNAME###/.steam/steam/config/steamvr.vrsettings"
# - Take the search string
search="\"blocked_by_safe_mode\" : true"
# - Take the replace string
replace="\"blocked_by_safe_mode\" : false"
# - Replacing String:
if [[ $search != "" && $replace != "" ]]; then
sed -i "s/$search/$replace/" $filename
fi
# Start Steam:
export STEAMVR_PATH="~/.local/share/Steam/steamapps/common/SteamVR"
export STEAM_RUNTIME=~/.steam/root/ubuntu12_64/steam-runtime
export XDG_SESSION_TYPE=x11
export QT_QPA_PLATFORM=xcb
export -n XDG_BACKEND
export -n ELM_ENGINE
export -n ELM_DISPLAY
export -n WINIT_UNIX_BACKEND
export -n BEMENU_BACKEND
export -n SDL_VIDEODRIVER
export -n ECORE_EVAS_ENGINE
export -n CLUTTER_BACKEND
export -n QT_WAYLAND_DISABLE_WINDOWDECORATION
export -n QT_WAYLAND_FORCE_DPI
export STEAMVR_EMULATE_INDEX_CONTROLLER=1
STEAMVR_EMULATE_INDEX_CONTROLLER=1
~/.steam/steam/steamapps/common/SteamVR/bin/vrstartup.sh
###########
External Drivers:
monado : /usr/share/steamvr-monado
holographic : /home/###YOUR_USERNAME###/.local/share/Steam/steamapps/common/MixedRealityVRDriver
###########
{"DesktopUI" : {
"pairing" : "1960,680,799,599,0",
"settings_desktop" : "1960,680,799,599,0"
},
"GpuSpeed" : {
"gpuSpeed0" : 1476,
"gpuSpeed1" : 1472,
"gpuSpeed2" : 1485,
"gpuSpeed3" : 1493,
"gpuSpeed4" : 1459,
"gpuSpeed5" : 1420,
"gpuSpeed6" : 1478,
"gpuSpeed7" : 1478,
"gpuSpeed8" : 1484,
"gpuSpeed9" : 1445,
"gpuSpeedCount" : 10,
"gpuSpeedDriver" : "96477185",
"gpuSpeedHorsepower" : 1474,
"gpuSpeedRenderTargetScale" : 1,
"gpuSpeedVendor" : "AMD Radeon RX 7900 XT (RADV GFX1100)",
"gpuSpeedVersion" : 2
},
"LastKnown" : {
"ActualHMDDriver" : "monado",
"HMDModel" : "HP Windows Mixed Reality Headset"
},
"driver_gamepad" : {
"blocked_by_safe_mode" : false
},
"driver_monado" : {
"blocked_by_safe_mode" : false
},
"steam.app.658920" : {
"DominantHand" : 2
},
"steamvr" : {
"installID" : "16430710729258384815",
"lastVersionNotice" : "2.1.8",
"lastVersionNoticeDate" : "1701302696"
}
}
###########
Surprisingly well. The only time it crashes is when the heatset, or more precisely the basalt, loses its tracking completely and the position shoots into the stars. This can be prevented with a very variable and three dimensional area in front of you and the headset. My 3 displays cause tracking loss no matter what I do. But the table next to me with decorations on it and a few pictures on the wall works perfectly. I directed the room light to the table and it works really well and reliably. The problem is that sometimes the tracking gets lost very easily and on the next try it is unbreakable no matter what I do and tracks perfectly.
I often have to run the vr.sh script twice. The second time it usually works. I hold the headset where I want it to be and when everything is running, I put it on. The tracking is... fast enough. It definitely needs to get faster with development (basalt tracking) but its a good start.
Cyberpunk 2077 plays well. The settings and the fps are not ideal (around 90-120, thanks to the way the mod works, 45-60 at the headset). It is fine but not good. Other games made for VR are perfect because they are optimised for such high resolutions and fps for VR.
The big question is whether this is good enough for you. If you have a headset with outside-in tracking (infrared base station that helps your headset determine where it is. The best way to do tracking) or a well supported headset like the Valve Index or an HTC Vive then definitely (but then thanks to the native support you dont need to do any of the driver steps here. They just work!). With Inside-out tracking (cameras on the headset that scan the room and software that calculates your position), most WMR headsets for example, yes BUT only if you play games that are not too motion intensive and/or you have a room with a lot of stuff for the headset and software to detect and track reliably and quickly. Basalt is currently a little slow compared to the official tools and the delay in combination with standing up could cause nausea. But this can change quickly, or your setup may just work much better than mine, as always with such cutting-edge software :D. But for sitting VR (Racingsim or Cyberpunk 2077 for example) 100% YES! I do not currently play any games that require motion controls. Most WMR controllers are not supported at the time of writing (this will probably change relatively soon). If you have a workaround (3D camera and PS2/Wii/Hand Tracking with Basalt/any third party motion controller) then you can work around this. Basalt has also used hand tracking with the headset or even with a 3D camera I think (Kinect for example), but the tracking is not good (On WMR at least). Most WMR cameras just suck too much lol.
The last point I want to go over is: Should you buy a cheap WMR headset to get cheap and easy access to VR because Monado exists? The answer: NO! WMR sucks! Like real bad (In my opinion). It is like cheap fast food. It "tastes" """okay""" and you get it if there is no other option. Anything that is a SteamVR heatset, the Valve Index or HTC-Vive for example, preferably with outside in tracking, will work without special drivers (but you can still use them for even more compatibility in serten cases) and is FAR FAR F-A-R better. Inside-out tracking was, is and will always be very prone to desync, crashes and reboots every few hours !at least!. If you have a WMR headset for some reason and want to use it, this is a good way to make it useful without using a bad (IMO) OS, but if you don't have a VR headset, save the money and just buy something better. You will also be supporting SteamVR and the Linux driver to grow and keep a present on the market. Just avoid WMR (iMo!). But if you are "stuck" with it, yes, use Monado. At least your e-waste will be used :D. And yes, this rant was again fuelled by a bad WMR experience on Windows and an unstable Linux VR experience, fuelled by the inexplicably poor reliability of a VR headset everywhere. But I'm stuck with it, so I might as well use it.
Almost all games work with either SteamVR (works best) or OpenComposite.
A few things that helped me to get it more stable (and somtimes I dont know why):
I hope I could help you getting a very obscure way of playing Windows VR on Linux to work. I linked EVERYTHING I found useful in the sources section. Thanks to all the development behind these projects, you do a great job! Consider donating to them for a healthy open source community!