Making a VR/Godot/Linux/Monando dev system:

Apparently SteamVR might not be the way to go on Linux, and there’s this other implementation of the OpenXR system that Valve invented called “Monando”. (Thanks Gabmus)

This can be installed with the following incantations:

sudo apt install build-essential git wget unzip cmake ninja-build libeigen3-dev curl patch python3 pkg-config libx11-dev libx11-xcb-dev libxxf86vm-dev libxrandr-dev libxcb-randr0-dev libvulkan-dev glslang-tools libglvnd-dev libgl1-mesa-dev ca-certificates libusb-1.0-0-dev libudev-dev libhidapi-dev libwayland-dev libuvc-dev libavcodec-dev libopencv-dev libv4l-dev libcjson-dev libsdl2-dev libegl1-mesa-dev libbsd-dev
git clone https://gitlab.freedesktop.org/monado/monado.git
cd monado
mkdir build
cd build/
cmake .. -DCMAKE_BUILD_TYPE=Debug -G "Unix Makefiles"
cmake --build .
sudo cmake --build . --target install
monado-service 

The last line actually launches the OpenXR service, and looks like it might have crashed coz all you see is a warning in the console and a blank VR headset.

It’ll sit there until you press return, and then stop.

But this is because we have no app running yet, only the VR-service waiting for an app to connect to it.

The app we want is Godot4.1, and the incantation for installing that plus the microsoft .net runtime is thus:

Install dotnet:

mkdir dotnet
cd dotnet
wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y dotnet-sdk-7.0

Install Godot by finding the dotnet version of the zip on their download page at https://godotengine.org/download/linux/

cd src/godot/
mv ~/Downloads/Godot_v4.1.1-stable_mono_linux_x86_64.zip .
unzip Godot_v4.1.1-stable_mono_linux_x86_64.zip 
cd Godot_v4.1.1-stable_mono_linux_x86_64

Now we want to run Godot, but also have it realize that it should use the Monando system instead of trying for SteamVR, so we have to tell the environment where to find Monando’s config:

For me that is:


export XR_RUNTIME_JSON=/home/pre/src/monando/monado/build/openxr_monado-dev.json

But you’ll have a different home directory and maybe put Mondo elsewhere

Finally we can run godot:


./Godot_v4.1.1-stable_mono_linux.x86_64


Godot has some demo-apps you can pick from and one is Godot XR Tools demo. You may have to turn on the “Testing” or “community” repositories in “support”

Then press play and… it actually worked.

Better than I’ve seen a VR dev-kit work in Linux I think.

Feels like the thing wrong isn’t frame-rate but more like inadequate tracking-position smoothing? Jittery rather than stuttery?

Dunno. It was nice to see.

I think you may need to have the controllers turned on before you start monado. Maybe it only detects at start-up time?

But for one brief moment there, it was almost partially usable.

And then a few restarts later it was fine. Framerate is smooth, the physics is engaging, the demos are all lovely, and I can finally do it in Linux so fuck me, I can ditch windows again for the first time since the middle of last decade.

And ditch Unity too, which was always obviously going to become a problem eventually.

For free and open and libre alternatives.

That’s nice.

Lotta re-writing to make it so. But then I probably planned to do that anyway at some point.

Note: SteamVR was already installed, and Monado seemed to use it’s config files somehow. No two Debian systems are alike, it might not work for you just as it no longer works for me 😉

Using it in SteamVR: If you want to use this instead of the Valve drivers for SteamVR then you have to add the driver, something like this depending non your own steam install location and monando build:

~/.steam/steam/steamapps/common/SteamVR/bin/vrpathreg.sh adddriver /home/pre/src/monando/monado/build/steamvr-monado


That seems to make SteamVR work, but I haven’t apparently got any games that actully work with it. The empty no-app background is smoother than the Valve drivers.