Αντικατάσταση PulseAudio με PipeWire

To PipeWire είναι το μέλλον στον ήχο (αλλά και στο βίντεο) του Linux. Κάποιες τολμηρές διανομές έχουν κάνει ήδη την μετάβαση, κάποιες άλλες όχι ακόμα. Στον μικρό οδηγό αυτό θα δούμε πως μπορείς να αντικαταστήσεις το PulseAudio με το Pipewire.

Προεργασία

Πριν κάνω μια τέτοια δραστική αλλαγή πήρα πρώτα ένα αντίγραφο με το TimeShift. Οι αλλαγές δεν είναι δραστικές και μπορείς να επιστρέψεις εύκολα πίσω, αλλά ποτέ δεν βλάπτει. Στην συνέχεια ας δούμε από που ξεκινάμε

pactl info
Server String: /run/user/1001/pulse/native
Library Protocol Version: 35
Server Protocol Version: 35
Is Local: yes
Client Index: 9
Tile Size: 65472
User Name: talos
Host Name: pop-os
Server Name: pulseaudio
Server Version: 15.0
Default Sample Specification: s16le 2ch 44100Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.usb-0d8c_USB_Sound_Device-00.analog-stereo
Default Source: alsa_input.usb-0d8c_USB_Sound_Device-00.analog-stereo
Cookie: 47e6:5dea

Προσέξτε την γραμμή που λέει Server Name: pulseaudio. Τρέχουμε ένα καθαρό σύστημα PulseAudio.

Εγκατάσταση PipeWire ppa

Υπάρχει ένα PPA για το PipeWire που θα προσθέσουμε στο σύστημα και θα κάνουμε αναβαθμίσεις. Λογικά θα δουλέψει και σε Ubuntu 18.04 – 21.10.

sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream -y
sudo apt update
sudo apt upgrade -y

Τρέχω το τελευταίο PopOS και υπήρξε κάποιο πρόβλημα με το Lutris. Οπότε τροποποίησα την εντολή σε

sudo apt upgrade -y --allow-downgrades

και η αναβάθμιση απέτυχε. Πέσαμε δυστυχώς πάνω στην ίδια περίπτωση.

Συμβαίνουν αυτά :innocent: Λίγες μέρες μετά …

Εγκατάσταση PipeWire

Σε αναβαθμισμένο σύστημα χωρίς το ppa (να ναι καλά το timeshift) το ξαναπρόσθεσα και η εγκατάσταση ήταν ομαλή αυτή την φορά.

sudo apt install pipewire gstreamer1.0-pipewire pipewire-pulse libspa-0.2-bluetooth libspa-0.2-jack -y

Προαιρετικά για λίγο διάβασμα

sudo apt install pipewire-doc

Ενεργοποίηση PipeWire

Ο δαίμονας του ήχου είναι μια υπηρεσία χρήστη του systemd, και όχι κάποια υπηρεσία συστήματος. Δηλαδή ξεκινά και τερματίζει ακολουθώντας την συνεδρία κάθε χρήστη. Οπότε θα πρέπει να απενεργοποιήσουμε την υπηρεσία του pulseaudio και να ενεργοποιήσουμε το pipewire-media-session.

Η διαδικασία αυτή θα πρέπει να γίνει για κάθε χρήστη

Στο τερματικό:

systemctl --user mask pulseaudio 
systemctl --user --now disable pulseaudio.service pulseaudio.socket
systemctl --user --now enable pipewire-media-session.service

Τώρα θα μπορούσα να ξεκινήσω αμέσως να το χρησιμοποιώ, αλλά προτίμησα να κάνω μια επανεκκίνηση.

Χρήση ήχου με PipeWire

Στις λίγες δοκιμές που έκανα δεν προέκυψε κάποιο πρόβλημα, σε όσα παιγνίδια δοκίμασα είχαν ήχο κανονικά και δεν υπάρχει κάποια διαφορά. Το μόνο “πρόβλημα” που προέκυψε ήταν πως ο ήχος ήταν δυνατότερος για κάποιο λόγο. Το βάζω στα θετικά.

Η μόνη διαφορά ήταν εδώ

και εδώ που λέει πως πράγματι η βιβλιοθήκη του pulse χρησιμοποιεί το PipeWire

pactl info

Μπορείτε να βρείτε την διαφορά;

Server String: /run/user/1001/pulse/native
Library Protocol Version: 35
Server Protocol Version: 35
Is Local: yes
Client Index: 94
Tile Size: 65472
User Name: talos
Host Name: pop-os
Server Name: PulseAudio (on PipeWire 0.3.39)
Server Version: 15.0.0
Default Sample Specification: float32le 2ch 48000Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.usb-0d8c_USB_Sound_Device-00.analog-stereo
Default Source: alsa_input.usb-0d8c_USB_Sound_Device-00.analog-stereo
Cookie: 2a4e:3a3c

Εγκατάσταση WirePlumber

Κατά την εγκατάσταση του PipeWire το Debian πρότεινε την χρήση του WirePlumber, δημιουργία του φίλου Καγιαδάκη. Θα το δοκίμαζα έτσι και αλλιώς :innocent:

sudo add-apt-repository ppa:pipewire-debian/wireplumber-upstream
sudo apt install gir1.2-wp-0.4 wireplumber wireplumber-doc

Και θα πρέπει να ενεργοποιήσουμε την υπηρεσία

systemctl --user --now enable wireplumber.service

Την κατάσταση των υπηρεσιών που τρέχουν μπορούμε να την δούμε με

systemctl --user list-units --type=service --state=running "*wire*"

και η σχετική λίστα

  UNIT                   LOAD   ACTIVE SUB     DESCRIPTION                       
  pipewire-pulse.service loaded active running PipeWire PulseAudio
  pipewire.service       loaded active running PipeWire Multimedia Service
  wireplumber.service    loaded active running Multimedia Service Session Manager

Προσωπικά πάντως για την χρήση που το έκανα δεν είδα κάποια διαφορά

Απεγκατάσταση / απενεργοποίηση

Για την απεγκατάσταση απλά ακυρώνουμε τα προηγούμενα βήματα. Αλλά μπορούμε απλά να επιστρέψουμε τις υπηρεσίες στην προηγούμενη κατάσταση και να το αφήσουμε ήσυχο.

systemctl --user unmask pulseaudio 
systemctl --user --now disable pipewire-media-session.service
systemctl --user --now disable wireplumber.service
systemctl --user --now enable pulseaudio.service pulseaudio.socket
systemctl reboot

Άξιζε τον κόπο;

Η μετάβαση ήταν τόσο ομαλή που δεν ξέρω αν αξίζει τον κόπο :innocent:, τουλάχιστον για την περίπτωση μου, που δεν κάνω κάποια ιδιαίτερη χρήση του ήχου. Και υπάρχει και ο χρυσός ο κανόνας “αν δουλεύει δεν το σκαλίζεις”. Αλλά αν κάνεις ποιο πολύπλοκα πράγματα αξίζει μια δοκιμή, άλλωστε είναι το μέλλον του ήχου.

Μην ξεχνάς ότι αν περνάς ξένα PPA στην διανομή, ειδικά αν σκαλίζουν τα βασικά υποσυστήματα, είναι μια συνταγή για καταστροφή.

Το σύστημα της δοκιμής τρέχει PopOS. Για άλλες debian based διανομές δείτε :

5 «Μου αρέσει»