To PipeWire είναι το μέλλον στον ήχο (αλλά και στο βίντεο) του Linux. Κάποιες τολμηρές διανομές έχουν κάνει ήδη την μετάβαση, κάποιες άλλες όχι ακόμα. Στον μικρό οδηγό αυτό θα δούμε πως μπορείς να αντικαταστήσεις το PulseAudio με το Pipewire.
Οι περισσότερες διανομές ήδη έχουν περάσει σε Pipewire. To άρθρο πλέον έχει περισσότερο ιστορικό χαρακτήρα
Για τους βιαστικούς
Προεργασία
Πριν κάνω μια τέτοια δραστική αλλαγή πήρα πρώτα ένα αντίγραφο με το 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
και η αναβάθμιση απέτυχε. Πέσαμε δυστυχώς πάνω στην ίδια περίπτωση.
Συμβαίνουν αυτά Λίγες μέρες μετά …
Εγκατάσταση 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, δημιουργία του φίλου Καγιαδάκη. Θα το δοκίμαζα έτσι και αλλιώς
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
Άξιζε τον κόπο;
Η μετάβαση ήταν τόσο ομαλή που δεν ξέρω αν αξίζει τον κόπο , τουλάχιστον για την περίπτωση μου, που δεν κάνω κάποια ιδιαίτερη χρήση του ήχου. Και υπάρχει και ο χρυσός ο κανόνας “αν δουλεύει δεν το σκαλίζεις”. Αλλά αν κάνεις ποιο πολύπλοκα πράγματα αξίζει μια δοκιμή, άλλωστε είναι το μέλλον του ήχου.
Μην ξεχνάς ότι αν περνάς ξένα PPA στην διανομή, ειδικά αν σκαλίζουν τα βασικά υποσυστήματα, είναι μια συνταγή για καταστροφή.
Το σύστημα της δοκιμής τρέχει PopOS. Για άλλες debian based διανομές δείτε :
- PipeWire on Ubuntu, PopOS, ElementaryOS 6 – [itso.dk]
- GitHub - pipewire-debian/pipewire-debian: Upstream Version of pipewire, wireplumber, roc-toolkit & blueman for debian/ubuntu