I have a virtual source and a virtual sink which I’m using to forward audio to/from chat apps (Matrix, Discord, Zoom, etc.) so I can control the mic/output volume independently of everything else on my system. I have them setup and working fine using pipewire.conf.d files. The problem is that using wpctl
to change volume requires having an ID, but those aren’t static. Normally the solution would be to use @DEFAULT_AUDIO_SOURCE@ (or sink), but that wouldn’t work in this case. Is there a way to adjust volume/toggle mute without having the ID? Or alternatively, is there a way to get the ID for a specific node name that I can put in a bash script?
If I’m asking this in the wrong place, is there a better place to go?
I did something similar a while ago but for changing volume on a single application, should work for devices as well though since both are just nodes.
Try this:
#!/bin/sh node_id=$(pw-dump | jq '.[] | select(.type == "PipeWire:Interface:Node" and .info.props."node.name" == "Virtual-Sink-1") | .id') echo "Adjusting volume for $node_id" wpctl set-volume $node_id 10%-
Replace
Virtual-Sink-1
with the name of your audio device and10%-
with the operation you want to perform.This works, thanks!