PipeWire
PipeWire est un moteur de traitement et un serveur, à faible latence, avec une interface graphique pour faire fonctionner les périphériques audio et vidéos. Il peut être utilisé avec des configurations déjà prise en charge par ALSA, PulseAudio et / ou JACK, dont l’objectif est d’améliorer la gestion de l’audio et de la vidéo sous Linux.
Les systèmes utilisant Wayland sont géré via PipeWire pour procurer la fonctionnalité desktop portal comme le partage d’écran ou le bureau distant.
Quelques fonctionnalités clé de PipeWire inclus :
- Une latence minimale pour la capture et la lecture de l’audio et de la vidéo.
- Un traitement multimédia en temps réel.
- Une architecture multi-processus autorisant le partage de contenu entre divers applications.
- Un support sans anicroches pour PulseAudio, JACK, ALSA et GStreamer.
- Le support du sandboxing (NdT: isolation dans un bac-à-sable) pour les applications Flatpak, avec un modèle de sécurité qui facilite l’interaction avec les applications conteneurisées.
La majorité des applications - incluant par ex. Firefox - ne supportent pas encore l’API native de PipeWire. Cependant, PipeWire peut émuler PulseAudio, supprimant ainsi le besoin d’un serveur de son PulseAudio séparé. Se référer à la section «USE flags» pour plus de détails.
PipeWire fournit un démon, un exemple de gestionnaire de session, des outils pour examiner et utiliser le démon, une bibliothèque pour développer des applications et greffons pour PipeWire, ainsi que SPA (Simple Plugin API) qui est utilisé par à la fois le démon PipeWire et sa bibliothèque.
Les utilisateurs de PipeWire ont généralement besoin d’installer et d’utiliser WirePlumber pour la fonctionnalité de gestion de session et de politique, tel quel la gestion du volume sonore; se référer à cette page pour plus de détails.
Installation
Noyau
Device Drivers ---> <*> Sound card support Search for <code>CONFIG_SOUND</code> to find this item. ---> <*> Advanced Linux Sound Architecture Search for <code>CONFIG_SND</code> to find this item. ---> -*- Sound Proc FS Support Search for <code>CONFIG_SND_PROC_FS</code> to find this item. [*] Verbose procfs contents Search for <code>CONFIG_SND_VERBOSE_PROCFS</code> to find this item.
Profiles (Portage) bureautique
Tous les profiles (NdT: de Portage) bureautique actives PipeWire par défaut, ainsi aucune installation ne devrait être requise.
Les utilisateurs de SystemD peuvent activer le service wireplumber en suivant cette section.
Profiles (Portage) non-bureautique
Si le système a pour vocation d’être un bureau alors il est généralement recommandé de simplement activé un profile bureautique. Cela est plus aisé de désactiver une poignées d’USE flags dont le système n’a pas besoin, que d’ajouter une vingtaine d’entre eux pour faire correspondre ce que le profile bureautique aurait activé et qui est standard pour les besoins usuels d’un système.
USE flags
Pour utiliser PipeWire en tant que serveur de son, spécifier l’USE flag pour media-video/pipewire[1].
Puis, si PipeWire est utilisé en remplacement du serveur audio PulseAudio :
- S’assurer que media-sound/pulseaudio-daemon n’est pas installé. Cela est nécessaire pour éviter des conflits résultants du lancement de plus d’un serveur de son.
- S’assurer que media-libs/libpulse est installé, ce qui autorise PipeWire à émuler un serveur audio PulseAudio. Pour l’heure peu d’applications supportent l’API native de PipeWire.
- S’assurer que l’USE flag pulseaudio est toujours en place globalement.
S’il a été compilé avec l’USE flag dbus activé, PipeWire requiert la présence d’une session bus D-Bus et un environnement de replacement compatible XDG. Ceux-ci devraient être présent via un profile Portage bureautique; sur ces systèmes, démarrer PipeWire est aussi simple que de lancer le binaire de pipewire. Sur d’autres profiles, si OpenRC est utilisé, des permissions nécessaires peuvent aussi avoir besoin de l’USE flag elogind sur le paquet media-video/wireplumber, avec elogind lui-même.
D-Bus est requis pour le support du Bluetooth, interagir avec RTKit pour acquérir la priorisation en temps réel et interagir avec d’autres clients multimédia. [2] D-Bus est aussi utilisé par KDE Plasma pour notifier PipeWire du changement du volume sonore.
Pour activer le support direct du partage d’écran sur les applications le proposant, spécifier l’USE flag screencast sur le paquet adéquat. Sinon, le support du partage d’écran peut aussi être procurer via les couches de compatibilité de PulseAudio ou JACK.
USE flags for media-video/pipewire Multimedia processing graphs
+man
|
Build and install man pages |
X
|
Enable audible bell for X11 |
bluetooth
|
Enable Bluetooth Support |
dbus
|
Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc) |
doc
|
Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally |
echo-cancel
|
Enable WebRTC-based echo canceller via media-libs/webrtc-audio-processing |
elogind
|
Enable session tracking via sys-auth/elogind |
extra
|
Build pw-cat/pw-play/pw-record |
ffmpeg
|
Enable ffmpeg/libav-based audio/video codec support |
fftw
|
Use FFTW library for computing Fourier transforms |
flatpak
|
Enable Flatpak support |
gsettings
|
Use gsettings (dev-libs/glib) to read/save used modules (useful for e.g. media-sound/paprefs |
gstreamer
|
Add support for media-libs/gstreamer (Streaming media) |
ieee1394
|
Enable FireWire/iLink IEEE1394 support (dv, camera, ...) |
jack-client
|
Install a plugin for running PipeWire as a JACK client |
jack-sdk
|
Use PipeWire as JACK replacement |
libcamera
|
Enable libcamera plugin via media-libs/libcamera |
liblc3
|
Allow loading LC3 plugins via media-sound/liblc3 |
loudness
|
Enable loudness normalisation according to the EBU R128 standard using media-libs/libebur128 |
lv2
|
Allow loading LV2 plugins via media-libs/lv2 |
modemmanager
|
Combined with USE=bluetooth, allows PipeWire to perform telephony on mobile devices. |
pipewire-alsa
|
Install ALSA plugin, similar to media-plugins/alsa-plugins's USE=pulseaudio. |
pulseaudio
|
Add sound server support via media-libs/libpulse (may be PulseAudio or PipeWire) |
readline
|
Enable support for libreadline, a GNU line-editing library that almost everyone wants |
roc
|
Enable roc support for real-time audio streaming over the network, using media-libs/roc-toolkit. See https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Network#roc |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
sofa
|
Spatially Oriented Format for Acoustics (SOFA) support via media-libs/libmysofa |
sound-server
|
Provide sound server using ALSA and bluetooth devices |
ssl
|
Enable raop-sink support (needs dev-libs/openssl) |
system-service
|
Install systemd unit files for running as a system service. Not recommended. |
systemd
|
Enable use of systemd-specific libraries and features like socket activation or session tracking |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
v4l
|
Enable support for video4linux (using linux-headers or userspace libv4l libraries) |
zeroconf
|
Support for DNS Service Discovery (DNS-SD) |
Emerge
Une fois les USE flags spécifiés, reconstruire les paquets affectés :
root #emerge --ask --verbose --changed-use --update --deep @worldAlternativement, PipeWire peut être installé de manière indépendantes, bien que la méthode précédente est généralement ce qui est requis :
root #emerge --ask media-video/pipewire
Configuration
Plus d’informations, non spécifiques à Gentoo, peuvent être trouvé dans la page officiel du projet (en anglais).
Typiquement, cela fonctionne raisonnablement bien out of the box, la configuration au niveau du système de PipeWire est généralement très bien ainsi. Ceux qui migreraient vers PipeWire depuis d’autres systèmes audio, tel quel ALSA ou PulseAudio, devraient considérer de déplacer les fichiers de configuration pour ceux-ci - par ex. asoundrc et ses fichiers, ~/.config/pulse, … - vers un emplacement où ils ne pourront pas potentiellement créer de conflits au sein du sous-système audio de Linux, mais plutôt là où leur contenu est toujours disponible pour de futures références si nécessaires.
PipeWire reconnaît de multiples variables d’environnement qui autorisent la modification des paramètres, soit par utilisateur, ou pour une commande individuelle : par exemple, PIPEWIRE_RUNTIME_DIR, PIPEWIRE_MODULE_DIR et DISABLE_RTKIT. Se référer à la page du manuel de pipewire(1) pour une liste exhaustive.
Groupe Audio
Il est recommandé que les utilisateurs soient dans le groupe pipewire.
root #usermod -aG pipewire larryLa configuration par défaut de PipeWire essai d’utiliser la planification en temps-réel pour augmenter la priorité des fils d’exécution. Si l’utilisateur n’a pas les permissions nécessaires pour cela, la configuration essaiera d’utiliser RealtimeKit (RTKit) à la place, ce qui demande que sys-auth/rtkit soit installé. Ce comportement est définit sous la partie context.modules de la configuration de PipeWire.
root #emerge --ask sys-auth/rtkitEn général, pour une meilleurs expérience avec le changement rapide (de session) utilisateur, ils ne devraient pas être dans le groupe audio, afin d’éviter que l’application d’un utilisateur soit en capacité de prendre le contrôle exclusif du périphérique audio.
En exceptions sont inclus les systèmes qui utilisent seatd ou qui se basent sur le groupe audio pour le contrôle d’accès du périphérique / les ACL.
Pour supprimer un utilisateur du groupe audio :
root #usermod -rG audio larry
Configuration du serveur de son
Les utilisateurs de SDDM doivent être sûr de le démarrer via le bon service ou XDG_RUNTIME_DIR pourrait être incorrectement paramétré.
Emplacement des fichiers
Utiliser pw-config pour afficher les chemins des fichiers de configurations actuelles et utiliser pw-config list pour lister la configuration courante.
La configuration par défaut devrait être suffisante pour la majorité des utilisateurs. Cette configuration est décrite dans /usr/share/pipewire/pipewire.conf.
Si des customisations sont requises, ne pas modifier ce fichier. À la place, soit le copier dans l’un, l’autre ou les deux emplacements suivants :
- /etc/pipewire/, pour la configuration globale du système; ou
- ${XDG_CONFIG_HOME}/pipewire/, la configuration par utilisateur,
et modifier un fichier ou ces deux-ci en adéquation.
Par défaut, XDG_CONFIG_HOME représente le répertoire ~/.config/. Se référer à la page XDG/Base_Directories pour de plus amples informations.
Fragments de configurations
Les fragmentes de configurations peuvent être spécifié via un fichier se terminant par l’extension .conf (par ex. 90-local.conf dans les répertoires suivants[3] :
- /usr/share/pipewire/pipewire.conf.d/
- /etc/pipewire/pipewire.conf.d/
- ${XDG_CONFIG_HOME}/pipewire/pipewire.conf.d/
Services utilisateur
Les services utilisateurs sont disponibles pour SystemD et OpenRC. Celles et ceux qui ne se servent ni de l’un ni de l’autre peuvent à la place utiliser PipeWire/gentoo-pipewire-launcher.
SystemD
PipeWire procure un fichier socket et un fichier service lorsqu’il est construit avec l’USE flag systemd.
Si le service utilisateur PulseAudio est activé, le désactiver; c’est une opération sûre même si le service en question n’était pas utilisé.
user $systemctl --user disable --now pulseaudio.socket pulseaudio.serviceTandis que PipeWire n’apparaît pas comme utilisant le répertoire ~/.config/pulse/ au-delà du fichier de cookie, il peut être une bonne idée de le renommer ou le supprimer.
Activer le socket pipewire-pulse; cela causera le démarrage du service pipewire-pulse si nécessaire.
user $systemctl --user enable --now pipewire-pulse.socketL’activation du socket signifie que le service pipewire sera seulement démarré lorsque requis, ce qui est généralement suffisant. Cependant, le service pipewire peut toujours être démarré à l’authentification de l’utilisateur en activant pipewire.service :
user $systemctl --user enable --now pipewire.serviceActiver le service wireplumber :
user $systemctl --user enable --now wireplumber.serviceDans ces cas, l’option --now est optionnelle, mais probablement sûr d’utilisation, puisque que démarrer PipeWire avec la configuration par défaut autorise à peine l’utilisation de nouvelles interfaces et ne changent pas les pré-existantes, par ex. les clients n’utilisant pas PipeWire continue d’utiliser les mêmes bibliothèques et services qui étaient utilisés préalablement.
OpenRC
OpenRC has built-in and enabled by default support for user services since version 0.60. Similarly to systemd, they can be used to automatically launch and stop PipeWire on login and logout.
To enable the PipeWire services run:
user $rc-update add -U pipewire default
user $rc-update add -U pipewire-pulse default
To start the services without enabling them:
user $rc-service --user pipewire start
user $rc-service --user pipewire-pulse start
PulseAudio server emulation
To confirm PulseAudio server emulation:
user $LANG=C pactl info | grep "Server Name"Server Name: PulseAudio (on PipeWire 0.3.39)
Multi-user support
Multi-user support requires the UNIX socket interface.
If there is not yet a pipewire-pulse.conf file in /etc/pipewire/, add it (creating the /etc/pipewire/ directory if necessary):
root #cp /usr/share/pipewire/pipewire-pulse.conf /etc/pipewire/Then edit /etc/pipewire/pipewire-pulse.conf to specify the UNIX socket location, which must match the PulseAudio client configuration:
/etc/pipewire/pipewire-pulse.confPulseAudio UNIX socketpulse.properties = {
server.address = [
"unix:/tmp/pulse-socket"
]
}
Advanced
For information about more advanced PipeWire configuration, refer to the PipeWire/extra page.
Usage
A command-line interface to PipeWire is provided by pw-cli(1). This tool can be used to e.g. list the IDs of PipeWire nodes:
user $pw-cli ls Nodeand to check the current properties of a given node:
user $pw-cli e <node-id> Props
Controlling the volume
Ways to control the volume include:
- media-sound/pwvucontrol, a pavucontrol-like GUI.
- wiremix, a TUI.
- media-sound/pipemixer::guru, a TUI.
- PulseAudio tools such as media-sound/pavucontrol and pactl(1) (provided by media-libs/libpulse).
user $pw-cli s <node-id> Props '{ mute: false, channelVolumes: [ 0.3, 0.3 ] }'
Checking settings
pw-metadata can be used to check the current sample rate and other settings:
user $pw-metadata -n settingsFound "settings" metadata 31 update: id:0 key:'log.level' value:'2' type:'' update: id:0 key:'clock.rate' value:'192000' type:'' update: id:0 key:'clock.allowed-rates' value:'[ 192000, 48000, 44100 ]' type:'' update: id:0 key:'clock.quantum' value:'1024' type:'' update: id:0 key:'clock.min-quantum' value:'32' type:'' update: id:0 key:'clock.max-quantum' value:'2048' type:'' update: id:0 key:'clock.force-quantum' value:'0' type:'' update: id:0 key:'clock.force-rate' value:'0' type:''
If PipeWire is being used as a PulseAudio backend, the sample rate and bit depth, or Default Sample Specification, can be checked with:
user $pactl infoServer String: /run/user/1000/pulse/native Library Protocol Version: 35 Server Protocol Version: 35 Is Local: yes Client Index: 213 Tile Size: 65472 User Name: larry Host Name: gentoo Server Name: PulseAudio (on PipeWire 0.3.71) Server Version: 15.0.0 Default Sample Specification: float32le 2ch 192000Hz Default Channel Map: front-left,front-right Default Sink: alsa_output.usb-Generic_USB_Audio-00.pro-output-2 Default Source: alsa_input.usb-Focusrite_Scarlett_Solo_USB-00.pro-input-0
GUI patchbays
GUI patchbays available via the gentoo repository include:
- media-sound/helvum, a GTK-based patchbay.
- media-sound/qpwgraph, a Qt-based patchbay that can save layout.
Advanced
For information about more advanced PipeWire usage, refer to the PipeWire/extra page.
Replacing JACK
If the jack-sdk USE flag is enabled, PipeWire can be used as the server for JACK clients; calls to the JACK API will be translated into calls to PipeWire's native API. Clients can be connected via a patchbay interface such as qjackctl(1). Refer to pipewire-jack.conf(5) for information about configuring PipeWire for JACK clients.
When PipeWire is configured this way, the media-sound/jack2 package must be uninstalled; /usr/lib/libjack.so will be owned by the media-video/pipewire package. This can be checked via e.g. qfile (provided by app-portage/portage-utils) or equery (provided by app-portage/gentoolkit).
If the jack-sdk USE flag is not enabled, media-sound/jack2 will be installed (and its dbus USE flag must be enabled). In this case, individual JACK clients can be run via pw-jack(1), e.g. pw-jack qjackctl. When using pw-jack, do not use either jackd(1) nor jackdbus.
Not every client will necessarily work; some may even ungracefully exit due to missing symbols. Re-configuration of JACK clients might be required.
Existing JACK users are likely to have realtime capability set up, but new users are advised to raise the value of RLIMIT_MEMLOCK from 64k (Gentoo's default) to 256k for all PipeWire users that want JACK emulation; refer to the "Clients unable to lock memory" section. Failure to do this will likely cause at least occasional buffer underruns (xruns), as a single page fault is likely to spend half to the entire length of a buffer just in kernel time to resolve.
Troubleshooting
Refer to PipeWire/troubleshooting.
See also
- WirePlumber — a modular session / policy manager for PipeWire
- PulseAudio — a multi-platform, open source, sound server that provides a number of features on top of the low-level audio interface ALSA
- ALSA — the Linux kernel's API for sound cards, together with an associated software framework
- Technical notes on the packaging of PipeWire
External resources
- Pipewire Guide
- PipeWire FAQ
- Introduction to Pipewire (2025-02-07)
- An introduction to PipeWire (2022-06-20)
- PipeWire under the hood (2021-06-23) - blog post explaining PipeWire from a unique perspective
- PipeWire: The Linux audio/video bus, on Linux Weekly News (2021-03-02)
- Desktop Profile to enable PipeWire support (2026-01-15) - official Gentoo news about pipewire support
- libpipewire-modules(7) - overview of PipeWire modules
References
- ↑ https://www.gentoo.org/support/news-items/2022-07-29-pipewire-sound-server.html
- ↑ PipeWire FAQ: "Does PipeWire require DBus/SystemD/Flatpak"
- ↑ https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire#configuration-file-pipewireconf
- ↑ https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Migrate-PulseAudio#sink-inputsource-output-volumemute