protonscr

[BUG] SteamVR 2.16.7 (build 23791826) breaks ALVR direct mode on Linux. vrserver never registers vrcompositor; build 22542555 works

steamvrclosed bug
ValveSoftware/SteamVR-for-Linux#923 · opened 2026-07-25 by zitr0y · updated 2026-08-29 · 2 comments · github
Zzitr0y 2026-07-25 github

Describe the bug

SteamVR 2.16.7 build 23791826 breaks ALVR's direct-mode path on Linux. vrcompositor starts and completes init in ~0.2 s, but vrserver times out after 10 s claiming the compositor is not running. vrmonitor then reports Unable to get compositor interface (303) and shows the "A key component of SteamVR isn't working correctly. Please reinstall SteamVR" dialog (its "More info" link is dead).

Streaming still starts, but ALVR logs Desync detected. Attempting recovery. continuously. That warning fires when game render latency exceeds 250 ms, rate-limited to once per 100 ms — and it fires at the maximum allowed rate, so the condition is continuous rather than intermittent. In the headset it presents as heavy lag with the client re-warping a stale frame: turning your head exposes the unrendered border of the previous frame, so the world looks flat.

Rolling SteamVR back to the previous Steam branch (build 22542555) fixes it completely. Clean bisect on one variable — no other configuration changed between the two runs.

build 23791826 build 22542555
Desync detected warnings per session 584, then 166 0
timeout - vrcompositor process is not running every run 0
Usable no yes

Relevant log excerpts.

vrcompositor.txt — compositor comes up fine:

[Info] - Direct mode: enabled
[Info] - Headset is using direct mode
[Info] - Startup Complete (0.240239 seconds)

vrserver.txt — ~10 s later, vrserver disagrees:

[Info] - timeout - vrcompositor process is not running.
[Info] - Processing message VRMsg_StartVRCompositor from vrmonitor took 10.5 seconds
[Info] - Processing message VRMsg_StartVRCompositor from vrserver took 10.4 seconds

vrmonitor.txt:

[Info] - Unable to get compositor interface (303)
[Info] - [Status Alert] Something is wrong (303)
[Info] - Drops over entire run:- ... - Total 0 in 0 frames

ALVR streamer log, starting ~2 s after the encoder comes up:

[INFO] CEncoder client connected, pid <vrcompositor>
[INFO] Using VAAPI encoder
[WARNING] Desync detected. Attempting recovery.     <- hundreds, every 100 ms

Already ruled out:

  • Network — reproduces identically over USB 3.2 wired.
  • GPU performance — GPU utilisation stayed at 0–20 % for entire sessions, zero amdgpu/DRM errors in the kernel log. 250 ms of render latency on an idle GPU is a stall, not saturation. Render resolution and SteamVR supersampling changes had no effect.
  • Refresh-rate mismatch — SteamVR initially requested 90 Hz while ALVR's virtual display offered only 72 Hz. Setting ALVR to 90 Hz made all three agree (@90.000008Hz) and changed nothing.
  • The vrlink driver — disabled via "driver_vrlink": {"enable": false}, confirmed not loaded (no VRLINKQ_* devices). Desyncs unchanged. This is not the VPN scenario from #910 — no VPN interface was up during any of these runs, and disabling vrlink did not help.
  • Reinstalling SteamVR — the 303 is not an install-integrity problem.

Possibly relevant (hypothesis, not proven): ALVR's driver advertises older direct-mode interfaces than the drivers shipped with 2.16.7:

alvr_server: IVRDisplayComponent_002  IVRDriverDirectModeComponent_007
lighthouse : IVRDisplayComponent_003  IVRDriverDirectModeComponent_009
vrlink     : IVRDisplayComponent_003  IVRDriverDirectModeComponent_009

If something in 23791826's compositor/vrserver registration path began assuming _003/_009, that would explain a driver that still loads and produces an HMD and a video stream, while the compositor never completes its handshake with vrserver. I have not verified this — the bisect is solid, the explanation is speculation.

To Reproduce

  1. Install ALVR v20.14.1 (Linux streamer) and SteamVR 2.16.7 build 23791826.
  2. Launch SteamVR from the ALVR dashboard and connect a Quest 2, over either USB 3.2 or Wi-Fi.
  3. Observe timeout - vrcompositor process is not running in vrserver.txt and Unable to get compositor interface (303) in vrmonitor.txt, roughly 10 s after vrcompositor.txt logs Startup Complete.
  4. Observe continuous Desync detected. Attempting recovery. in the ALVR streamer log, and severe lag / stale-frame reprojection in the headset.
  5. Switch SteamVR to the previous Steam branch (build 22542555) and repeat step 2. All symptoms disappear.

