ADMIN

2022

05

2022-04-28T12:00:00

Collaboration

PRAXIS

050

Open-Source-Tipp

Client

Besseres Audio mit PipeWire

Lauscher auf

von Thorsten Scherf

Veröffentlicht in Ausgabe 05/2022 - PRAXIS

Mit PipeWire steht ein relativ neues Audio- und Videosubsystem für Linux zur Verfügung. Die Software unterstützt eine ganze Reihe an modernen Codecs, sodass Sie hiermit auch Geräte wie beispielsweise Apple Airpods unter Linux einsetzen können. Der Open-Source-Tipp in diesem Monat zeigt, wie das geht.

Die meisten Linux-Distributionen setzen PulseAudio als Audioserver ein. Die Software ist seit vielen Jahren der De-facto-Standard im Linux-Umfeld. Mit PipeWire [1] steht allerdings seit einiger Zeit bereits ein Nachfolger in den Startlöchern, der gegenüber PulseAudio [2] einige Vorteile mit sich bringt. So ist neben der sehr geringen Latenz für Audio- und Videoanwendungen vor allem auch die auf Sicherheit ausgelegte Architektur zu nennen. Dies kommt auch daher, da PipeWire speziell Container-Anwendungen einen leichten und sicheren Zugang zu Audio- und Videogeräten ermöglichen soll. Des Weiteren unterstützt die Software eine ganze Reihe an modernen Codes, was sich gerade beim Einsatz von Bluetooth-Geräten auszahlt. PipeWire ist kompatibel mit PulseAudio und unterstützt durch sein modulares Konzept auch Anwendungen, die auf JACK [3], ALSA [4] oder GStreamer [5] basieren.
Auf aktuellen Fedora-Systemen ab Version 34 kommt PipeWire sogar schon als Default-Audio- und -Videoserver zum Einsatz. Diese Implementierung erlaubt allerdings auch PulseAudio-Clients, sämtliche Streams an PipeWire zu senden und von dort zu empfangen. Das hierfür zuständige Paket heißt "pipewire-pulseaudio", das bei der Installation automatisch den PulseAudio-Server deinstalliert. Für den Support von Applikationen, die andere Soundserver oder Architekturen erwarten, können Sie wahlweise auch die Pakete "pipewire-gstreamer", "pipewire-jack-audio-connection-kit" und "pipewire-alsa" installieren.
Routing per Session Manager
Für die interne Routing-Logik, also welcher Audio- beziehungsweise Video-Stream mit welchem Gerät oder welcher Anwendung verknüpft werden soll, stellt PipeWire einen sogenannten "Session Manager" zur Verfügung. Hierbei existieren momentan zwei unterschiedliche Ansätze: Zum einen wäre "PipeWire Media Session" als Referenzimplementierung zu nennen und zum anderen existiert mit "WirePlumber" eine in der Sprache LUA basierte Implementierung. Fedora setzt aktuell auf die Referenzimplementierung und stellt hierfür das Paket "pipewire-media-session" zur Verfügung. Für spätere Releases ist allerdings ein Wechsel auf "WirePlumber" geplant.
Die meisten Linux-Distributionen setzen PulseAudio als Audioserver ein. Die Software ist seit vielen Jahren der De-facto-Standard im Linux-Umfeld. Mit PipeWire [1] steht allerdings seit einiger Zeit bereits ein Nachfolger in den Startlöchern, der gegenüber PulseAudio [2] einige Vorteile mit sich bringt. So ist neben der sehr geringen Latenz für Audio- und Videoanwendungen vor allem auch die auf Sicherheit ausgelegte Architektur zu nennen. Dies kommt auch daher, da PipeWire speziell Container-Anwendungen einen leichten und sicheren Zugang zu Audio- und Videogeräten ermöglichen soll. Des Weiteren unterstützt die Software eine ganze Reihe an modernen Codes, was sich gerade beim Einsatz von Bluetooth-Geräten auszahlt. PipeWire ist kompatibel mit PulseAudio und unterstützt durch sein modulares Konzept auch Anwendungen, die auf JACK [3], ALSA [4] oder GStreamer [5] basieren.
Auf aktuellen Fedora-Systemen ab Version 34 kommt PipeWire sogar schon als Default-Audio- und -Videoserver zum Einsatz. Diese Implementierung erlaubt allerdings auch PulseAudio-Clients, sämtliche Streams an PipeWire zu senden und von dort zu empfangen. Das hierfür zuständige Paket heißt "pipewire-pulseaudio", das bei der Installation automatisch den PulseAudio-Server deinstalliert. Für den Support von Applikationen, die andere Soundserver oder Architekturen erwarten, können Sie wahlweise auch die Pakete "pipewire-gstreamer", "pipewire-jack-audio-connection-kit" und "pipewire-alsa" installieren.
Routing per Session Manager
Für die interne Routing-Logik, also welcher Audio- beziehungsweise Video-Stream mit welchem Gerät oder welcher Anwendung verknüpft werden soll, stellt PipeWire einen sogenannten "Session Manager" zur Verfügung. Hierbei existieren momentan zwei unterschiedliche Ansätze: Zum einen wäre "PipeWire Media Session" als Referenzimplementierung zu nennen und zum anderen existiert mit "WirePlumber" eine in der Sprache LUA basierte Implementierung. Fedora setzt aktuell auf die Referenzimplementierung und stellt hierfür das Paket "pipewire-media-session" zur Verfügung. Für spätere Releases ist allerdings ein Wechsel auf "WirePlumber" geplant.
Um nun beispielsweise Apple Airpods mithilfe von PipeWire auch unter Linux nutzen zu können, sind mehrere Schritte notwendig. Zuerst ist natürlich dafür zu sorgen, dass die Airpods mit dem Linux-System verbunden sind. Hierzu steht eine Reihe an Tools zur Verfügung, wie beispielsweise der "Blueman Bluetooth Manager" [6]. Die Software "bluez" [7] muss hierfür zwingend installiert sein, da Sie mit ihr das Bluetooth-Subsystem konfigurieren. In der Konfigurationsdatei "/etc/ bluetooth/main.conf" sollten Sie nun festlegen, welche der beiden Bluetooth-Varianten Sie verwenden möchten. Zur Auswahl stehen "Basic Rate / Enhanced Data Rate" (BR/EDR), was oftmals auch als klassisches Bluetooth bezeichnet wird, oder "Low Energy" (LE). Für das Pairing der Airpods stellen Sie die Option "ControllerMode" in dieser Datei auf "bredr" und starten danach den Bluetooth-Service neu:
grep ControllerMode /etc/bluetooth/main.conf
 
