miércoles, 21 de junio de 2023

PipeWire en Debian 12

El servidor de sonido predeterminado en Debian 12 Bookworm, es PipeWire en su versión 0.3.65. En una nueva instalación, no tendrá que realizar ninguna operación posterior, ya que el instalador de Debian, se ocupa de instalar y configurar el servidor de sonido PipeWire.

Este manual esta creado para aquellos ordenadores que se actualizan de Debian 11 a 12 y por algún motivo el proceso de actualización no a sido el correcto. Teniendo nosotros que solucionar el problema a posteriori.



Revisar la configuración actual 

Lo primero que hacemos es revisar la configuración actual que tenemos, para ello vamos a usar el comando como usuario normal, no como root: 

$ pactl info

y nos devuelve la siguiente salida. Nos fijamos en: Nombre del servidor, si la salida es: PulseAudio (on PipeWire 0.3.65), entonces significa que estamos usando PipeWire como servidor de sonido por defecto.



o afinamos más usando la tubería grep con el comando pactl info:

pactl info | grep 'Nombre del servidor'



También podemos usar el siguiente comando, cuya salida es más fácil de visualizar:

$ inxi -A

Si en Server-1, nos aparece: Pipewire en versión v: 0.3.65 en status: active, significa que tenemos, configurado por defecto: PipeWire, y ademas lo tenemos activo.

Si no tienes instalado el comando inxi, te toca instalarlo desde consola, usando: apt install inxi



La salida de cualquiera de los comandos anteriores, nos está indicando que tenemos configurado e instalado por defecto: PipeWire. Entonces...

Si en vez de aparecer PipeWire te aparece PulseAudio, esta claro, que no tienes instalado PipeWire.




¿Que está pasando?

Leo en el manual de Debian, que el administrador de sesiones recomendado para reemplazar PulseAudio, es pipewire-audio y este controla a wireplumber. Por tanto, procedemos a instalar: wireplumber

# apt install wireplumber

y este marca como dependencia: liblua5.3-0 y libwireplumber-0.4-0

Podemos instalar estos paquetes, pero aconsejo no hacerlo, esperar y pasar al siguiente punto de este manual.









Instalar PipeWire y Wireplumber

También se me ha dado el caso, en el que ni siquiera se ha instalado PipeWire, y se a quedado con PulseAudio. Y en otros casos, se ha instalado PipeWire, pero tampoco funciona, normalmente por la falta del paquete: wireplumber y lógicamente sus dependencias.

Entonces vamos a instalar todos los paquetes mínimos necesarios, para asegurarnos del correcto funcionamiento de PipeWire. Algunos pueden ser, que se encuentren instalados, en otros casos, faltarán todos los paqueste.

Los paquetes mínimos, necesarios para una instalación funcional de PipeWire son los siguientes:

pipewire
pipewire-bin
pipewire-pulse
libpipewire-0.3-modules
wireplumber
libwireplumber-0.4-0
liblua5.3-0

# apt install pipewire pipewire-bin pipewire-pulse wireplumber libwireplumber-0.4-0 liblua5.3-0 libpipewire-0.3-modules








Después de instalar, tenemos que iniciar el servidor pipewire (como usuario normal, no como root). O puedes reiniciar el ordenador (ya que es lo mismo)

Recordar que este proceso se hace como usuario normal, no como root.

Primero, vamos a parar el servicio de PulseAudio, usando el siguiente comando:

systemctl --user stop pulseaudio

Luego arrancamos pipewire, usando el siguiente comando:

systemctl --user start pipewire

y para aquellos que ya tenían instalado y corriendo pipewire, pero no les funcionaban, reinicia el servidor pipewire, usando el siguiente comando:

systemctl --user restart pipewire

Una vez realizado todo este proceso, ya tenemos funcionando pipewire.


Alsamixer

Recordar controlar el nivel de los canales en alsamixer, yo aconsejo ponerlos al máximo, (porque luego lo vas  a controlar desde pipewire) porque si en alsamixer tenemos un nivel bajo o nivel cero, lógicamente, no va a sonar, aunque tengamos el nivel máximo en pipewire.

Un canal apagado/silenciado, es aquel que aparece con las letras “MM” (Mute = silencio) debajo de la barra de nivel del canal seleccionado. Tengamos muy en cuenta que una barra puede estar al nivel 100% pero aún así estar silenciado/apagado, así que es muy importante comprobar si esta silenciado/apagado. Para quitar el apagado/silenciado de un canal pulsamos la tecla M. Esto cambia “MM” a “OO”.



========================================================



Información - Lectura recomendada

Recomiendo la siguiente lectura, sobre: PipeWire, PulseAudio, ALSA, JACK, Bluetooth. El cual nos resolverá muchas dudas.


