News - Logiciels Libres

Gentoo : Quelques déboires avec Pipewire...

Gentoo : Quelques déboires avec Pipewire...
Salut à tous,

Le 20 Avril, Gentoo a stabilisé la version 0.3.49 de Pipewire ( https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=561af425eb4908bc4835a9fb9906ff80d79abb6d ) et dans la foulée, appliqué un petit patch.

Evidemment, étant utilisateur de Gentoo, je fais les mises à jour de mon système quand j'y pense. Globalement une fois par semaine.
J'ai donc mis à jour mon système la nuit du 21 au 22 Avril et arrêté le PC le matin avant de partir travailler.

Mais le soir, après allumage, je connecte Twitch pour mettre un stream en fond et ... la vidéo tourne, pas de son... Je lance mon lecteur de musique ... pas de son non plus...

J'avais vu une mise à jour de pipewire avec ce message :

Code TEXT :
* Messages for package media-video/pipewire-0.3.49-r1:
 
 * It is recommended to raise RLIMIT_MEMLOCK to 256 for users
 * using PipeWire. Do it either manually or add yourself
 * to the 'audio' group:
 *
 *   usermod -aG audio <youruser>
 *
 * JACK emulation is incomplete and not all programs will work. PipeWire's
 * alternative libraries have been installed to a non-default location.
 * To use them, put pw-jack <application> before every JACK application.
 * When using pw-jack, do not run jackd/jackdbus. However, a virtual/jack
 * provider is still needed to compile the JACK applications themselves.
 *
 * PipeWire daemon startup has been moved to a launcher script!
 * Make sure that /etc/pipewire/pipewire.conf either does not exist or no
 * longer is set to start a session manager or PulseAudio compatibility daemon (all
 * lines similar to '{ path = /usr/bin/pipewire*' should be commented out)
 *
 * Those manually starting /usr/bin/pipewire via .xinitrc or similar _must_ from
 * now on start /usr/bin/gentoo-pipewire-launcher instead! It is highly
 * advised that a D-Bus user session is set up before starting the script.
 *
 * This ebuild auto-enables PulseAudio replacement. Because of that, users
 * are recommended to edit: /etc/pulse/client.conf and disable
 * autospawning of the original daemon by setting:
 *
 *   autospawn = no
 *
 * Please note that the semicolon (;) must _NOT_ be at the beginning of the line!
 *
 * Alternatively, if replacing PulseAudio daemon is not desired, edit
 * /usr/bin/gentoo-pipewire-launcher by commenting out the relevant
 * command:
 *
 * #/usr/bin/pipewire -c pipewire-pulse.conf &
 *
 * NOTE:
 * Starting with PipeWire-0.3.30, this package is no longer installing its config
 * into /etc/pipewire by default. In case you need to change
 * its config, please start by copying default config from /usr/share/pipewire
 * and just override the sections you want to change.
 *
 * For latest tips and tricks, troubleshooting information and documentation
 * in general, please refer to https://wiki.gentoo.org/wiki/PipeWire


N'utilisant pas Pipewire mais Pulseaudio, je m'inquiète pas tant que ça... Cependant j'ai le réflexe de regarder SI pipewire est lancé...

Code BASH :
ps -ef | grep pipewire


Exact un process est lancé, je test de le kill et la vidéo en cours de chargement se lance instantanément ! Il y a donc eu un changement de comportement chez Gentoo. J'ouvre un message sur le forum dans un premier temps avec les détails habituels : https://forums.gentoo.org/viewtopic-p-8702165.html
J'utilise Gentoo + OpenRC (donc pas systemd) + GNOME + Pulseaudio.

On me conseille quand même d'ouvrir un bug. Chose faite : https://bugs.gentoo.org/840278

Entre temps, je me demande ce qui a changé dans pipewire, et je remarque un script : /usr/bin/gentoo-pipewire-launcher

Voici le contenu :

Code BASH :
#!/bin/sh
 
# PipeWire launcher script for XDG compliant desktops on OpenRC.
#
# systemd users are very _STRONGLY_ advised to use the much
# more reliable and predictable user units instead.
 
# WARNING: This script assumes being run inside XDG compliant session,
# which means D-Bus session instance is expected to be correctly set up
# prior to this script starting. If that is not true, things may break!
 
# Best to reap any existing daemons and only then try to start a new set.
pkill -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
 
# The core daemon which by itself does probably nothing.
/usr/bin/pipewire &
 
# The so called pipewire-pulse daemon used for PulseAudio compatibility.
# Commenting this out will stop the PA proxying daemon from starting,
# however ALSA (with pipewire-alsa), JACK (with jack-sdk) and PW API using
# clients will still have access to audio and may end up clashing with
# non-PW apps over HW control (most notably, /usr/bin/pulseaudio daemon).
/usr/bin/pipewire -c pipewire-pulse.conf &
 
# Hack for bug #822498
sleep 1
 
# Finally a session manager is required for PipeWire to do anything.
exec /usr/bin/wireplumber
 


C'est donc ce script qui lance pipewire, avec des petits "hack" sympa dedans, notez le sleep 1 pas très joli ^^

Je décide donc de mettre un exit 0; pour terminer le script correctement lorsqu'il est invoqué. Pipewire ne se lance plus, Pulseaudio reste là, j'ai du son. parfait dans l'urgence pour me détendre le weekend.

En effectuant quelques recherches, je me rend compte que gentoo entame le processus de remplacement de pulseaudio par pipewire : https://bugs.gentoo.org/744622 et que je dois quand même y passer. Dans mon bug on me dit d'éditer /etc/pulse/client.conf et de mettre autospawn = no afin que ça soit pipewire qui lance pulse et non que pulse se lance de lui même. C'est fonctionnel MAIS, il y a un MAIS.

