Pipewire modul-rt Konfiguration

Hier findest du eine kurz & knackige Anleitung und Erklärung, wie du das Realtime Modul von Pipewire für deine Audio/Video Anwendungen einrichtest.

Für die Musikproduktion mit einer DAW z.B. Bitwig unter Linux kann dieses Thema für dich sehr wichtig sein.

Eventuell interessiert dich noch der Artikel über pw-metadata, mit dem du temporär und permanent deine Pipewire Konfigurationen verändern kannst

Benutzer in Gruppen aufnehmen

Der Benutzer unter dem die Applikation laufen soll, muss in die entsprechenden Gruppen (wenn vorhanden) aufgenommen werden mit einem Editor (z.B. nano oder vim) und Superuser Rechten die Datei /etc/group editieren

sudo vim /etc/group

und in den Zeilen, in denen rtkit und pipewire steht den Benutzernamen anhängen

rtkit:x:117:BENUTZERNAMEN
pipewire:x:136:BENUTZERNAMEN

Damit das wirksam (aktiv) wird, muss die Session neu gestartet werden. Entweder einfach ausloggen und wieder einloggen, oder den Computer neu starten.

Module-rt konfigurieren

Falls noch gar keine Pipewire Konfiguration vorhanden ist, muss diese erst angelegt werden. Das kann Systemweit in /etc/pipewire gemacht werden. Zu empfehlen ist es aber bei den meisten Systemen, da es sich meist um Eine-Person-Computer handelt im Heimverzeichnis des Benutzers z.B. /home/BENUTZERNAME/.config/pipewire/pipewire.conf.d .

Warum im Heimverzeichnis? Weil bei einem Backup des Benutzerverzeichnisses gleich die Pipewirekonfiguration der BernutzerIn mit gesichert wird. Gibt es auf dem Computer mehrere BenutzerInnen mit unterschiedlichen Konfigurationen, werden alle entsprechenden Konfigurationen mitgesichert und werden beim Zurückspielen einer Sicherung wieder „aktiviert“.

Info: Im Verzeichnis /usr/share/pipewire/ liegen bereits einige Beispiele von Konfigurationsdateien. Diese brauchen wir aber für unsere Aufgabe nicht. Und diese sind auch so generisch, dass sie nicht unbedingt auf unsere Konfiguration passen, ohne dass wir größere Änderungen an den gesamten Konfigurationsdateien vornehmen.

Konfiguration erstellen

Wir erstellen uns einfach die Datei pipewire.conf im Verzeichnis /home/Benutzername/.config/pipewire/pipewire.conf.d/ ganz einfach mit dem Aufruf eines Editors wie nano oder auch vim

vim /home/BENUTZERNAME/.config/pipewire/pipewire.conf.d/pipewire.conf

Und tragen folgende Zeilen ein. Das RTKit Modul libpipewire-module-rtkit ist hier deaktiviert und greift je nach Konfiguration nicht immer. Probiert es einfach aus, ob es bei euch funktioniert.
Darunter befindet sich dann das Pipewire Modul libpipewire-module-rt . DAS braucht ihr!

# Reload Configuration File
# systemctl --user daemon-reload
#
# Restart Pipewire Daemon 
# systemctl --user restart pipewire.service pipewire-pulse.socket

context.modules = [  

    # Uses RTKit to boost the data thread priority.
    #{ name = libpipewire-module-rtkit
    #    args = {
    #       nice.level   = -11
    #       rt.prio      = 88
    #       rt.time.soft = 2000000
    #       rt.time.hard = 2000000
    #   }
    #   flags = [ ifexists nofail ]
    #}

   # Set thread priorities without using RTKit.
   { name = libpipewire-module-rt  
       args = {  
           nice.level    = -11  
           rt.prio      = 88  
           rt.time.soft = 2000000  
           rt.time.hard = 2000000  
           rlimits.enabled = true  
           rtportal.enabled = true  
           rtkit.enabled = true  
       }  
       flags = [ ifexists nofail ]  
   }  
]

Pipewire als Benutzer neu starten

Da sich die Konfiguration auf der Festplatte geändert hat, müssen zwei Befehle mit ganz normalen Benutzerrechten eingegeben werden.

Neuladen der Konfiguration

systemctl --user daemon-reload

Pipewire neu starten

systemctl --user restart pipewire.service pipewire-pulse.socket

Check rt Prio Prozess

Mit dem folgenden Befehl kannst du im Systemjournal sehen ob eine Anwendung mit dem rtkit gestartet wurde.

journalctl --no-hostname -b 0 -e -u rtkit-daemon

Erklärung zu Xruns

Zur Vollständigkeit, weil das Thema Xruns in diesem Zusammenhang manchmal kommt.

Es gibt 2 Ursachen für Xruns

  1. Die Anwendungen können den Zyklus nicht rechtzeitig abschließen. Das kann daran liegen, dass der Kernel sie nicht rechtzeitig aufgeweckt hat oder dass sie nicht genügend Zeit zugewiesen bekommen haben.
  2. Das Timing des Treibers ist zu eng. Der Treiber wird nicht schnell genug aufgeweckt, um den Puffer gefüllt zu halten.
  • Ursache 1 kann zu Ursache 2 führen.
  • Ursache 2 kann durch Hinzufügen von mehr Pufferung (Vergrößerung des Headrooms) verbessert werden.
  • Das Hinzufügen von Headroom verbessert Ursache 1 aber nicht.

Mit pw-top kannst du sehen, was die Xruns verursacht.

  1. Wenn die Xruns der Anwendung zunehmen, ist es Ursache 1
  2. Wenn nur der Treiber die Xruns erhöht, ist es Ursache 2
  3. Wenn beide zunehmen, ist es Ursache 1, die Ursache 2 verursacht
Quellen
  1. Pipewire Module-rt https://docs.pipewire.org/page_module_rt.html
  2. Pipewire Docs https://docs.pipewire.org/index.html
  3. Pipewire Configuration https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire
  4. pw-metadata https://docs.pipewire.org/page_man_pw_metadata_1.html
  5. pw-top https://docs.pipewire.org/page_man_pw_top_1.html
  6. Troubleshooting & XRuns https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#xruns
  7. Pipewire Ubuntuusers https://wiki.ubuntuusers.de/Pipewire/
  8. Pipewire Home https://pipewire.org/