protonscr

[BUG] SteamVR 2.16.7 (BuildID 23791826) fails to initialize with ALVR — vrlink binds VPN interfaces, ExpectWirelessHeadset race kills session

steamvrclosed bug
ValveSoftware/SteamVR-for-Linux#910 · opened 2026-06-25 by bushibot · updated 2026-06-25 · 1 comments · github
Bbushibot 2026-06-25 github

SteamVR version: 2.16.7, BuildID 23791826 (public branch)
OS: Bazzite (Fedora Atomic), kernel via rpm-ostree image 44.20260608
GPU: AMD RX 9070 XT, Mesa 26.1.0, amdgpu/RADV
Headset: Meta Quest 2 via ALVR v20.14.1 (unchanged install since Nov 2025)

Summary

SteamVR + ALVR worked reliably for months. It broke completely the moment a
server-side update landed on 2026-06-22, confirmed via Steam's own
content_log.txt:

2026-06-22 19:41 - AppID 250820 finished update, BuildID 23791826
2026-06-23 22:53 - AppID 250820 finished update, BuildID 22542555 (rollback)
2026-06-23 23:13 - AppID 250820 finished update, BuildID 23791826 (re-pushed)

The Steam Linux Runtime sniper container (AppID 1628350) updated at the same
moment (19:41) to BuildID 23629198 and has not changed since.

ALVR's driver files have an unchanged mtime of Nov 2025 — ruling out an
ALVR-side regression.

Bug 1: vrlink driver binds sockets to all interfaces, including VPN tunnels

vrserver.txt shows the built-in vrlink driver binding its UDP data link
and the embedded Mongoose web server (port 27062, used by the dashboard)
to every network interface present on the host, including a Tailscale VPN
tunnel:

vrlink: SVLDataLinkTransferUDP::Init 192.168.1.98 dev eno1 10400 ...
vrlink: SVLDataLinkTransferUDP::Init fe80::... dev tailscale0 10400 ...

A transient Tailscale relay connectivity issue (unrelated to the headset)
produced:

[Error] - Mongoose mongoose.c:783:mg_error : 4 216 socket error
[Info] - vrlink: Performing shutdown.

...which 5 seconds later killed the master vrmonitor process, triggering
SteamVR's own failsafe:

[Warning] - Lost master process 14745 due to restart hint. Quitting all in 10 seconds if it
doesn't reconnect.
[Info] - Quitting all OpenVR processes because master process 14745 disconnected

Full SteamVR teardown, every component killed. vrlink has no business
binding to a VPN interface that has nothing to do with the HMD.

Workaround: disabling the (UI-hidden) vrlink driver via
steamvr.vrsettings: "driver_vrlink": {"enable": false}

Bug 2: ExpectWirelessHeadset read race kills every session, even with vrlink disabled

With vrlink disabled, every single connection attempt (5/5 reproduced)
still fails identically:

[Info] - Tracked device activated: 0
[Info] - CheckHmdDriverName: ActualTrackingSystemName: alvr_server (0)
[Info] - ExpectWirelessHeadset: 0
[Info] - [System] Transition from 'SteamVRSystemState_NotReady' to
'SteamVRSystemState_Restart'.
...
[Info] - [System] Transition from 'SteamVRSystemState_Restart' to
'SteamVRSystemState_Shutdown'.

vrmonitor queries ExpectWirelessHeadset ~2.6ms after the tracked device
activates — seemingly before the ALVR driver (driver_alvr_server.so,
emulation_mode: Quest2) has finished setting that property — reads false,
and treats the wireless HMD as a wired display that just got plugged in.
That triggers the internal "reload display properties" restart sequence,
which never recovers and shuts the whole session down instead. Black screen
in headset, then disconnect.

User-facing error originally reported: SteamVR failed to initialize for unknown reasons. (Error: vrclient Shared Lib Not Found (102)(1023))

Repro

  1. Connect Meta Quest 2 or pico 4
    via ALVR v20.14.1 (default Quest2 emulation mode)
  2. Launch SteamVR via Steam (no custom launch options needed to reproduce)
  3. Connect headset client
  4. Observe ExpectWirelessHeadset: 0 in vrmonitor.txt immediately after
    device activation, followed by failed Restart→Shutdown transition

Happy to attach full vrserver.txt/vrmonitor.txt logs on request.
Bulk of data is

steamvr_bug_report.zip

Kkisak-valve maintainer 2026-06-25 github

Hello @bushibot, this is the same issue as #901. Closing as a duplicate.

Nothing extracted yet.