Repository navigation
GNOME 50 Wayland: headset output lost while worn, take_headset_again lease loop crashes gnome-shell (SIGSEGV) → logout #1
Description
Summary
On GNOME 50.1 (Wayland, AMD), a few seconds into a SteamVR session the headset output is lost (VK_ERROR_SURFACE_LOST_KHR) while the headset is being worn. The driver then re-requests the HDMI-1 lease in a tight loop. Every retry fails with No Vulkan display modes available, and mutter logs Failed to revoke DRM lease ... No such file or directory twice per retry. Within the same second gnome-shell segfaults (signal 11), which ends the desktop session and drops back to the GDM login screen.
This reproduced 2 out of 2 times today, ~15 s after SteamVR started both times.
Environment
- RiftLinux 0.1.0 (.deb), SteamVR 2.18.4 (build 1792185270), driver registered via
riftlinux-setup;riftlinux-setup checkall OK - Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic
- GNOME Shell 50.1 / mutter 50.1-0ubuntu2.4, Wayland session (no X11 session available on GNOME 50)
- AMD Radeon RX 6800 XT (Navi 21), amdgpu, Mesa/RADV 26.0.8
- Rift CV1 on HDMI-A-1, 2 sensors
What happens
- SteamVR starts; head/controllers are tracked and frames are presented to the headset normally (
889 frames shown vs planned). - Without the headset being removed, presenting fails:
WARN [direct_wayland_present] Presenting to the headset failed (VK_ERROR_SURFACE_LOST_KHR): taking it again
No kernel/amdgpu hotplug or error message is logged around this point, so I can't tell what cut the output. take_headset_againimmediately loops (~5+ iterations within one second): lease granted → withdrawn by the compositor → no display modes → fail → ask again.- mutter fails to revoke each lease, then gnome-shell crashes with SIGSEGV → session logout.
In the first occurrence, SteamVR's compositor also logged Failed Watchdog timeout in thread Render in Flush after 5.359418 seconds. Aborting. at the same moment.
Log excerpt (journalctl, second occurrence)
18:33:08 vrstartup-linux: INFO [renderer_wait_for_present] Display timing: 889 frames shown vs planned, median +0.02 ms, ... max +11.28
18:33:10 vrstartup-linux: WARN [direct_wayland_present] Presenting to the headset failed (VK_ERROR_SURFACE_LOST_KHR): taking it again
18:33:10 vrstartup-linux: INFO [take_headset_again] Headset output given up; it is taken again when the desktop offers it
18:33:10 vrstartup-linux: INFO [_lease_connector_done] [/dev/dri/card1] connector HDMI-1 (OVR Rift) id: 515
18:33:10 vrstartup-linux: INFO [take_headset_again] Headset offered again: asking for connector HDMI-1 (OVR Rift)
18:33:10 vrstartup-linux: INFO [_lease_connector_withdrawn] Connector HDMI-1 has been withdrawn by the compositor
18:33:10 vrstartup-linux: ERROR [get_primary_display_mode] No Vulkan display modes available
18:33:10 vrstartup-linux: ERROR [comp_window_direct_create_surface] Failed to find display mode!
18:33:10 vrstartup-linux: ERROR [comp_window_direct_wayland_create_surface] Failed to create surface: VK_ERROR_INITIALIZATION_FAILED
18:33:10 vrstartup-linux: ERROR [take_headset_again] The headset's display could not be taken again: VK_ERROR_INITIALIZATION_FAILED
18:33:10 vrstartup-linux: ERROR [vblank_event_func] vkRegisterDisplayEventEXT: VK_ERROR_OUT_OF_HOST_MEMORY
18:33:10 gnome-shell: Failed to revoke DRM lease on /dev/dri/card1: Failed to revoke lease: No such file or directory
18:33:10 gnome-shell: Failed to revoke DRM lease on /dev/dri/card1: Failed to revoke lease: No such file or directory
... (lease done → withdrawn → no modes → revoke failed, repeated 4 more times) ...
18:33:10 gnome-shell: GNOME Shell crashed with signal 11
18:33:10 gnome-shell: == Stack trace for context 0x5ecb09c75410 ==
18:33:10 gnome-shell: #0 5ecb09d6d2c8 i resource:///org/gnome/shell/ui/init.js:20 (1fce05b8d8d0 @ 48)
Suggestions
- Back off between
take_headset_againattempts (and/or stop after N failures). Right now the loop is tight enough to trip a mutter crash. The crash itself is arguably a mutter bug, but the driver can avoid triggering it. - Don't re-request the lease when the connector has no modes. Wait for a real hotplug/
connectorevent instead. - It would help to log why the surface was lost (proximity sensor vs. HDMI drop) so this case can be told apart from the intended "headset taken off" handback.
I have the gnome-shell apport crash file (34 MB) and a SteamVR minidump (CrashID bp-a377d4b8-370f-435c-baad-e38a72261024) if they'd help.
Activity
AIIX commentedon Oct 25, 2026
Thanks for the detailed report, it's very helpful.
I believe this one is on the RiftLinux side: after the headset's output is lost, the driver keeps asking GNOME for the headset over and over, and that ends up crashing gnome-shell. 0.1.1 has the same problem. I'll post here when there's a build to test and as I don't have access to an AMD card to repro it consistently.
Could you please send:
~/.local/share/Steam/logs/vrserver.txtfrom a session where it happenedriftlinux-setup --json checkIf you can, please also report the gnome-shell crash to Ubuntu by running
ubuntu-bugon the gnome-shell.crashfile in/var/crash.Spuds185 commentedon Oct 25, 2026
Spuds185 commentedon Oct 25, 2026
Here are the files you asked for (paths with my home dir replaced by
~):Gist: https://gist.github.com/Spuds185/97061402424c83990377abd2568905dd
vrserver.txt: SteamVR log covering 18:15–18:47, which includes both lease-loop crashes (18:28:34, 18:33:10) and a third session (below)riftlinux-setup-check.json:riftlinux-setup --json checkoutput (taken now, with direct mode off)journal-vr-sessions.txt: journal lines fromvrstartup-linux/vrcompositor/ gnome-shell lease errors / kernel for 18:27–18:47, with frame-timing and breakpad noise filtered outWhat happened after the report
riftlinux-setup direct-mode offand started SteamVR again (headset worn). It ran fine for a few minutes.Failed to revoke DRM lease on /dev/dri/card1. At 18:47:14 vrserver shut down gracefully, and at 18:47:40 my session ended (logged out again).BUG: unable to handle page faultincgroup_file_release, thendown_write) while the user session was being torn down. The next few boots had more oopses,amdgpu probe failed with error -22, and an initramfs that failed to decompress. Several system files (bash, kernel modules, libllvm21, initramfs) had to be reinstalled before the machine booted normally again.To be fair to RiftLinux: I don't think the kernel oopses and file corruption are caused by the driver. A userspace program can't corrupt files like bash on disk, and this machine has had memory-instability trouble before. I'm mentioning it so you know this session ended badly, but please don't spend time chasing that part. The lease-loop → gnome-shell crash is the reproducible bit, and with direct mode off it still seems to hit the same path (the revoke error at 18:46:08).
Separate small bug:
riftlinux-setup install --openxr steamvrAt 18:27 this crashed with a PermissionError. The backup step tries to write next to the resolved target of the active_runtime symlink, which is in a root-owned directory:
(The runtime did end up set to SteamVR, so it was probably applied on a retry.)
I'll file the gnome-shell crash with
ubuntu-bugas you suggested and post the Launchpad link here.Spuds185 commentedon Oct 25, 2026
AIIX commentedon Oct 25, 2026
0.1.2 is up as a pre-release with the fix: https://github.com/AIIX/RiftLinux/releases/tag/v0.1.2
I could only test it briefly, on a borrowed machine: Ubuntu 26.04 booted from a USB stick, GNOME 50, and an AMD RX 9070. Taking the headset off and putting it back on worked, the desktop stayed up, and SteamVR kept running normally. Since it was someone else's machine, that was a quick test only, so your results on your own setup will matter.
Install it over 0.1.0 the same way as before. If you get a chance, please take the headset off and put it back on a few times while SteamVR runs, and let me know how it goes.