PipeWire

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page PipeWire and the translation is 53% complete.
Outdated translations are marked like this.

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.

Remarque
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

KERNEL
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

Remarque
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 :

  1. 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.
  2. 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.
  3. 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 @world

Alternativement, 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

See also
Plus d’informations, non spécifiques à Gentoo, peuvent être trouvé dans la page officiel du projet (en anglais).
Conseil
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 larry

La 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/rtkit

En 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

Conseil
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] :

  1. /usr/share/pipewire/pipewire.conf.d/
  2. /etc/pipewire/pipewire.conf.d/
  3. ${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.service

Tandis 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.socket

L’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.service

Activer le service wireplumber :

user $systemctl --user enable --now wireplumber.service

Dans 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:

FILE /etc/pipewire/pipewire-pulse.confPulseAudio UNIX socket
pulse.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 Node

and 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:

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 settings
Found "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 info
Server 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:

Additionally, coppwr is a low-level patchbay available via Flatpak (io.github.dimtpap.coppwr).

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.

Important
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

See also

External resources

References