PipeWire

PipeWire es un servidor y API para manejar multimedia en Linux. 

A diferencia de PulseAudio en el audio de consumo y de JACK en el audio profesional, PipeWire pretende trabajar para todos los usuarios en todos los niveles. Entre otras técnicas, PipeWire consigue esto gracias a la capacidad de cambiar dinámicamente entre diferentes tamaños de búfer, para adaptarse a los diferentes requisitos de latencia de diferentes aplicaciones de audio.

En Debian 11, 
está disponible PipeWire 0.3.19  y se puede usar de forma experimental como sustituto de la biblioteca de espacio de usuario de ALSA, PulseAudio, y JACK

En Debian 12, PipeWire 0.3.65, es el servidor de sonido predeterminado.

PipeWire puede instalarse simplemente instalando el paquete: pipewire.

En Debian 10, algunos complementos se dividen en paquetes separados. Estos se pueden encontrar en: libspa-bluetooth y libspa-ffmpeg.

En Debian 11, ya no hay un paquete de complementos FFmpeg, y el paquete Bluetooth se ha movido a: libspa-0.2-bluetooth. También hay un complemento JACK en el paquete libspa-0.2-jack, necesario para usar PipeWire como servidor JACK.

Para Debian 11, PipeWire se puede usar para reemplazar PulseAudio. Además, está disponible el paquete: pipewire-audio-client-libraries. Las bibliotecas de este paquete permiten que las aplicaciones accedan directamente a JACK y ALSA a la salida a través del servidor PipeWire, lo que permite interactuar entre los diferentes servidores de sonido y APIs.

Para Debian 12 y posteriores, pipewire-audio-client-libraries se reemplaza por pipewire-alsa y pipewire-jack. Se recomienda instalar el metapaquete pipewire-audio que depende de wireplumber (el administrador de sesiones recomendado), pipewire-pulse (para reemplazar PulseAudio ), pipewire-alsa (ALSA) y libspa-0.2-bluetooth (para compatibilidad con Bluetooth). Además, la instalación de este metapaquete eliminará PulseAudio para evitar conflictos entre ambos servidores de sonido.

PipeWire la capacidad de ser el sustituto directo para las soluciones de audio de existentes en Linux, incluidos PulseAudio y JACK. Tiene una gran ventaja, incluyen un menor uso de la CPU, mejor soporte para dispositivos Bluetooth y mejor integración entre aplicaciones usando JACK y PulseAudio.

PipeWire arranca el servicio de audio a nivel de usuario normal (no como root), reemplazando completamente a PulseAudio.

Ejecute estos comandos como usuario normal (no como root):

- Habilite e inicie el nuevo servicio pipewire-pulse con:

systemctl --user --now enable pipewire pipewire-pulse

- Buscar nuevos archivos de servicio con:

systemctl --user daemon-reload

- Deshabilite y detenga el servicio PulseAudio con:

systemctl --user --now disable pulseaudio.service pulseaudio.socket

Puede verificar qué servidor está en uso, como su usuario normal (no como root), ejecutando:

pactl info | grep 'Nombre del servidor'

Si usa PipeWire, el nombre del servidor será:

PulseAudio (On ​​PipeWire 0.3.65)


También puedes usar el comando:

pactl info





Asegúrese de que esto continúe funcionando después de un reinicio. De lo contrario, es posible que deba "enmascarar" el servicio PulseAudio, ejecutando:

systemctl --user mask pulseaudio

Esto puede requerir otro reinicio, después de lo cual PipeWire debe usarse exclusivamente, incluso después de más reinicios. Esto impedirá que el servicio PulseAudio se active por completo. Si desea restaurar la funcionalidad anterior, deberá ejecutar el mismo comando de nuevo con la acción "desenmascarar".



ALSA

ALSA es una parte esencial de la pila de audio en Linux y no puede ser reemplazado por PipeWire, proporciona la interfaz de los controladores de audio del kernel. PipeWire utiliza ALSA para acceder al hardware. El resto de las características son controladas por PipeWire.



JACK

Los clientes de JACK se pueden configurar para emitir a través de PipeWire en lugar de JACK.

Instale los paquetes pipewire-audio-client-libraries y libspa-0.2-jack , si aún no están instalados.

Crea este archivo vacío:

# touch /etc/pipewire/media-session.d/with-jack

Ejecute clientes JACK usando el envoltorio pw-jack , o copie:

# cp /usr/share/doc/pipewire/examples/ld.so.conf.d/pipewire-jack-*.conf /etc/ld.so.conf.d/

Y correr:

# ldconfig

