PipeWire sound server migration

Posted: 2022-07-29 by Sam James | Revision: 1
Format:
2.0
Display if installed:
media-video/pipewire
Display if installed:
media-sound/pulseaudio
Display if installed:
media-sound/pulseaudio-daemon
Display if installed:
media-libs/libpulse
PipeWire has gained a new USE flag "sound-server" for enabling/disabling its sound server capabilities.

This change is needed to avoid PipeWire and PulseAudio conflicting over control of audio devices. Before this change, OpenRC users were in some cases accidentally migrated to PipeWire which was difficult to override without manually editing launcher files.

For non-audio purposes, PipeWire is installed in many configurations as more and more software depends on it for e.g. screensharing, sandboxing, and window previews, so users will need to act based on their preferred setup rather than simply avoiding installing PipeWire, as it is increasingly required as a dependency.

Packages needing PulseAudio's APIs will be migrated from the now-meta package media-sound/pulseaudio to depending on media-libs/libpulse. The runtime PulseAudio server can be provided by either PipeWire (media-video/pipewire) or the original PulseAudio (media-sound/pulseaudio-daemon).

The new sound-server USE flag for PipeWire allows easily controlling this behavior.

There are several options available:

1. To use PipeWire for sound, users should enable USE=sound-server for PipeWire:


Place the following entries in /etc/portage/package.use:
```
media-video/pipewire sound-server
media-sound/pulseaudio -daemon
```

First, sync:
# emerge --sync

Deselect media-sound/pulseaudio-daemon:
# emerge --deselect media-sound/pulseaudio-daemon

Then perform a world upgrade with PipeWire on the command line to add
it to the world file:
# emerge --ask --update --changed-use --deep @world media-video/pipewire

Then depclean:
# emerge --ask --depclean

OpenRC users on an XDG-compliant desktop which respects autostart files
will not need to take any further action.

OpenRC users using a minimal desktop which does not respect autostart
files will need to run `gentoo-pipewire-launcher &` in e.g.
`~/.xprofile`.

Users who want to switch to PipeWire providing a PulseAudio daemon
may need to `emerge --deselect` packages in their world file which
hard-require media-sound/pulseaudio-daemon. There are only a handful
of these. A non-exhaustive list:
  • media-sound/paprefs
  • media-sound/pasystray
  • media-sound/pulseaudio-modules-bt (shouldn't be needed anyway)
  • net-misc/pulseaudio-dlna



If not using any of those packages anymore, please emerge --deselect
them. If still using these, PipeWire as a PulseAudio is not an
option at this time.

(Note that media-libs/libpulse (which PipeWire will be using, don't emerge
libpulse manually) provides 'pactl' which can be used as a replacement for
e.g. media-sound/pulseaudio-ctl, so personal scripts can be adapted to this
if desired.)

systemd users will also need to run the following commands:
$ systemctl --user --now disable pulseaudio.service pulseaudio.socket
$ systemctl --user --now enable pipewire.socket pipewire-pulse.socket
$ systemctl --user --now disable pipewire-media-session.service
$ systemctl --user --force enable wireplumber.service

Root user may replace --user with --global to change system default
configuration for all of the above commands.

2. To use PulseAudio's daemon for sound, users should disable USE=sound-server

for PipeWire, enable USE=daemon on media-sound/pulseaudio, and add
media-sound/pulseaudio-daemon to their world file:

Place the following entries in /etc/portage/package.use:
```
media-video/pipewire -sound-server
media-sound/pulseaudio daemon
```

Add media-sound/pulseaudio-daemon to @world:
# emerge --noreplace media-sound/pulseaudio-daemon

Then perform a world upgrade:
# emerge --ask --update --changed-use --deep @world

Then depclean:
# emerge --ask --depclean

OpenRC users on an XDG-compliant desktop which respects autostart files
will not need to take any further action.

OpenRC users using a minimal desktop which does not respect autostart
files should consider adding `gentoo-pipewire-launcher &` in e.g.
`~/.xprofile` but it's not strictly required in terms of audio
handling. It may be required in future for the non-audio usecases
described above.

systemd users will also need to run the following commands:
$ systemctl --user --now enable pulseaudio.service pulseaudio.socket
$ systemctl --user --now disable pipewire.socket pipewire-pulse.socket

Alternatively, systemd users can run the following commands as root to change
the default for all users:
# systemctl --global enable pulseaudio.service pulseaudio.socket
# systemctl --global --force disable pipewire.socket pipewire-pulse.socket

(If taking this option, the services must be started manually as a one-off as
a user.)

3. For users without sound on their system, those using JACK without

 PipeWire, or those using pure ALSA without PipeWire, the following steps
 are recommended:

 Place the following entries in /etc/portage/package.use:
 ```
 media-video/pipewire -sound-server
 media-sound/pulseaudio -daemon
 ```

 Then perform a world upgrade:
 # emerge --ask --update --changed-use --deep @world

 Then depclean:
 # emerge --ask --depclean

 OpenRC users on an XDG-compliant desktop which respects autostart files
 will not need to take any further action.

 OpenRC users using a minimal desktop which does not respect autostart
 files will need to run `gentoo-pipewire-launcher &` in e.g.
 `~/.xprofile`.

 systemd users will also likely want to run the following commands as a user, again
 for the purposes of non-audio PipeWire use:
 $ systemctl --user --now enable pipewire.socket
 $ systemctl --user --now --force enable wireplumber.service

 Alternatively, systemd users can run the following commands as root to change
 the default for all users,  again for the purposes of non-audio PipeWire use:
 # systemctl --global enable pipewire.socket
 # systemctl --global --force enable wireplumber.service

 (If taking this option, the services must be started manually as a one-off as
 a user.)

Further resources:
  • https://wiki.gentoo.org/wiki/PipeWire