[[Vorlage(Getestet, focal, jammy)]] ## Bitte hier alle wesentlichen Wikiartikel auflisten, deren Kenntnis vorausgesetzt wird. {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] [:PPA:mit Fremdquellen arbeiten] [:systemctl:mit systemd arbeiten] [:Soundsystem:] }}} [[Inhaltsverzeichnis()]] [[Bild(pipewire.png, 200, align=left)]] [https://www.pipewire.org/ PipeWire] {en} ist u.a. ein Soundserver, der [:PulseAudio:] ersetzt. In Sachen Effizienz, Geschwindigkeit und Routing ist er PulseAudio (das als Ressourcen-Fresser berüchtigt ist) überlegen. PipeWire kümmert sich nicht nur um Audiostreams, sondern auch um (dazugehörige) Videostreams. Vom Datenfluss her sitzt PipeWire zwischen den abspielenden oder aufnehmenden Programmen (Video- und Audioplayer) und der Übergabe der Daten an die Kernelmodule (gerne auch "Treiber" genannt). Dabei ist PipeWire äußerst flexibel einsetzbar und bietet viele Schnittstellen direkt an, zum Beispiel ins Netzwerk, zu Bluetooth (mittels Bibliotheken), aber natürlich auch zu [:ALSA:] und [:JACK:jack]. Es hat sogar das Potential, [:JACK:jack] komplett zu ersetzen, da es ebenfalls mit sehr niedrigen Latenzen arbeiten kann. = Überblick: PipeWire und das Linux Sound System = [[Bild(pipewire_usage.png, 300, align=right)]] Das [:Soundsystem:] in Linux ist aus mehreren Komponenten zusammengesetzt. Zuunterst liegt die Treiberschicht [:ALSA:] („Advanced Linux Sound Architecture“), die direkt mit der Hardware interagiert. Auf deren Schnittstellen greift ein Soundserver im Userspace zu, also ehemalig [:PulseAudio:] oder [:JACK:jack]. Diese Soundserver stellen einheitliche Schnittstellen für Anwendungen zur Kommunikation mit dem Treiber bereit. Allerdings lassen sich diese Soundserver nicht kombinieren, außer durch den Einsatz einer [archwiki:PulseAudio/Examples#PulseAudio_through_JACK:PulseAudio-JACK-Brücke], was je nach JACK-Konfigurationsprogramm unterschiedlichen Erfolg haben kann. Das [wikipedia:Multimedia-Framework:] PipeWire soll dafür Abhilfe schaffen, da es sowohl für PulseAudio-Applikationen als auch für solche, die jack benötigen, Schnittstellen bereitstellt. Es ersetzt also gewissermaßen jack und PulseAudio. Weiterhin lassen sich vormals konkurrierende Anwendungen nun parallel nutzen und ihre Kanäle verbinden. == Aufbau von PipeWire == Grundsätzlich wird der Datenstrom vom [https://docs.pipewire.org/page_daemon.html PipeWire Daemon] {en} geregelt, der mit dem [:Kernel:] und den Anwendungen kommuniziert. Zu den Anwendungen gehören etwa der [https://docs.pipewire.org/page_session_manager.html Session Manager] {en}, bspw. [#Wireplumber Wireplumber], aber auch Audio-Software wie [:Ardour:] oder Media-Player wie [:Totem:]. Siehe dazu auch die nebenstehende Abbildung Außerdem stellt PipeWire eine Reihe von [https://docs.pipewire.org/page_tools.html Werkzeugen] {en} bereit, mit deren Hilfe man mit dem Dienst interagieren kann. Dazu gehören die Neuimplementationen der PulseAudio- und Jack-Server ebenso wie etwa [https://docs.pipewire.org/page_man_pw_cat_1.html pw-cat] {en}, das das Mitschneiden von Audiostreams auf dem PipeWire-Server ermöglicht. Der PipeWire-Dienst stützt sich schließlich auf die [https://docs.pipewire.org/page_spa.html Simple Plugin] {en} [wikipedia_en:API:], durch die PipeWire und seine Anwendungen mit den [https://docs.pipewire.org/page_spa_plugins.html Plugins] {en} umgehen können. Diese sind Bibliotheken, sog. [wikipedia_en:Shared_object:Shared objects], die während der Laufzeit eingebunden werden können. = Installation = Ab [:Kinetic_Kudu:Ubuntu 22.10], jedoch nicht in dessen Flavours, wird PipeWire [https://www.omgubuntu.co.uk/2022/05/ubuntu-22-10-makes-pipewire-default standardmäßig] {en} als Soundserver eingesetzt, muss also nicht nachinstalliert werden. In [:Jammy_Jellyfish:Ubuntu 22.04] ist PipeWire bereits enthalten, bleibt jedoch zugunsten von PulseAudio deaktiviert. Bis einschließlich [:Focal_Fossa:Ubuntu 20.04] muss eine Fremdquelle hinzugefügt werden. [[Vorlage(Fremdquelle, "ppa:pipewire-debian/pipewire-upstream")]] Anschließend kann das Paket `pipewire` installiert werden, zusätzlich mit dem [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio#general PipeWire-Server] {en} und einigen Bibliotheken zur Benutzung von PipeWire mit [:Bluetooth:], [:JACK:] und [:GStreamer:]: {{{#!vorlage Paketinstallation pipewire, universe pipewire-pulse, universe gstreamer1.0-pipewire, universe libspa-0.2-bluetooth, universe libspa-0.2-jack, universe pipewire-audio-client-libraries, universe, JACK-Implementierung }}} = Konfiguration = = PipeWire mit PulseAudio = Um PipeWire in Ubuntu-Versionen bis einschließlich [:Jammy:22.04] aktiv zu nutzen, muss PulseAudio im Gegenzug deaktiviert werden. Folgendermaßen ist die Vorgehensweise: * Zuerst muss der Systemctl-Dienst neu geladen werden: {{{#!vorlage Befehl systemctl --user daemon-reload }}} * Anschließend wird PulseAudio deaktiviert: {{{#!vorlage Befehl systemctl --user --now disable pulseaudio.service pulseaudio.socket }}} * Nur für [:Focal:Ubuntu 20.04]: PulseAudio muss zusätzlich maskiert werden: {{{#!vorlage Befehl systemctl --user mask pulseaudio }}} * Nun kann PipeWire aktiviert werden: {{{#!vorlage Befehl systemctl --user --now enable pipewire{,-pulse}.{socket,service} }}} Nun kann mittels `pactl` kontrolliert werden, ob PipeWire läuft: {{{ $ pactl info | grep -i "Server Name" Server Name: PulseAudio [mark](on PipeWire 0.3.60)[/mark] }}} == Bedienung == Da PipeWire eine eigene PulseAudio-Implementierung mitbringt, funktionieren die meisten Kommandozeilen-Befehle aus dem Paket [packages:pulseaudio-utils:] für die Bedienung von PulseAudio. Siehe eine [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio#general Liste] {en} für die empfohlenen Befehle. Zum Migrieren vorhandener Einstellungen von PulseAudio nach PipeWire siehe diese [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Migrate-PulseAudio Anleitung] {en}. Die Konfigurationsdatei für die PulseAudio-Implementation findet sich systemweit unter '''/usr/share/pipewire/pipewire-pulse.conf'''. Alternativ kann die Datei nach '''~/.config/pipewire/pipewire-pulse.conf''' kopiert und dort userspezifisch bearbeitet werden. Damit lassen sich unter anderem Einstellungen für Audio- und Video-Streams und Autostart-Aktionen treffen. Ab Version 0.3.45 lassen sich auch Abschnitte der Datei nach '''/usr/share/pipewire/pipewire-pulse.conf.d''' bzw. den Äquivalent im [:Homeverzeichnis:] kopieren. = PipeWire mit JACK = PipeWire ist eine vollständige Implementation eines JACK-Servers. Normalerweise läuft es über einen Session Manager und einen PulseAudio-kompatiblen Server, es lässt sich aber auch eine nativer JACK-Server benutzen, auf dem Applikationen wie [:Ardour:] laufen können. Details zur Aufsetzung des Servers finden sich in der [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-JACK#a-minimal-jack-server Dokumentation] {en}. Für die Konfigurationsdateien gelten die gleichen Pfade wie bei PipeWire, nur dass die [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-JACK#configuration-file-jackconf Konfigurationsdatei] {en} '''jack.conf''' heißt. Darüber kann etwa die [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-JACK#controlling-latency-of-jack-applications Latenz] {en} der JACK-Applikationen gesteuert werden. Zurzeit existiert noch ein Abhängigkeitsproblem, wobei ein zusätzliches Paket installiert werden muss. Details dazu [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-JACK#installation hier] {en}. = Erweiterungen = == qpwgraph == Mithilfe des Werkzeugs [https://codeberg.org/rncbc/qpwgraph qpwgraph] {en} (="qt-pipewire-graph") lässt sich die Arbeitsweise von PipeWire anschaulich visualisieren und Audiosignale und -kanäle von Anwendungen verdrahten bzw. umleiten. Dazu wird ein GUI mit Drag & Drop Funktion bereitgestellt. Das Programm ist auch in den offiziellen Paketquellen enthalten: {{{#!vorlage Paketinstallation qpwgraph, main }}} == WirePlumber == [https://pipewire.pages.freedesktop.org/wireplumber/ WirePlumber] {en} ist ein Session-Manager für PipeWire, der die Verbindungen zwischen Geräten und Anwendungen verwaltet und die dafür benötigten Komponenten lädt. Konfigurationen werden in der Hauptkonfigurationsdatei und zusätzlichen [https://pipewire.pages.freedesktop.org/wireplumber/configuration/config_lua.html Lua-Skripten] {en} vorgenommen. Weiterhin stellt es den Befehl `wpctl` zur Verfügung. WirePlumber ersetzt den Session-Manager [packages:jammy/pipewire-media-session:pipewire-media-session], der standardmäßig von PipeWire mitinstalliert wird. Es kann aus den Paketquellen installiert werden: {{{#!vorlage Paketinstallation wireplumber, universe ab [:22.04:Ubuntu 22.04] }}} = Links = == Intern == * [:Soundsystem:] {Übersicht} Die Bestandteile des Linux Soundsystems * [:Multimedia:] {Übersicht} Audio-Software == Extern == * [https://www.pipewire.org/ Homepage des Projekts] {en} * [https://docs.pipewire.org/ PipeWire-Dokumentation] * [github:PipeWire/pipewire:Projektseite auf GitHub] {en} * [https://pipewire-debian.github.io/pipewire-debian/ PipeWire für Debian] {en} - Installation und Konfiguration * [https://linuxnews.de/2021/05/debian-pulseaudio-durch-pipewire-ersetzen/ Debian: PulseAudio mit PipeWire ersetzen] auf linuxnews.de {de} * [debian:PipeWire:PipeWire im Debian-Wiki] {en} * [archwiki:PipeWire:PipeWire im Archlinux-Wiki] {en} * [askubuntu:1339765/replacing-pulseaudio-with-pipewire-in-ubuntu-20-04:PulseAudio unter 20.04 mit PipeWire ersetzen] {en} * [heise:select/ct/2022/16/2217115093399431691:Hit the road, JACK! - c't-Artikel zu PipeWire] #tag: Multimedia, Audioplayer, Videoplayer, Sound, Pipewire