Skip to content

GNOME 50 Wayland: headset output lost while worn, take_headset_again lease loop crashes gnome-shell (SIGSEGV) → logout #1

Open

Description

@Spuds185

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 check all 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

  1. SteamVR starts; head/controllers are tracked and frames are presented to the headset normally (889 frames shown vs planned).
  2. 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.
  3. take_headset_again immediately loops (~5+ iterations within one second): lease granted → withdrawn by the compositor → no display modes → fail → ask again.
  4. 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_again attempts (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/connector event 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

  1. self-assigned this
    on Oct 25, 2026
  2. added
    bugA reproducible defect
    needs-triageWaiting for the maintainer
    on Oct 25, 2026
  3. AIIX commented on Oct 25, 2026

    @AIIX
    Owner

    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:

    1. ~/.local/share/Steam/logs/vrserver.txt from a session where it happened
    2. The output of riftlinux-setup --json check

    If you can, please also report the gnome-shell crash to Ubuntu by running ubuntu-bug on the gnome-shell .crash file in /var/crash.

  4. Spuds185 commented on Oct 25, 2026

    @Spuds185
    Author
  5. Spuds185 commented on Oct 25, 2026

    @Spuds185
    Author

    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 check output (taken now, with direct mode off)
    • journal-vr-sessions.txt: journal lines from vrstartup-linux / vrcompositor / gnome-shell lease errors / kernel for 18:27–18:47, with frame-timing and breakpad noise filtered out

    What happened after the report

    1. I ran riftlinux-setup direct-mode off and started SteamVR again (headset worn). It ran fine for a few minutes.
    2. I launched a game. At 18:46:08 gnome-shell logged one more 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).
    3. One second later, at 18:47:41, the kernel oopsed (BUG: unable to handle page fault in cgroup_file_release, then down_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 steamvr

    At 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:

    File "/usr/bin/riftlinux-setup", line 621, in fix
        backup(p.openxr_active)
    File "/usr/bin/riftlinux-setup", line 79, in backup
        shutil.copy2(real, f"{real}.bak-riftlinux-{STAMP}")
    PermissionError: [Errno 13] Permission denied: '/usr/share/openxr/1/openxr_monado.json.bak-riftlinux-20261024-182707'
    

    (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-bug as you suggested and post the Launchpad link here.

  6. Spuds185 commented on Oct 25, 2026

    @Spuds185
    Author
  7. AIIX commented on Oct 25, 2026

    @AIIX
    Owner

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugA reproducible defect

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions