Hey there
The issue is pretty easy to replicate, both are related and happen consistently
Requirements: Connect a Meta Quest headset via Steam Link
(There's a chance other wireless headsets are affected as well such as Pico or Vive, but haven't seen them reported, maybe due to low usage)
What happens: External applications don't connect their nodes correctly, this includes:
Discord, browser and every app outside of Steam not having audio on the HMD
WayVR not having pipewire streams connected for screenshare
Spout2VR | Pipewire video (OBS) not receiving input despite being told to connect
Spout2VR is specially noticeable on VRChat, as any loading screen will disconnect the node from the Pipewire video source on OBS and has to be manually reconnected with tools such as qpwgraph
For the hang when disconnecting, i have more success replicating the issue when I open a game and close it before quitting SteamVR. Steam is also unable to close the process and must be killed with other methods (Terminal, GUI via System monitor or Mission Center)
As far as wired headsets go, I don't have a native SteamVR HMD, but I can connect my Quest 2 via ALVR, where i don't have a single issue regarding pipewire audio or video, suggesting it's an issue with the VRLink driver
Hang when disconnecting/exiting SteamVR is a separate issue in the tracker (and I already have a fix for that, though it's not yet pushed into any beta build).
So, to clarify: when you talk about Discord, what you mean is you have Discord wired in Pipewire to specific outputs, and when connecting via VRLink, those connections go away and Discord is left unconnected? Or do I misunderstand?
Okay, thanks for the edits for clarification!
That gives a good starting point, and I think I see how some of this can be cleaned up. Still interested in other failing use cases if others have some.
This might be some of the last testing i can do for the next couple weeks due to college and stuff
I think the pipewire behavior of Steam is "sandboxed", resulting in Steam being able to communicate with Steam apps, and outside apps communicating with themselves, but not with Steam
For example, if I Screenshare on discord, route discord audio to my Headphones or Speakers, use Firefox or a music app through my headphones, etc. They all get audio and behave just fine even when connected to SteamVR
If i instead tell those apps to route the audio to the HMD they fail to do so. Apps that screenshare "from Steam" (like WayVR Screenshare) fail to create any nodes
This connects to my previous report, so any games launched from Steam will also fail to create nodes, stuff like Spout2PW from a Steam Game (VRChat, Warudo, etc)
Now screensharing from discord to a steam game seems to work fine, but probably because it doesn't intersect with steam directly, and rather use XDG Portals and call the window through other methods, whereas WayVR requires the compositor provided by SteamVR
Things that remain to be tested:
is this issue specific to steam link or is it a whole steamvr wide issue?
oh and i can confirm audio when trying to capture with OBS doesn't work aswell
is this issue specific to steam link or is it a whole steamvr wide issue?
Should only be SteamVR via Steam Link, but if you find anything with other methods, you should bring them up
Discord, browser and every app outside of Steam not having audio on the HMD
One question here: I've heard a number of people complain about VRLink "stealing" pipewire (e.g. assigning things to the Steam Link output) for things run from Steam when they don't want it to. Having SteamVR force-route all system audio to the VRLink output feels like that might be a worse experience in that case?
Well I'd expect it to work like other audio outputs
For example, if I set my default output on KDE to be Steam, I'd like everything to go through steam. If I make a specific app be routed elsewhere, it should do that too
Currently steam just drops the audio sources, never connects the nodes, so you never get audio through Steam
Something else that could be added is audio mirroring like in windows, so steam becomes the main output but also shares everything to a selected audio output
I can confirm I'm seeing the same behavior with my Quest Pro headset, feel free to ping me if you want some logs/screenshot of QPWGraph and other details that might help fix this issue.
I have a fix for this (or really, a complete rewrite of the pipewire handling) in testing now, so hopefully it'll make it into 2.17.3.
What the new behavior will now do is that when VR starts up, it will set the default sink and source to the headset; when SteamVR exits, it will restore the old defaults. It will not try to manually maintain links to VR apps (as currently happens), and if you change the default source or sink it will assume you're deliberately overriding it, and will not further tweak it (including not changing it back after exiting).
The downside of this, however, is that for the small handful of folks who actually wanted the old behavior where only audio from VR applications was routed to the headset, you will now get all audio -- including desktop alerts/sounds (so Discord bloops, "you have email" dings, etc.
appears to be mostly fixed on my end, wayvr and discord play nice with steamvr now, though the built in desktop mirror still doesn't work
yup i can confirm it works.
Works on 2.17.3 for me! ❤️
Yay! Okay, I'll close this out.
Can confirm it works great
WayVR keeps the monitor connections between sessions
Spout2Pw also connects automatically with no issues
Discord audio works flawlessly
If i set discord to a specific output (such as headphones), steamVR doesn't interfere and keeps it that way, even after restarts
Amazing job
Nothing extracted yet.
A number of users have reported issues with Pipewire breaking their existing configurations. As these are mostly just hanging around as side commentary in other issues (notably #876 and #873), I decided I should make a new issue to track some use cases so that there's some actual concrete setups to test with (which aren't buried in comment threads on only tangentially-related Pipewire issue tickets).
So, if you are using Pipewire and SteamVR 2.16.5 (or later, as future beta builds go out), and have a scenario where you're seeing a Pipewire configuration getting "broken" in a way that isn't expected, please add a short summary here. (Maybe even a screenshot of a patchbay visualization before running SteamVR and after it starts.)
This will help actually build some tests to ensure the Pipewire management works the way people expect/want, as much as possible.