
Cuando se utilizan parlantes de computadora portátil, al enchufar los audífonos se cambia automáticamente la salida de los parlantes a los audífonos, y viceversa al desconectarlos. Cuando se utilizan los altavoces del monitor a través de HDMI, no hay cambio automático:
¿Se puede cambiar automáticamente la salida de audio entre dispositivos cuando los auriculares están (des)conectados?
Debian 12 (ratón de biblioteca), versión del kernel 6.7.9-2, pipewire 1.0.5.
Respuesta1
La conmutación automática de audio entre los parlantes de una computadora portátil y unos auriculares analógicos se realiza entre diferentes salidas de un único chip de audio. El chip puede incluso tener soporte de hardware: con conectores de audio del panel frontal estilo HD-Audio, es una función conmutable dentro del chip de sonido que, cuando está habilitada, silencia automáticamente otras salidas cuando detecta que hay auriculares conectados.
(Si utiliza, por ejemplo, alsamixer
y selecciona el mezclador de hardware real de su chip de sonido en lugar del control de volumen simplificado proporcionado por Pipewire, es posible que lo vea como un Auto-Mute
interruptor).
Con los conectores de audio del panel frontal estilo AC97 más antiguos, en realidad es un interruptor mecánico dentro del propio conector de audio, que interrumpirá las señales de salida al altavoz/salida de línea cuando se conecte un conector para auriculares.
Al cambiar entre HDMI y auriculares de cualquier tipo, o entre parlantes de computadora portátil y auriculares USB, el flujo de datos de audio debe cambiarse a un chip de audio diferente. Pipewire puede hacer eso, pero lo hará solo si las prioridades del sumidero de salida están configuradas correctamente y la conmutación automática está habilitada.
Veresta entrada de blog: describe cómo verificar y ajustar las prioridades del receptor de audio en wireplumber
la serie 0.4, que es lo que tiene Debian 12.Este consejo no será aplicable directamente si tiene wireplumber
0.5 o superior, ya que el método de configuración cambió en la versión 0.5.
En pocas palabras: el primer paso es habilitar el cambio automático cuando se conecta un nuevo dispositivo de sonido. Puede hacerlo temporalmente ejecutando pactl load-module module-switch-on-connect
.
Esta pregunta de AskUbuntu.SETambién incluye la sugerencia de ejecutar pactl load-module module-switch-on-port-available
: Entiendo que permite cambiar cuando hay un nuevo puerto disponible en un dispositivo de audio existente.
Para que los comandos anteriores sean persistentes, lea /usr/share/pipewire/pipewire-pulse.conf
los ejemplos y agregue la parte relevante a un *.conf
archivo en su ~/.config/pipewire/pipewire-pulse.conf.d/
directorio (créelo si no existe). Por ejemplo:
pulse.cmd = [
{ cmd = "load-module" args = "module-always-sink" flags = [ ] } #default
{ cmd = "load-module" args = "module-switch-on-connect" } #uncommented
{ cmd = "load-module" args = "module-switch-on-port-available" } #added
#{ cmd = "load-module" args = "module-gsettings" flags = [ "nofail" ] }
]
El segundo paso es asegurarse de que a sus dispositivos de sonido se les asignen las prioridades adecuadas.
Puede utilizar wpctl status
para ver los números de identificación de cualquier dispositivo que le interese a Pipewire y luego wpctl inspect <number> | grep -e node -e priority
ver los nombres, la descripción y la prioridad de un dispositivo de audio en particular. Si el orden de prioridad predeterminado no es el que desea, puede crear un ~/.config/wireplumber/main.lua.d/60-*.lua
archivo para ajustarlos, con contenidos similares a este:
rule = {
matches = {
{
{ "node.name", "equals", "alsa_output.usb-MOTU_M4_M4MC0570FU-00.Direct__hw_M4__sink" },
},
},
apply_properties = {
["priority.driver"] = 1050,
["priority.session"] = 1050,
},
}
La prioridad predeterminada para el dispositivo de sonido principal "esperado" debe ser aproximadamente 1009, por lo que al asignar un valor más alto a algún otro dispositivo de sonido, se preferirá pipewire
a otros si está disponible. Pero no debe asignar un valor superior a 1500, porque los valores superiores están reservados para dispositivos de monitorización.
Aparentemente también hay valores de prioridad para puertos individuales; desafortunadamente, actualmente no sé cómo personalizarlos. Puedes verlos pactl list cards
aunque el resultado es bastante largo.
Si alguien conoce una buena manera de ajustar las prioridades de los puertos de Pipewire, no dude en editarla si no desea escribir una respuesta completa.