Expected behavior

vrserver should register vrcompositor after it reports Startup Complete, no 303 should be raised, and frame pacing should proceed normally — as it does on build 22542555 with an otherwise identical configuration.

System Information

  • Steam client version (build number or date): 1784778118
  • SteamVR version: 2.16.7, build 23791826 (broken) — verified working on build 22542555 via the previous branch
  • Distribution (e.g. Ubuntu): openSUSE Tumbleweed, kernel 7.1.4-1-default, KDE Plasma on Wayland
  • GPU / driver: AMD Radeon RX 9070 (RADV, gfx1201), Mesa 26.1.5 (radeonsi, ACO, DRM 3.64)
  • Headset: Meta Quest 2 via ALVR v20.14.1

paste.txt steam-runtime-system-info

steam-minidumps.tar.gz

steam-logs.tar.gz

Additional context

A note on the template's request to test the latest beta: build 23791826 was the current build when this was found. I am running the previous branch now because it is the only configuration in which the headset is usable. Happy to switch back to beta and gather anything specific you need — just say what to capture.

Two existing issues look related but are not the same thing:

  • #910 — same build, but attributes the failure to vrlink binding VPN interfaces. My case has vrlink disabled and no VPN present, and still fails, so that cannot be the whole cause.
  • alvr-org/ALVR#3297 — tracks the Desync detected warning from the ALVR side.
Kkisak-valve maintainer 2026-07-25 github

Hello @zitr0y, this issue is already being tracked at #901 and needs to be resolved on ALVR's side.

Mmichelbob 2026-08-29 github

Confirming this on a different setup, plus a data point on the previous branch that I think is new.

Environment: Arch Linux, kernel 7.1.9, RTX 4090 + Raphael iGPU, NVIDIA 610.57.04, KDE Plasma 6.7.4 (Wayland), ALVR 20.14.1 (alvr-bin), headset is an Apple Vision Pro via alvr-visionos.

SteamVR 2.16.7 (default branch): reproduces exactly as described. vrmonitor.txt reports Unable to get compositor interface (303) and the state machine never leaves SteamVRSystemState_NotReady. Notably the compositor itself is fine — direct mode is acquired through ALVR's drm-lease shim, Startup Complete (0.29 seconds), the session stays alive for minutes, and video does reach the headset (the SteamVR void grid is visible). Launching a VR title works on the desktop side (the app connects to vrserver) but never reaches the headset, because the system never becomes Ready.

SteamVR 2.12.14 (previous, v1781734990 → v1755290071): the 303 is indeed gone. But it fails one step earlier instead, so it is not a usable workaround here:

HMD swapchain mode:2 count:3
Swapchain failed to be created: fffffff9
CHmdWindowSDL::CreateSwapChainBufferResources - Invalid swapchain
Direct mode: disabled
CHmdWindowSDL: Failed to inititalize X presentation support
Failed to start compositor: VRInitError_Compositor_CannotConnectToDisplayServer

fffffff9 is -7, i.e. VK_ERROR_EXTENSION_NOT_PRESENT. Status alert is 497 (Failed to connect to window manager); on the Wayland path it surfaces as 496 (Failed to connect to headset display) because 2.12.14 does not use SRT_LAUNCHER_SERVICE_ALONGSIDE_STEAM, so ALVR's Vulkan layer never gets loaded into vrcompositor at all.

X11 path fails identically on both versions. With WAYLAND_DISPLAY= QT_QPA_PLATFORM=xcb plus vrmonitor.sh %command% and the ALVR layer explicitly requested (VK_INSTANCE_LAYERS=VK_LAYER_ALVR_capture), Tried to find direct display through Vulkan WSI does return a valid display — and then both 2.16.7 and 2.12.14 die on the same Swapchain failed to be created: fffffff9.

So on this machine there is no SteamVR version that works with ALVR 20.14.1: the new one gets a display but never reaches Ready, the old one never gets a swapchain.

The interface-version theory in this thread matches what vrserver.txt shows here:

driver alvr_server ... IVRDriverDirectModeComponent_007
driver vrlink      ... IVRDriverDirectModeComponent_009
driver lighthouse  ... IVRDriverDirectModeComponent_009

Unrelated but worth noting so it doesn't confound the above: vrcompositor also segfaults in libnvidia-glcore.so during distortion rendering on NVIDIA 590+ (alvr-org/ALVR#3230). I patched that separately before these tests, so none of the results here are affected by it.

Nothing extracted yet.