I'm trying to wrap my head around the pipewire ecosystem. I think it's great that we're getting a fully featured audio system with all the upsides of pulseaudio and jack, and none of the downsides (that I know of), plus a bunch of completely new features. However, I can't help but think it could have used a little more vision in its interface (or maybe just qpwGraph).
From what I've read, my mental model is that pipewire holds the graph, while a "session manager" manipulates it (create/modify/remove new nodes/ports/links/etc). That's fine. I also understand that wireplumber is such a session manager, and despite having a really convoluted config syntax, it does its job (I assume).
As a simpleton, though, I'm drawn to the wysiwyg interface of qpwGraph, but it's not clear to me how it's supposed to fit into pipewire's vision or how it interacts with wireplumber. It seems to render the current pipewire graph as it is, it can create/remove links between ports, but also it's not a session manager (right?).
I suspect that whatever I can do in qpwGraph I could also do using just wireplumber via conf files and the cli. But dragging my mouse between nodes is so much easier than learning a new syntax. But then I also don't understand what "Active" and "Exclusive" mean. I'm guessing that if Active isn't checked, it won't do anything at all, but if Exclusive isn't checked then...maybe wireplumber can override it? Does that mean if Exclusive IS checked it's able to override wireplumber (look at me, I am the session manager now)? Is that why, if I have a qpwgraph active that links VLC to both OBS and my headset, I hear/see a delay of the link to my headset when a VLC process launches? First wireplumber decides where it should link, and then qpwGraph modifies it several ms after?
I feel like it's currently not clear what qpwGraph is in pipewire terms, but it's also clearly the most intuitive way for someone to use pipewire right now. I think it would be best if qpwGraph was either a standalone, fully featured session manager (not to be used in combination with wireplumber) or just a front end for wireplumber rather than talking to pipewire directly.
Thoughts? Anyone else confused? Am I missing a piece to the puzzle?
I have two usecases that complicate my workflow:
So I get pretty good use out of qpwGraph, but sometimes it seems to interact in non-obvious ways with wireplumber I think.
Edit: oh, and a 3rd case:
For the second part, using separate audio tracks in OBS, I've had a good time just using pactl commands to create the virtual devices, route it in qpwgraph and then save that as a preset. When qpwgraph launches at startup it loads that routing how I left it.
For discord screensharing there's alternatives like discord-screenaudio and webcord (which has a flag you can use to enable audio sharing). Both of those are able to send audio to the proper stream audio through discord so your friends don't hear it through your mic, but they have to be based on the web version of discord so there's no hardware encoding. If your plan is to stream games and stuff, fast motion will cause the stream to be very choppy for viewers. So in that case using the native discord app and routing audio through your mic source is kinda the only way to do it as of now, unfortunately.
I should also mention that for creating the pactl virtual sinks and sources, I just have a simple bash script that runs the pactl commands when I log in so that it happens automatically, that way I dont have to manually create them every time I boot up my computer.
Oh cool, didn't know discord-screenaudio and webcord were options. Thanks!
Btw, there is an official way to run pactl commands on login by putting them in
.config/pulse/default.pa
. Maybe that's what you mean.I used to do this, but when I switched to pipewire I also tried to eliminate pa/jack from my workflow. I still use OBS jack nodes because when I first configured it, the OBS pipewire support was flimsy and the jack nodes show up with consistent names in qpwGraph.