Esto reemplazará las bibliotecas del servidor JACK con los reemplazos de PipeWire en el tiempo de ejecución de la aplicación, apuntando el enlazador dinámico a la carpeta:

/usr/lib/x86_64-linux-gnu/pipewire-0.3/jack/



Bluetooth

PipeWire generalmente funcionará bien junto con Bluez para proporcionar audio de alta calidad a dispositivos de audio habilitados para Bluetooth cuando se use como reemplazo de PulseAudio, con algunas advertencias.

Como mínimo, deberá instalar el paquete libspa-0.2-bluetooth, eliminar el paquete pulseaudio-module-bluetooth y luego reiniciar su computadora o reiniciar los servicios de PipeWire, en caso contrario, las conexiones del dispositivo fallarán con "Protocolo no disponible".

PipeWire intentará elegir el mejor códec posible de forma predeterminada. Puede anular esto y modificar muchas otras configuraciones relacionadas en el archivo /etc/pipewire/media-session.d/bluez-monitor.conf. Puede editar este archivo como usuario normal (no como root) copiando el archivo archivo anterior y editandolo en su carpeta personal:

~/.config/pipewire/media-session.d/bluez-monitor.conf



PipeWire en Debian 12 Bookworm

La versión de PipeWire de Debian 12, es mucho más fácil de configurar como un reemplazo.

Ahora hay dos administradores de sesión disponibles:

- pipewire-media-session se usa solo por su funcionalidad básica para compartir pantalla.

WirePlumber como servidor de sonido del sistema operativo, (el mantenedor de Debian) recomienda instalar este paquete. Este comando instalará WirePlumber mientras elimina el antiguo administrador de sesión:

# apt install wireplumber

Luego tenemos que habilitar WirePlumber en systemd (ejecutándose como usuario normal, no como root):

$ systemctl --user --now enable wireplumber.service

El paquete WirePlumber recomienda instalar pipewire-pulse, por lo que normalmente, se instala automáticamente como dependencia. Solo tendrás que habilitar manualmente las capas ALSA y JACK, que ya no es necesario crear un archivo vacío en el directorio de configuración de su sesión de medios (ya que ese directorio ni siquiera existirá cuando use WirePlumber), 

Si está interesado en el cambio automático de perfil de Bluetooth (por ejemplo, cambiar de A2DP a HSP/HFP cuando una aplicación necesita acceso al micrófono) WirePlumber obtuvo soporte en la versión 0.4.8.

Un cambio importante en comparación con Debian 11, es que el archivo de configuración se ha movido de directorio: /etc/pipewire/ a /usr/share/pipewire/ 


PulseAudio

Instale el paquete pipewire-pulse y reinicie. Esto configurará PipeWire para activar su daemon de reemplazo de PulseAudio. Verifique que esté habilitado ejecutando:

pactl | grep 'Nombre del servidor'

Si PipeWire está configurado correctamente, esto imprimirá:

"Nombre del servidor: PulseAudio (en PipeWire 0.3.XX)"


Si no funciona correctamente, consulte las instrucciones mas arriba de Debian para enmascarar PulseAudio.


ALSA y JACK

Las instrucciones de Debian 11 todavía se aplican, en el momento de escribir este artículo.

Tenga en cuenta que los comandos "touch" son innecesarios si está utilizando WirePlumber en lugar de pipewire-media-session. Consulte la parte superior de este sección para obtener más detalles sobre qué administrador de sesión debe usar.

Si está utilizando pipewire-media-session, tenga en cuenta que la configuración, se ha cambiado de directorio, de: /etc/pipewire/media-session.d/ a /usr/share/pipewire/media-session.d y ajuste las rutas según sea necesario al hacer uso de las instrucciones anteriores.



Bluetooth

PipeWire generalmente funcionará bien junto con Bluez para proporcionar audio de alta calidad a dispositivos de audio habilitados para Bluetooth cuando se use como reemplazo de PulseAudio, con algunas advertencias.

Como mínimo, deberá instalar el paquete libspa-0.2-bluetooth, eliminar el paquete pulseaudio-module-bluetooth y luego reiniciar su computadora o reiniciar los servicios de PipeWire, en caso contrario, las conexiones del dispositivo fallarán con "Protocolo no disponible".

PipeWire intentará elegir el mejor códec posible de forma predeterminada. Puede anular esto y modificar muchas otras configuraciones relacionadas en el archivo /etc/pipewire/media-session.d/bluez-monitor.conf. Puede editar este archivo como usuario normal (no como root) copiando el archivo archivo anterior y editandolo en su carpeta personal:

~/.config/pipewire/media-session.d/bluez-monitor.conf















1 comentario:

Knight99 dijo...

Una entrada muy currada. Enhorabuena me ha gustado cómo está redactada.