Au moment d'enregistrer une vidéo avec OBS, le son craque, c'est inaudible . D'ailleurs, j'avais rencontré quelques problème sur Calculate qui a fait la bascule en Octobre et j'avais expliqué comment revenir à Pulseaudio : https://www.linuxtricks.fr/news/10-logiciels-libres/510-calculate-linux-revenir-a-pulseaudio/

Le problème se reproduisant, ma bricole de laisser Pulseaudio ne va pas rester fonctionnelle, il faut donc entamer la bascule vers pipewire.
Entre temps, avec pulseaudio activé, j'ai pu vous enregistrer une vidéo. Cette semaine, je n'ai pas regardé pour régler le problème, le temps m'était limité. Donc pas de MàJ du PC, et je n'ai rien touché.

Le son étant toujours craquant, j'ai testé de mettre à jour le PC Portable, équipé de Gentoo + Gnome + OpenRC et je mets manuellement autospawn à no. Je lance OBS, je branche le micro USB et ... le son ne craque pas... Le problème n'était donc que sur le PC fixe.

Je me suis rappelé, en 2009, quand pulseaudio est arrivé sous Mandriva, j'avais du augmenter la latence dans pulseaudio pour ne pas avoir de craquements :
Code BASH :
PULSE_LATENCY_MSEC=60 skype


J'ai effectué cela via la console pavucontrol, et créé un fichier pipewire-pulse.conf dans mon home en mettant des valeurs recommandées trouvées par des gens ayant le même souci :

Code :
--- /usr/share/pipewire/pipewire-pulse.conf   2022-04-22 08:01:01.620019237 +0200
+++ /home/adrien/.config/pipewire/pipewire-pulse.conf   2022-04-24 22:37:57.957381487 +0200
@@ -83,9 +83,9 @@
         #  client.access = "restricted"     # permissions for clients
         #}
     ]
-    #pulse.min.req          = 256/48000     # 5ms
+    pulse.min.req          = 1024/48000     # 5ms
     #pulse.default.req      = 960/48000     # 20 milliseconds
-    #pulse.min.frag         = 256/48000     # 5ms
+    pulse.min.frag         = 512/48000     # 5ms
     #pulse.default.frag     = 96000/48000   # 2 seconds
     #pulse.default.tlength  = 96000/48000   # 2 seconds
     #pulse.min.quantum      = 256/48000     # 5ms


Rien de cela n'a fonctionné. j'ai quand même enregistré avec le micro, par acquis de conscience sur Audacity ma voix, et le micro USB ne grésille pas.
Audacity n'enregistre que depuis 1 source. Je pense donc à un problème de synchronisation des cartes son.

J'upgrade sur de bons conseils mon kernel (j'avais le 5.4 LTS) au 5.10 LTS, mais pas d'amélioration. Finalement, je reste sur le 5.10 :)

Après de multiples essais, j'ai constaté que le souci était OBS. Il n'était pas compilé avec le USE "pipewire" :

Code :
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for media-video/obs-studio-27.2.4:
 U I
 + + alsa                            : Add support for media-libs/alsa-lib (Advanced Linux Sound Architecture)
 + + browser                         : Enable browser source support via (precompiled) CEF. 
 - - decklink                        : Build the Decklink plugin. 
 - - fdk                             : Build with LibFDK AAC support. 
 - - jack                            : Add support for the JACK Audio Connection Kit
 - - lua                             : Enable Lua scripting support
 + + lua_single_target_luajit        : Build for LuaJIT only
 - - nvenc                           : Add support for NVIDIA Encoder/Decoder (NVENC/NVDEC) API for hardware accelerated encoding and decoding on NVIDIA cards (requires x11-drivers/nvidia-drivers)
 + + pipewire                        : Build with PipeWire support. 
 + + pulseaudio                      : Add support for PulseAudio sound server
 - - python                          : Build with scripting support for Python 3. 
 - - python_single_target_python3_10 : Build for Python 3.10 only
 - - python_single_target_python3_8  : Build for Python 3.8 only
 + + python_single_target_python3_9  : Build for Python 3.9 only
 - - speex                           : Build with Speex noise suppression filter support. 
 + + ssl                             : Build with TLS/SSL support for RTMPS connections. 
 + + truetype                        : Add support for FreeType and/or FreeType2 fonts
 + + v4l                             : Enable support for video4linux (using linux-headers or userspace libv4l libraries)
 - - vlc                             : Build with VLC media source support. 
 + + wayland                         : Enable dev-libs/wayland backend


Après recompilation, c'est sans effet, toujours les craquements. J'ai beau supprimer les sources de son et les remettre, c'est pareil.

La dernière solution était la bonne : Supprimer complètement les paramétrages d'OBS et repartir de 0. Et le son est parfaitement clair !

Il faut dire que mon /home est le même depuis 2012, que j'utilisais sur le PC portable et j'ai tout transféré en 2018 sur le PC fixe. Il a vu KDE, MATE GNOME et Xfce avant de revoir GNOME. Clémentine, Vivaldi, Thunderbird, nero, LibreOffice, Gimp, Audacity, Kdenlive et OBS ont leurs profils depuis leur premier lancement !

Parfois, repartir de zéro fait du bien, mais j'avoue que le craquement dans l'enregistrement, j'ai pensé à plein de pistes mais pas de repartir sur un profil neuf !

Bref, j'avais envie de vous partager ça sur le blog, c'est pas souvent que j'écris ici, mais ça fera plaisir à ceux qui préfèrent me lire, au lieu de m'écouter.
Cependant, j'ai quand même repris les éléments de cet article dans une vidéo explicative sur Youtube : https://www.youtube.com/watch?v=3G3ni-AFs_s