ValveSoftware / SteamVR-for-Linux

Issue tracker for the Linux port of SteamVR
918 stars 45 forks source link

WaylandHMDLeaseDevice::LeaseDevice_DrmFD: No libdrm.so on Bazzite #708

Open Onihikage opened 2 months ago

Onihikage commented 2 months ago

Describe the bug SteamVR fails to initialize, showing several errors at various stages of interaction.

To Reproduce Steps to reproduce the behavior:

  1. Start SteamVR
  2. Error window appears in Steam: SteamVR Error - SteamVR failed to initialize for unknown reasons. (Error: Not Initialized (109) (109)) Screenshot provided.
  3. Wait 10-30 seconds for tracking to be established, then multiple windows appear: The main SteamVR status window showing all the devices, the SteamVR room setup, the SteamVR settings window, and an unlabeled window that is unkillable by any means except logging out that is killed the instant it appears, if using the Steam Beta Client. Screenshot provided.
  4. The SteamVR window's status box displays the following: Failed to connect to headset display // Your headset might not be connected, or your desktop environment might not support VR. A (496) is displayed in the lower-right corner.
  5. The main SteamVR window shows all the devices as expected (Valve Index, controllers, lighthouses), and even shows the headset as active when it's moved around. However, the headset display never turns on, and the lights on the front stay blue.
  6. SteamVR Room Setup never registers that the headset or controllers are active, so it will not allow me to proceed.
  7. Close SteamVR Room Setup and wait a few seconds. Usually, but not always, another error window will appear, reading: SteamVR failed initialization with error code VRInitError_IPC_CompositorInvalidConnectResponse: "Shared IPC Compositor Invalid Connect Response (307)" // Please verify SteamVR is properly installed and try again. Screenshot provided.

Expected behavior SteamVR should work properly and be playable.

System Information:

Screenshots Screenshots were taken with the non-beta client, but aside from the unlabeled Xorg window described in reproduction step 3, and the SteamVR status window having a proper icon in the taskbar instead of the Xorg logo, the visuals are the same when using the beta client.

2024-06-11_08-52-10

2024-06-11_08-59-15

2024-06-11_09-00-52

Additional context SteamVR works properly in Windows 11 on this machine. I'm not using any adapters or third-party dongles with the Index as far as I'm aware, just what was included with the Index kit.

My hardware is entirely off-the-shelf components, and Bazzite is an immutable distro from Universal Blue based on Fedora Atomic Desktops, so it should be fairly easy to replicate my environment. Please let me know if there is any more information I can provide.

kisak-valve commented 2 months ago

Hello @Onihikage, [Error] - WaylandHMDLeaseDevice::LeaseDevice_DrmFD: No libdrm.so in your vrcompositor.txt log looks relevant.

KyleGospo commented 2 months ago

I can confirm libdrm is installed in-image, but perhaps we need another version or symlink for SteamVR?

kylegospo@daedalus:/usr/lib$ ls -la | grep libdrm
lrwxrwxrwx.  7 root root        22 Mar  4 20:52 libdrm_amdgpu.so.1 -> libdrm_amdgpu.so.1.0.0
-rwxr-xr-x.  3 root root     48072 Dec 31  1969 libdrm_amdgpu.so.1.0.0
lrwxrwxrwx.  7 root root        21 Mar  4 20:52 libdrm_intel.so.1 -> libdrm_intel.so.1.0.0
-rwxr-xr-x.  3 root root    156664 Dec 31  1969 libdrm_intel.so.1.0.0
lrwxrwxrwx.  7 root root        23 Mar  4 20:52 libdrm_nouveau.so.2 -> libdrm_nouveau.so.2.0.0
-rwxr-xr-x.  3 root root     40064 Dec 31  1969 libdrm_nouveau.so.2.0.0
lrwxrwxrwx.  7 root root        22 Mar  4 20:52 libdrm_radeon.so.1 -> libdrm_radeon.so.1.0.1
-rwxr-xr-x.  3 root root     52436 Dec 31  1969 libdrm_radeon.so.1.0.1
lrwxrwxrwx.  7 root root        15 Mar  4 20:52 libdrm.so.2 -> libdrm.so.2.4.0
-rwxr-xr-x.  3 root root    102876 Dec 31  1969 libdrm.so.2.4.0
kylegospo@daedalus:/usr/lib$ cd /usr/lib64/
kylegospo@daedalus:/usr/lib64$ ls -la | grep libdrm
lrwxrwxrwx.  7 root root        22 Mar  4 20:52 libdrm_amdgpu.so.1 -> libdrm_amdgpu.so.1.0.0
-rwxr-xr-x.  3 root root     48736 Dec 31  1969 libdrm_amdgpu.so.1.0.0
lrwxrwxrwx.  7 root root        21 Mar  4 20:52 libdrm_intel.so.1 -> libdrm_intel.so.1.0.0
-rwxr-xr-x.  3 root root    153896 Dec 31  1969 libdrm_intel.so.1.0.0
lrwxrwxrwx.  7 root root        23 Mar  4 20:52 libdrm_nouveau.so.2 -> libdrm_nouveau.so.2.0.0
-rwxr-xr-x.  3 root root     40768 Dec 31  1969 libdrm_nouveau.so.2.0.0
lrwxrwxrwx.  7 root root        22 Mar  4 20:52 libdrm_radeon.so.1 -> libdrm_radeon.so.1.0.1
-rwxr-xr-x.  3 root root     53160 Dec 31  1969 libdrm_radeon.so.1.0.1
lrwxrwxrwx.  7 root root        15 Mar  4 20:52 libdrm.so.2 -> libdrm.so.2.4.0
-rwxr-xr-x.  3 root root     95376 Dec 31  1969 libdrm.so.2.4.0
kisak-valve commented 2 months ago

