I am setting up a headless tracking server on Kubuntu 24.04 using SteamVR and Vive Trackers for a Virtual Production camera volume.
Question:
Is there a way to force UE 5.7 to initialize a Headless OpenXR Session (using the XR_MND_headless extension or similar) so I can access tracker poses without a physical HMD or GPU-attached display?**
The Setup:**
-
OS: Kubuntu 24.04 (Noble)
-
Engine: Unreal Engine 5.7.4 (built from source)
-
Runtime: SteamVR (Linux) with
driver_nullenabled insteamvr.vrsettings. -
Hardware: Valve Index Base Stations + Vive Trackers.
What works:
The SteamVR backend is healthy. I can confirm the lighthouse driver is active and providing pose data via vrcmd:
Bash
export LD_LIBRARY_PATH=.../SteamVR/bin/linux64
./vrcmd --pollposes
# Result: Valid changing coordinates for Device 1, 2, 3.
The Problem:
When launching Unreal Engine to ingest this data via Live Link XR, the OpenXR handshake fails. Even using -xrtrackingonly, the engine attempts to create a graphics session that fails in a headless environment.
Launch Command:
Bash
export XR_RUNTIME_JSON=/home/me/.steam/debian-installation/steamapps/common/SteamVR/steamxr_linux64.json
./UnrealEditor [Project] -xrtrackingonly -RenderOffscreen -nullrhi -Unattended
The Error:
The engine logs an ensure failure at OpenXRHMD.cpp and crashes:
XR call xrCreateSession(Instance, &SessionInfo, &Session) failed with result: XR_ERROR_RUNTIME_FAILURE
Troubleshooting already performed:
-
Confirmed
~/.config/openxr/1/active_runtime.jsonpoints to SteamVR. -
Verified
driver_nullhas a virtual resolution set ($1920 \times 1080$) insteamvr.vrsettings. -
Tried
xvfb-runto provide a dummy X-display. -
Verified Vulkan is functional, but
xrCreateSessionseems to insist on a graphics binding that SteamVR’s Linux null driver isn’t providing to the OpenXR loader.