LIBPIPEWIRE-MODULE-PULSE-TUNNEL(7)
π libpipewire-module-pulse-tunnel β the tea β
okay bestie, so this is a page from the Miscellaneous Information Manual, and it's all about libpipewire-module-pulse-tunnel. yes the name is a mouthful, we're gonna say "pulse-tunnel" and move on. it lives in section 7 (miscellaneous), so it's a module, not a command you run at a shell. keep that in mind bestie π
β¨ NAME β¨
libpipewire-module-pulse-tunnel β Pulse Tunnel π³οΈβ¨ (yes that's really it, that's the whole name section, iconic brevity)
πΈ DESCRIPTION πΈ
k so here's the vibe: the pulse-tunnel module gives you a source or a sink that tunnels all the audio over to a remote PulseAudio connection. like, all of it. every last lil sample. it's giving β¨teleportation but for soundβ¨ π¦
it's usually used with PulseAudio or module-protocol-pulse on the remote end, because someone's gotta be there to accept the connection, bestie π
and here's the collab: this module is usually used together with module-zeroconf-discover, which will automatically load the tunnel with the right parameters based on zeroconf information. so like, it does the setup for you. queen behavior π
π MODULE NAME π
libpipewire-module-pulse-tunnel
that's her full government name fr fr π (copy it exactly, no nicknames in the config)
π MODULE OPTIONS π
the main-character settings, bestie. every single one:
tunnel.modeβ the desired tunnel to create. must besourceorsink. (Default:sink) β so like, are you making a fake mic or a fake speaker, pick one π€πpulse.server.addressβ the address of the PulseAudio server you're tunneling to. the destination. the ~location~ πpulse.latencyβ the end-to-end latency, in milliseconds, to maintain. (Default:200)reconnect.interval.msβ when the remote connection breaks, retry connecting at this interval, in milliseconds. a value of0disables recovery and will result in a module unload. (Default:0) (Since 1.1.0) β note the typo situation, the original says "millisconds", we're keeping the number straight though:0= no recovery = the module gets unloaded πstream.propsβ extra properties for the local stream. sprinkle your extras in here β¨
lowkey important:tunnel.modeonly acceptssourceorsink. it says must, and it means it. don't be cute with it π
π GENERAL OPTIONS π
these are the options with well-known behavior β the classic ones everyone knows, still listed so you don't forget:
remote.nameaudio.formataudio.rateaudio.channelsaudio.layoutaudio.positionnode.latencynode.namenode.descriptionnode.groupnode.virtualnode.networkmedia.classtarget.objectβ to specify the remotenode.nameorserial.idto link to π―
π¦ EXAMPLE CONFIGURATION OF A VIRTUAL SINK π¦
here's what it looks like irl bestie β a whole virtual sink, set up in a config file. the path is a comment at the top, so keep it π
# ~/.config/pipewire/pipewire.conf.d/my-pulse-tunnel.conf
context.modules = [
{ name = libpipewire-module-pulse-tunnel
args = {
tunnel.mode = sink
# Set the remote address to tunnel to
pulse.server.address = "tcp:192.168.1.126"
#pulse.latency = 200
#reconnect.interval.ms = 0
#audio.rate=<sample rate>
#audio.channels=<number of channels>
#audio.position=<channel map>
#target.object=<remote target name>
stream.props = {
# extra sink properties
}
}
}
]
the # lines are commented out β they're there so you know what your options are, not because they're doing anything. uncomment responsibly π«Ά
that's the whole thing, no cap. go tunnel some audio, bestie, you got this π
β sign-off szn: this little legend came from PipeWire, version 1.6.11, and the page is dated accordingly β and yeah, the manual section is 7 (miscellaneous) with the page name libpipew...se-tunnel. mwah, bye π
π¦ where this page comes from
- fedora 44: pipewire-libs 1.6.11-1.fc44 Β· MIT AND GPL-2.0-or-later AND BSD-2-Clause AND LGPL-2.0-or-later
- fedora 44: pipewire-libs 1.6.11-1.fc44 Β· MIT AND GPL-2.0-or-later AND BSD-2-Clause AND LGPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms