Establecer salida de audio predeterminada cuando solo hay un receptor

Establecer salida de audio predeterminada cuando solo hay un receptor

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.

menú de salida de audio

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 sinkses:

6   alsa_output.pci-0000_00_0e.0.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED

La salida de aplay -ltampoco 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 -lson 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,0o plughw:0,1con 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-cardsresultado muestra una tarjeta denominada alsa_card.pci-0000_00_0e.0que 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-detecty 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.paen 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.panuevamente 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.

información relacionada