I run KDE desktops with pcie passthrough to physical GPU's on proxmox. I use barrier (now forked to input-leap btw) for keyboard/mouse, and pulseaudio over network for audio. My main baremetal desktop hosts the physical mouse/keyboard + barrier server, and the physical audio device.
How other ppl handle the audio on their GPU passthrough VM's i don't know, i guess most ppl get the audio signal over HDMI/DP, or actually use some USB audio, or do passthrough to a pcie soundcard, or actually have an audio device on their server, and use virtio audio.
To me that's not an option, as several desktop VM's would require more audio hardware and more cables, plus an audio mixer, it's too much of a hassle.
So naturally Pulseaudio over network has been great. But now as Debian Bookworm is released, and pipewire is the new default, there are problems. Pipewire does support audio over network, but it requires setup through fairly complicated config files.
The easiest way to continue using audio over network with pipewire is to use the pipewire-pulse layer. But there is literally NO reasonable guide for this, and i figure now with debian 12, many more people will be struggling with this.
So here is how to do it in Bookworm. There are 2 ways to do it depending if you have upgraded from Bullseye, or have a fresh install of Debian 12.
Previously in Bullseye and earlier, running pulseaudio, it was simply a matter of installing 'paprefs' on both sender and receiver, and check 2 checkboxes on the receiver, and one checkbox on the sender:
paprefs actually just writes these settings to gsettings, from where pulseaudio then reads them:
Method 1:
These gsettings are preserved when upgrading to Bookworm, and can be utilized by simply loading the pulseaudio 'module-gsettings' module on both sender and receiver:
as desktop user, on both sender and receiver create the file
and add the module-gsettings load command:
then as desktop user on both sender and receiver reload the pipewire-pulse service:
Method 2:
If you are running a fresh install of Bookworm, or want to just load the required modules directly bypassing gsettings:
on the receiver:
on the sender:
then as desktop user on both sender and receiver reload the pipewire-pulse service:
You should now have TCP audio over network support in Bookworm, without the need to disable pipewire and re-enable pulseaudio.
Edit: a pipewire developer just updated a much needed page based on our discussion, that also prompted me to write the above:
Guide Pulse Tricks · Wiki · PipeWire / pipewire · GitLab
Edit2: changed 'RTP audio over network' to 'TCP audio over network'
How other ppl handle the audio on their GPU passthrough VM's i don't know, i guess most ppl get the audio signal over HDMI/DP, or actually use some USB audio, or do passthrough to a pcie soundcard, or actually have an audio device on their server, and use virtio audio.
To me that's not an option, as several desktop VM's would require more audio hardware and more cables, plus an audio mixer, it's too much of a hassle.
So naturally Pulseaudio over network has been great. But now as Debian Bookworm is released, and pipewire is the new default, there are problems. Pipewire does support audio over network, but it requires setup through fairly complicated config files.
The easiest way to continue using audio over network with pipewire is to use the pipewire-pulse layer. But there is literally NO reasonable guide for this, and i figure now with debian 12, many more people will be struggling with this.
So here is how to do it in Bookworm. There are 2 ways to do it depending if you have upgraded from Bullseye, or have a fresh install of Debian 12.
Previously in Bullseye and earlier, running pulseaudio, it was simply a matter of installing 'paprefs' on both sender and receiver, and check 2 checkboxes on the receiver, and one checkbox on the sender:
paprefs actually just writes these settings to gsettings, from where pulseaudio then reads them:
Code:
gsettings list-children org.freedesktop.pulseaudio.module-groups
These gsettings are preserved when upgrading to Bookworm, and can be utilized by simply loading the pulseaudio 'module-gsettings' module on both sender and receiver:
as desktop user, on both sender and receiver create the file
~/.config/pipewire/pipewire-pulse.conf.d/10-gsettings.conf
and add the module-gsettings load command:
Code:
pulse.cmd = [ { cmd = "load-module" args = "module-gsettings" flags = [ "nofail" ] } ]
Code:
systemctl --user restart pipewire-pulse.service
If you are running a fresh install of Bookworm, or want to just load the required modules directly bypassing gsettings:
on the receiver:
~/.config/pipewire/pipewire-pulse.conf.d/10-native-protocol-tcp.conf
Code:
pulse.cmd = [ { cmd = "load-module" args = "module-native-protocol-tcp" flags = [ "nofail" ] } ]
~/.config/pipewire/pipewire-pulse.conf.d/20-zeroconf-publish.conf
Code:
pulse.cmd = [ { cmd = "load-module" args = "module-zeroconf-publish" flags = [ "nofail" ] } ]
on the sender:
~/.config/pipewire/pipewire-pulse.conf.d/10-zeroconf-discover.conf
Code:
pulse.cmd = [ { cmd = "load-module" args = "module-zeroconf-discover" flags = [ "nofail" ] } ]
then as desktop user on both sender and receiver reload the pipewire-pulse service:
Code:
systemctl --user restart pipewire-pulse.service
Edit: a pipewire developer just updated a much needed page based on our discussion, that also prompted me to write the above:
Guide Pulse Tricks · Wiki · PipeWire / pipewire · GitLab
Edit2: changed 'RTP audio over network' to 'TCP audio over network'
Last edited: