You are not logged in.
Hi,
Is it possible for multiple users to share the same audio daemon when using PipeWire? You could use Unix sockets in PulseAudio to achieve this but I haven't found anything similar for PipeWire yet.
This is useful for doing things like using a separate user for Wine applications but using the same X session + audio daemon for a seamless experience.
Thank you for the help in advance!
Offline
I asked around in the #pipewire IRC channel and found out that PipeWire has support for a system-wide instance, but it needs to be enabled at build time:
17:56:04 <saivert> For system level pipewire instance the idea is that distros provide a separate package for this configuration
17:57:27 <saivert> If you build pipewire from source you need to enable the installation of the system level systemd unit files. meson setup -Dsystemd-system-service=enabled
17:58:19 <saivert> It is just a low priority use case. Most run it as their own user account on a graphical desktop
18:00:10 <TheDcoder[m]> Unfortunately it looks like the (Arch) package doesn't include system level units
18:19:41 <saivert> TheDcoder[m]: you could ask for this on the Arch bug tracker though. Even the main package could just provide the units, it is not like they have to be enabled by default.
I guess one could make an AUR package with this, but I don't see any harm in including them in the official package as they are not enabled by default.
Still, has anyone tried this system level instance of PipeWire? I visited the Access Control page on PipeWire wiki but barely understood any of it. Someone should cover this in the Arch wiki so that we can configure who gets to access the audio if running a system-level instance.
Offline
You can add the flag by installing pipewire-git and by editing PKGBUILD before install.
Offline
Yes, I am aware of that as mentioned in my previous post, I have not tried it yet but it would be nice if someone with experience can comment and clarify things about Access Control and setup.
Offline
In the pipewire-pulse.conf file which you can edit anywhere you want (including /usr/share/pipewire /etc/pipewire or $HOME/.config/pipewire) find the context.modules section and edit it to look like this:
{ name = libpipewire-module-protocol-pulse
args = {
# the addresses this server listens on
server.address = [
"unix:native"
"tcp:4713" # IPv4 and IPv6 on all addresses
]
Now export an environment variable anywhere you want (see https://wiki.archlinux.org/title/system … _variables ):
PULSE_SERVER=tcp:127.0.0.1:4713
You're good to go!
P.S. Sorry for reviving an old topic but Google features it prominently when searching for pipewire multi user ;-)
Last edited by birdie-github (2021-10-09 20:22:03)
Offline
P.S. Sorry for reviving an old topic but Google features it prominently when searching for pipewire multi user ;-)
No problem, thanks for sharing! Perhaps it can be added to the wiki
P.S Good to know that I have good SEO skills
Offline
I've written a script which does all of that automatically without the need to edit any files (exporting PULSE_SERVER for other users is still necessary):
https://github.com/birdie-github/useful … audio-conf
What it does:
1. Loads module-native-protocol-tcp which allows connections only from 127.0.0.1
2. Loads module-x11-bell to have an audible bell under X.org/X11
3. Extends the list of available frequencies for output devices from 44100 to 48000, 96000, 44100 (will be used automatically depending on the device capabilities)
4. Set the default quantization rate to 48KHz.
Apparently no one wants to edit the Wiki page (or Examples which doesn't seem to be popular or maintained).
Last edited by birdie-github (2022-04-19 04:39:56)
Offline
This may be obvious to some, but there's a simple solution if you have a single "player" user that plays audio, but you want to keep the audio while switching to other users for auxiliary tasks on other ttys, and does not require getting into the configuration rabbit hole: Just add the "player" user to the "audio" group. This will allow it to keep control of the audio devices on any tty, even if another user is logged in.
The downside of this, is that it is not seamless, i.e. only that user will be able to play audio, change the volume, etc., though you may be able to do some of those tasks with sudo, e.g. with something like:
sudo -u player env XDG_RUNTIME_DIR=/run/user/1234 pactl get-sink-volume @DEFAULT_SINK@
Offline
since this topic pops up first in google
# cp /usr/share/pipewire/pipewire-pulse.conf /etc/pipewire/
# vi /etc/pipewire/pipewire-pulse.conf
pulse.properties = {
# the addresses this server listens on
server.address = [
#"unix:native"
"unix:/tmp/pulse-socket" # absolute paths may be used
# Extra modules can be loaded here. Setup in default.pa can be moved here
context.exec = [
{ path = "/bin/chmod" args = "go+w /tmp/pulse-socket" }
Offline
Since I was reluctant to copy over an entire config file to change a single setting, I looked up how to only change the minimal amount so future updates will be smoother.
To this end, you can amend the pipewire-pulse configuration like so:
$EDITOR ~/.config/pipewire/pipewire-pulse.conf.d/pulse-server.conf
# lsof -i :4713 - to check if it's running
# then export PULSE_SERVER="tcp:127.0.0.1:4713" for apps to use it over tcp
pulse.properties = {
server.address = [
"unix:native"
"tcp:4713" # IPv4 and IPv6 on all addresses
]
}
Offline