PipeWire
PipeWire est le serveur de son installé par défaut sur Ubuntu à partir de la version Kinetic 22.10.
Un serveur de son permet à plusieurs applications d'utiliser simultanément les pilotes de la carte son, afin de pouvoir être toutes audibles et utilisées simultanément.
Il remplace PulseAudio, le serveur de son installé par défaut jusqu'à Ubuntu Jammy 22.04. Il propose en plus les fonctionnalités avancées utiles dans le domaine de la MAO que proposait jusqu'ici le serveur JACK, qu'il remplace aussi, avec une configuration simplifiée. Il rend possible l'utilisation simultanée de n'importe lesquels de ses logiciels et appareils audio. On peut par exemple pré-écouter un flux audio sur des oreillettes bluetooth tandis qu'on en diffuse un autre sur la carte son intégrée à son ordinateur, le tout en enregistrant le micro de sa webcam dans Audacity…
Il dispose de plus des couches de rétro-compatibilité avec les serveurs de son ALSA, PulseAudio, et JACK. Pour en bénéficier il faut installer les paquets pipewire-alsa, pipewire-pulse et pipewire-jack. Grâce à ces paquets, les applications compatibles voient respectivement des serveurs ALSA, PulseAudio, ou JACK tourner, et peuvent s'y connecter. Il s'agit en fait à chaque fois de PipeWire.
PipeWire dispose aussi de fonctionnalités permettant de gérer des flux vidéo, utiles par ex. pour des applications de streaming.
Installation
Ubuntu 22.10 ou supérieure
PipeWire est installé par défaut sur Ubuntu à partir de la version Kinetic 22.10. Vous pouvez installer le paquet pipewire-jack pour profiter des applications compatibles JACK.
On ne trouve les paquets pipewire-alsa et pipewire-jack qu'à partir de Kinetic 22.10.
Ubuntu 20.04 et 22.04
Sur les versions précédentes il est possible d'installer le paquet pipewire depuis les dépôts officiels à partir de Focal 20.04 (dépôt universe pour cette version précise).
On trouve pipewire-pulse à partir de Jammy 22.04 (dépôt universe pour cette version précise).
Avec pipewire-pulse et pipewire-alsa, il est conseillé de désinstaller respectivement PulseAudio et JACK.
Installer le gestionnaire WirePlumber (recommandé)
Le gestionnaire de session par défaut est pipewire-media-session, un autre gestionnaire de session du son est disponible et est intensivement recommandé car il serait plus performant et aurait plus de fonctionnalité.
sudo add-apt-repository ppa:pipewire-debian/wireplumber-upstream sudo apt-get update
Installez les paquets additionnels de pipewire
sudo apt install gstreamer1.0-pipewire libpipewire-0.3-{0,dev,modules} libspa-0.2-{bluetooth,dev,jack,modules} pipewire{,-{audio-client-libraries,pulse,bin,jack,alsa,v4l2,libcamera,locales,tests}}
Installez le gestionnaire de session
sudo apt-get install wireplumber{,-doc} gir1.2-wp-0.4 libwireplumber-0.4-{0,dev}
Maintenant, cachez pulseaudio (votre ancien gestionnaire)1)
systemctl --user --now disable pulseaudio.{socket,service} systemctl --user mask pulseaudio
Lancer cette commande pour autoriser et lancer PipeWire2).
systemctl --user --now enable pipewire{,-pulse}.{socket,service} filter-chain.service
Puisqu'on a choisi WirePlumber comme gestionnaire de session, on doit lancer cette commande
systemctl --user --now enable wireplumber.service
Vous devriez avoir du son, désormais avec PipeWire + WirePlumber
Ubuntu 18.04
Il faut pour cela ajouter les PPA ppa:pipewire-debian/pipewire-upstream3) et ppa:pipewire-debian/wireplumber-upstream4) dans vos sources de logiciels.
Voir ici la documentation en anglais à ce sujet : https://pipewire-debian.github.io/pipewire-debian/
Configuration
Pour une utilisation simple il n'y a rien à configurer. Il suffit de choisir la sortie audio de son choix dans les paramètres du système ou plus rapidement dans le menu système de la barre supérieure (pour GNOME, à adapter si vous utilisez un autre environnement de bureau).
Pour voir la liste des actions disponibles en ligne de commande :
pw-cli help
Pour voir la liste des logiciels et appareils disponibles (via WirePlumber) :
wpctl status
Routage
En plus d'utiliser simultanément plusieurs logiciels et interfaces matérielles, PipeWire permet de les relier ensemble dans n'importe quel sens, à la manière d'un studio virtuel.
On peut utiliser une interface graphique telle que qpwgraph, qui remplace avantageusement QjackCtl (qu'on utilisait pour JACK).
qpwgraph est disponible depuis les dépots officiels : qpwgraph ou en Flatpak.
Chaque élément (matériel ou logiciel) apparaît comme un bloc avec ses entrées à gauche et ses sorties à droite. On peut les relier les unes aux autres en tirant des liens par cliquer-glisser. Les liens peuvent ainsi conduire des signaux d'un logiciel ou d'un périphérique à l'autre. Des signaux :
- audio (en vert)
- MIDI (en rose : MIDI ALSA, ou rouge : MIDI JACK - voir Implémentation du MIDI sous Linux)
- ou vidéo (en bleu)
Gestionnaire de session
Le gestionnaire de session pour PipeWire installé par défaut sur Ubuntu est WirePlumber.
Il n'existe pour le moment pas d'interface graphique pour le gérer.
On peut le contrôler avec la commande wpctl
et ses fichiers de configuration se trouvent sous /usr/share/wireplumber
.
Création d'appareils virtuels
Il peut être utile de créer un appareil virtuel (virtual sink) pour par ex. faciliter le routage entre les différentes applications.
Pour cela créez un fichier ~/.config/pipewire/pipewire.conf.d/10-null-sink.conf
contenant par ex. :
- 10-null-sink.conf
context.objects = [ { factory = adapter args = { factory.name = support.null-audio-sink node.name = "Virtual Stereo" media.class = Audio/Sink object.linger = true audio.position = [ FL FR ] monitor.channel-volumes = true } } { factory = adapter args = { factory.name = support.null-audio-sink node.name = "Virtual Quadri" media.class = Audio/Sink object.linger = true audio.position = [ FL FR RL RR ] monitor.channel-volumes = true } } ]
Ici on crée 2 appareils virtuels, un stéréo, l'autre quadriphonique.
Réseau
De la même manière il est possible de créer différents types de virtual sinks, par ex. pour diffuser à distance (streamer) de l'audio en utilisant différents protocoles réseaux (ROC, RTP, AirPlay, Pulse Tunnel, JACK Tunnel, etc.). Voir la liste des modules disponibles sur la documentation officielle et sur le wiki de freedesktop.org.
Ceci permet de diffuser le son de votre ordinateur (qu'il s'agisse seulement du son de certaines applications ou de l'intégralité des sons du bureau) sur un appareil distant.
Grâce à ZeroConf, PipeWire peut créer automatiquement des virtual sinks correspondant à des appareils connectés à votre réseau local. Par ex. pour profiter d'un appareil AirPlay :
pactl load-module module-raop-discover
Les appareils compatibles AirPlay visibles devraient alors apparaître comme les interfaces audio ordinaires de votre ordinateur.