ControllerMode = bredr
 
systemctl restart bluetooth
War das Pairing mit dem Bluetooth-Gerät erfolgreich, taucht dieses im Bluetooth-Manager auf (siehe Bild). Bei Bedarf können Sie danach die Option "Controller-Mode" auch wieder auf "dual" setzen, um beide Bluetooth-Varianten zu unterstützen.
Zu diesem Zeitpunkt können Sie die Airpods bereits als reine Kopfhörer verwenden, allerdings ist das Mikrofon noch nicht funktionstüchtig. Dies liegt am Bluetooth-Profil, das aktuell für das Headset eingerichtet wurde. Zur Auswahl stehen hier das "Advanced Audio Distribution Profile" (A2DP) sowie das "Handset / Hands Free Profile" (HSP/HFP). Ersteres erlaubt allerdings keinen bidirektionalen Datentransfer zwischen einem Bluetooth-Gerät und dem Linux-System. Insofern müssen Sie im Bluetooth-Manager oder im Volume-Manager darauf achten, dass das HSP/HFP-Profil für die Airpods ausgewählt ist.
Im Bluetooth-Manager verbinden und konfigurieren Sie beliebige Bluetooth-Geräte.
Der richtige Codec für besseren Sound
Nun besteht das nächste Problem darin, dass der Default-Codec, der zusammen mit dem HSP/HFP-Profil eingesetzt wird, keine besonders gute Soundqualität liefert. Standardmäßig kommt lediglich der 8-kHz-CVSD-Codec (Continuously Variable Slope Delta Modulation) mit diesem Profil zum Einsatz. Apples Airpods erlauben allerdings auch den Einsatz des 16-kHz-modified-Subband-Codecs (mSBC). Dieser ist allerdings standardmäßig in PipeWire deaktiviert, da er nicht von allen Bluetooth-Geräten unterstützt wird. Um ihn zu aktivieren, passen Sie die bluez-Konfigurationsdatei des PipeWire Session Managers an.
Die Default-Konfigurationsdatei liegt im Verzeichnis "/usr/share/pipewire/media-session.d/". Um sie anpassen, erzeugen Sie eine Kopie der Datei "bluez-monitor.conf" und speichern diese entweder als globale Konfigurationsdatei "/etc/pipewire/media-session.d/bluez-monitor.conf" oder individuell für jeden Benutzer als "~/.config/pipewire/media-session.d/bluez-monitor.conf". Um den mSBC-Codec zu aktivieren, ändern Sie in der Datei nun den Wert der Option "bluez5.enable-msbc" von "false" auf "true". Bei Bedarf können Sie an dieser Stelle natürlich auch noch andere Codecs aktivieren:
grep bluez /etc/pipewire/media-session.d/bluez-monitor.conf
 
bluez5.enable-sbc-xq = true
bluez5.enable-msbc = true
Im Anschluss starten Sie den Bluetooth-Service neu:
systemctl restart bluetooth
Rufen Sie jetzt den Bluetooth- oder Volume-Manager auf, sehen Sie für das HSP/ HFP- Profil neben dem standardmäßigen CVSD auch noch den mSBC-Codec aufgelistet. Nachdem Sie den mSBC-Codec ausgewählt haben, bestätigt Ihnen auch der Aufruf von pw-cli, dass die Airpods von nun an diesen Codec verwenden und Sie Ihre Gesprächspartner in einer wesentlich besseren Audioqualität hören, was umgekehrt natürlich genauso gilt:
pw-cli info all | grep bluez
 
* api.bluez5.transport = ""
* api.bluez5.profile = "headset-head-unit"
* api.bluez5.codec = "msbc"
* api.bluez5.address = "04:52:C7:D3:54:CE"
Zum Schluss noch der Hinweis, dass Sie in der Konfigurationsdatei "/etc/bluetooth/main.conf" durch das Einschalten der Option "Experimental" diverse interessante Features des Bluetooth-Systems aktivieren können:
grep Experimental /etc/bluetooth/main.conf
Experimental = true
So sehen Sie nach einem erneuten Start des Bluetooth-Services nun auch den Batteriestand Ihrer Airpods oder anderer Bluetooth-Geräte in Ihrem Desktop-Power-Manager.
Fazit
Mit PipeWire steht ein moderner Nachfolger des PulseAudio-Soundservers zur Verfügung. PipeWire unterstützt viele aktuelle Codecs, sodass Sie eine gute Audio-Qualität mit Bluetooth-Geräten wie Apple Airpods genießen können. Hierfür aktivieren Sie die passenden Codecs im PipeWire-Session-Manager und wählen diese zusammen mit dem Bluetooth-Profil aus.
(dr)
Link-Codes
[1] PipeWire: https://pipewire.org/
[3] JACK Audio Connection Kit: https://jackaudio.org/
[6] Blueman Bluetooth Manager: https://github.com/blueman-project/blueman/