Instalei recentemente o Ubuntu 22.04.1 LTS (depois de usar o 18.04 anteriormente). O menu de configuração de som tem essas opções de saída, das quais a segunda opção (o S/PDIF) é a que eu uso, e escolhê-la faz com que o áudio funcione perfeitamente.
Mas após cada reinicialização, a saída de áudio é redefinida para a saída HDMI e preciso que ela seja padronizada para S/PDIF. As soluções que encontrei (e usei em instalações anteriores) envolvem a escolha do coletor certo para o Pulseaudio, mas parece que só tenho um coletor agora! A saída de pactl list short sinks
é:
6 alsa_output.pci-0000_00_0e.0.hdmi-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
A saída de aplay -l
também não parece ter nenhum vestígio do 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
Então onde está?! De onde vêm as alternativas do menu? E como posso definir S/PDIF como padrão?
Responder1
Pesquisei mais fundo e encontrei duas soluções funcionais, das quais estou totalmente satisfeito com o número 2.
Solução 1: alsa-sink explícito
Percebi que os dois primeiros subdispositivos listados por aplay -l
são na verdade S/PDIF, porque reproduzir sons de Java (como faço emmeu próprio reprodutor de música) funciona com o dispositivo de saída configurado para plughw:0,0
ou plughw:0,1
com os LEDs do meu DAC mudando apropriadamente de acordo com a taxa de amostragem.
Para que um deles seja escolhido por padrão, funciona para adicionar
load-module module-alsa-sink
load-module module-alsa-source device=hw:0,1
para o meu ~/.config/pulse/default.pa
(copiado de /etc/pulse/
). Isso adiciona uma opção “Áudio Integrado” no menu de saída de som, que é escolhida por padrão. Este é efetivamente um alias para a opção S/PDIF (que é o que considero um pouco irritante com esta solução).
Solução 2: definir perfil de cartão
O comando Pulseaudiocartões de listarevela algumas informações interessantes. A pacmd list-cards
saída lista um cartão nomeado alsa_card.pci-0000_00_0e.0
que possui umportosseção que contém a linha:
iec958-stereo-output: Digital Output (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)
Isso é produzido por module-udev-detect
e deve ser onde as configurações de som obtêm as informações sobre a saída listada como S/PDIF. Ao olhar paracartões de listasaída com diferentes seleções de saída no menu de configurações de som, descobri que a diferença estava no que estava definido como “perfil ativo”. Esse,eu encontrei, pode ser alterado com set-card-profile
. Adicionando
set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo
funcionou ~/.config/pulse/default.pa
no sentido de que eu obteria a saída S/PDIF depois pulsaudio -k
, mas após a reinicialização e o login, a saída de som seriaaindaser definido como HDMI. (Aparentemente, algo diferente da inicialização do Pulseaudio altera a configuração do perfil do cartão.) Então, em vez disso, excluí meu local default.pa
novamente e adicionei o comando
pacmd set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo
como umaplicativo de inicialização. Isso parecia ter funcionado, até que o protetor de tela entrou em ação… Quando a tela é despertada do protetor de tela, o perfil do cartão éde novomudou para outra coisa! A solução que encontrei para isso foi criar um script que escuta os eventos do protetor de tela, verifica a configuração do perfil do cartão quando o protetor de tela é ativado e o configura novamente quando o protetor de tela é desativado. O script é uma versão modificada daquele emesta resposta (que trata da configuração do coletor em vez do perfil do cartão), e fica assim:
#!/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)
Adicionar esse script também aos aplicativos de inicialização elimina o problema do protetor de tela.