![Establecer salida de audio predeterminada cuando solo hay un receptor](https://rvso.com/image/1072915/Establecer%20salida%20de%20audio%20predeterminada%20cuando%20solo%20hay%20un%20receptor.png)
Instalé recientemente Ubuntu 22.04.1 LTS (después de usar 18.04 anteriormente). El menú de configuración de sonido tiene estas opciones de salida, de las cuales la segunda opción (S/PDIF) es la que yo uso, y elegirla hace que el audio funcione bien.
Pero después de cada reinicio, la salida de audio se restablece a la salida HDMI y necesito que el valor predeterminado sea S/PDIF. Las soluciones que encontré (y usé en instalaciones anteriores) implican elegir el disipador adecuado para Pulseaudio, ¡pero parece que ahora solo tengo un disipador! La salida de pactl list short sinks
es:
6 alsa_output.pci-0000_00_0e.0.hdmi-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
La salida de aplay -l
tampoco parece tener ningún rastro del S/PDIF:
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC283 Analog [ALC283 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC283 Digital [ALC283 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
Subdevices: 1/1
Subdevice #0: subdevice #0
¡¿Entonces donde esta?! ¿De dónde vienen las alternativas del menú? ¿Y cómo puedo configurar S/PDIF como predeterminado?
Respuesta1
Profundicé y encontré dos soluciones que funcionan, de las cuales estoy completamente satisfecho con la número 2.
Solución 1: alsa-sumidero explícito
Me di cuenta de que los dos primeros subdispositivos enumerados aplay -l
son en realidad S/PDIF, porque al reproducir sonidos de Java (como hago enmi propio reproductor de música) funciona con el dispositivo de salida configurado en plughw:0,0
o plughw:0,1
con los LED de mi DAC cambiando adecuadamente según la frecuencia de muestreo.
Para que uno de ellos sea elegido de forma predeterminada, funciona agregar
load-module module-alsa-sink
load-module module-alsa-source device=hw:0,1
a mi ~/.config/pulse/default.pa
(copiado de /etc/pulse/
). Esto agrega una opción de "Audio incorporado" en el menú de salida de sonido, que se elige de forma predeterminada. Esto es efectivamente un alias para la opción S/PDIF (que es lo que encuentro un poco molesto con esta solución).
Solución 2: configurar perfil de tarjeta
El comando Pulseaudiotarjetas de listarevela alguna información interesante. El pacmd list-cards
resultado muestra una tarjeta denominada alsa_card.pci-0000_00_0e.0
que tiene unpuertossección que contiene la línea:
iec958-stereo-output: Digital Output (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)
Esto es producido por module-udev-detect
y debe ser donde la configuración de sonido obtiene la información sobre la salida que enumera como S/PDIF. Al mirar eltarjetas de listasalida con diferentes selecciones de salida en el menú de configuración de sonido, descubrí que la diferencia estaba en lo que estaba configurado como "perfil activo". Este,encontré, se puede cambiar con set-card-profile
. Añadiendo
set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo
funcionó ~/.config/pulse/default.pa
en el sentido de que obtendría la salida S/PDIF después pulsaudio -k
, pero después de reiniciar e iniciar sesión, la salida de sonidoaúnconfigurarse en HDMI. (Aparentemente, algo más que la inicialización de Pulseaudio altera la configuración del perfil de la tarjeta). Entonces, eliminé mi local default.pa
nuevamente y agregué el comando
pacmd set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo
como unaplicación de inicio. Eso parecía haber funcionado, hasta que se activó el protector de pantalla... Cuando la pantalla se activa desde el protector de pantalla, el perfil de la tarjeta esde nuevocambiado a otra cosa! La solución que encontré para esto fue crear un script que escuche los eventos del protector de pantalla, verifique la configuración del perfil de la tarjeta cuando se activa el protector de pantalla y lo restablezca cuando se active el protector de pantalla. El guión es una versión modificada del que aparece enesta respuesta (que trata sobre configurar el fregadero en lugar del perfil de la tarjeta), y se parece a esto:
#!/bin/bash
my_card="alsa_card.pci-0000_00_0e.0"
watch="type=signal,interface=org.gnome.ScreenSaver"
screen_locked_signal="boolean true"
screen_unlocked_signal="boolean false"
_get_active_profile() {
pacmd list-cards | sed -n 's/^\s*[Aa]ctive\s\s*[Pp]rofile:\s*<\([^>]*\)>/\1/p'
}
last_profile=$(_get_active_profile)
# Watch for screensaver D-Bus signals
dbus-monitor --session "$watch" | ( \
while read signal; do
if [[ "$signal" =~ "$screen_locked_signal" ]]; then
# Screen locked: remember the current profile
last_profile=$(_get_active_profile)
elif [[ "$signal" =~ "$screen_unlocked_signal" ]]; then
# Screen unlocked: restore the last profile
pacmd set-card-profile "$my_card $last_profile"
fi
done)
Agregar este script también a las aplicaciones de inicio elimina el problema del protector de pantalla.