The log does specifically say libdrm.so, which can exist in other distros. If you were to test it, then it would be handled similarly to the libdrm.so.2 symlink you're showing in those directory listings.

KyleGospo commented 2 months ago

Much thanks @kisak-valve

@Onihikage On your end if you want to confirm the fix:

sudo rpm-ostree usroverlay
sudo ln -s libdrm.so.2.4.0 /usr/lib64/libdrm.so
sudo ln -s libdrm.so.2.4.0 /usr/lib/libdrm.so

If that resolves the issue I will roll out an update to add this to the image. @kisak-valve Nothing should differ here between Bazzite & Fedora so I'll try to communicate this fix to them as well.

Onihikage commented 2 months ago

@KyleGospo I've run those commands but nothing seems to have changed when trying to run SteamVR. Uploading Steam logs again:

steam-logs.tar.gz steam-minidumps.tar.gz Steam Runtime Diagnostics 2.txt

I have noticed that vrcompositor.txt doesn't seem to make any mention of libdrm.so this time.

rgbRandomizer commented 2 months ago

I am on Fedora 40 and am receiving the same error codes (Steam: 109, SteamVR: 496). I created the symlinks for libdrm.so from libdrm.so.2.4.0. Like above, the missing libdrm.so error from vrcompositor.txt goes away. But it fails to find a direct mode surface in wayland.

Onihikage commented 2 months ago

@rgbRandomizer Remember to post your logs. Run tar -zcvf ~/Desktop/steam-logs.tar.gz ~/.steam/steam/logs in a terminal and upload the tar.gz file it puts on your desktop. The more data we have around why this problem is happening, the closer we'll be to a solution.

rgbRandomizer commented 2 months ago

steam-logs.tar.gz Please see attached

Onihikage commented 2 months ago

Well, here's an update. My system, for whatever reason, wasn't able to read the EDID from the Index to identify what kind of display it is. The EDID file at /sys/class/drm/card1-DP-3 (the interface my Index is plugged into) showed in Dolphin as an empty document, while the EDIDs for each of my monitors showed as an unknown file, size 0 B in both cases. Running sudo cat /sys/class/drm/card1-DP-3/edid returned no output at all, while running sudo cat /sys/class/drm/card1-DP-1 returned the (garbled, as expected) EDID information from my primary monitor.

This was the core of SteamVR not being able to connect to the display - Wayland couldn't identify the display's capabilities without a readable EDID. Why the EDID was unreadable, I haven't determined. I had previously tried unplugging the HMD and plugging it back in several times before; I did it again today and it happened to work this time, but I don't know why. It may have something to do with whether the generic display was disabled or enabled in KDE's Display Configuration. If the issue occurs again, I'll try to get more details on the exact circumstances. If it doesn't - well, try what I tried.

@rgbRandomizer Take note of whether the Index HMD shows up in Display Configuration, and whether it's enabled or disabled, then try either unplugging the power for the HMD or unplugging the connector between the HMD and the three-way breakout section, so that the headset powers completely off. Wait a bit, then carefully plug it back in. If it worked, the EDID file should show in Dolphin as an Unknown file instead of an Empty document, the HMD shouldn't show up in Display Configuration at all (not even the display dropdown), and the SteamVR errors should be resolved. It will show in xrandr --prop as a disconnected non-desktop display with all the correct resolutions it's supposed to have. If there's no change, toggle its enabled/disabled state in Display Configuration and try it again.

rgbRandomizer commented 2 months ago

@Onihikage I swear two days ago that there wasn't a third option under the Display Configuration (for me it just shows up as nvidia). But I just updated the nvidia driver to 550.90 this morning.

So after updating drivers, I did see a third entry in the display configuration. Disconnecting the headset, with the breakaway, then reconnecting removed the third entry. I did verify that the edid was not empty. But I still received the 109/496 errors until I rebooted. Now it seems to start up and display in the headset. Its very strange.

I am going to attach updated logs just in case. There is some crashes with vrwebhelper in the log but I believe this is due to iracing (app 266410) that I had started up to test. steam-logs.tar.gz