libpipew...l-native(7)
π libpipew...l-native(7) π
okay bestie, pull up a chair π«Ά this is libpipew...l-native(7), straight out of the Miscellaneous Information Manual, and it's the whole tea on the native protocol module. it's giving plumbing, but make it cute.
β¨ NAME β¨
libpipewire-module-protocol-native β Protocol Native π
πΈ DESCRIPTION πΈ
so this native protocol module is the one that makes PipeWire communication happen between a client and a server, using unix local sockets. no cap, that's literally its whole job π
normally this module gets loaded in both the client and the server config files, so they can actually talk to each other. if it's not there, they're just two strangers in the group chat π
π MODULE NAME π
libpipewire-module-protocol-native
π¦ MODULE OPTIONS π¦
the module supports these arguments, bestie:
socketsβ an array of Unix socket names and (optionally) owner/permissions to serve, if the context is a server π«Ά the shape is:
sockets: [ { name = "socket-name", owner = "owner", group = "group",
mode = "mode", selinux.context = "context" }, props = { ... }, ... ]
if the socket paths aren't absolute paths, the sockets get created in the default runtime directory β¨
the props get copied directly to any client that connects through this server socket, and they can be used to configure special permissions π
it has the default value [ { name = "CORENAME" }, { name = "CORENAME-manager" } ], where CORENAME is the name of the PipeWire core, usually pipewire-0.
real talk though: the permissions have no effect for sockets that come from Systemd socket activation π those ones need to be configured through the systemd.socket(5) mechanism instead. don't fight it, just do it that way.
π GENERAL OPTIONS π
the name of the core is obtained like this, in order:
PIPEWIRE_CORE: the environment variable with the name of the corecore.name: in the context properties- a name based on the process id
and the context will also become a server if:
PIPEWIRE_DAEMON: the environment is truecore.daemon: in the context properties is true
the socket will be located in the directory obtained by looking at these environment variables:
PIPEWIRE_RUNTIME_DIRXDG_RUNTIME_DIRUSERPROFILE
the socket address will be written into the notification file descriptor if this environment variable is set:
PIPEWIRE_NOTIFICATION_FD
when a client connects, the connection will be made to:
PIPEWIRE_REMOTE: the environment with the remote nameremote.name: the property in the context.- the default remote named
"pipewire-0"
a special remote named "internal" can be used to make a connection to the local context π this is doable even when the server is not a daemon. it lets you treat a local context as if it was a server. main character energy tbh.
π CONFIG OVERRIDE π
a module.protocol-native.args config section can be added to override the module arguments. slay.
# ~/.config/pipewire/pipewire.conf.d/my-protocol-native-args.conf
module.protocol-native.args = {
sockets = [
{ name = "pipewire-0" }
{ name = "pipewire-0-manager" }
]
}
β EXAMPLE CONFIGURATION β
context.modules = [
{ name = libpipewire-module-protocol-native }
]
context.modules = [
{ name = libpipewire-module-protocol-native,
args = {
sockets = [
{ name = "pipewire-0" }
{ name = "pipewire-0-manager" }
{ name = "pipewire-1"
props = { my.connection = "the other one" }
}
]
}
}
]
and that's the whole page, bestie, you ate that π this was brought to you by PipeWire version 1.6.11 on the libpipew...l-native(7) page β go forth and let your sockets communicate fr fr πβ¨π
π¦ 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