Установить аудиовыход по умолчанию, если есть только один приемник

Установить аудиовыход по умолчанию, если есть только один приемник

Я только что установил Ubuntu 22.04.1 LTS (после использования 18.04). В меню конфигурации звука есть эти варианты вывода, из которых я использую второй вариант (S/PDIF), и при его выборе звук работает просто отлично.

меню аудиовыхода

Но после каждой перезагрузки аудиовыход сбрасывается на выход HDMI, а мне нужно, чтобы он по умолчанию был S/PDIF. Решения, которые я нашел (и использовал в предыдущих установках), включают выбор правильного приемника для Pulseaudio, но, похоже, у меня сейчас только один приемник! Вывод pactl list short sinks:

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

В выходных данных aplay -lтакже, похоже, нет никаких следов 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

Так где же он?! Откуда берутся альтернативы меню? И как мне сделать S/PDIF по умолчанию?

решение1

Я копнул глубже и нашел два рабочих решения, из которых меня полностью устраивает номер 2.

Решение 1: Явный ALSA-sink

Я понял, что первые два перечисленных подустройства aplay -lна самом деле являются S/PDIF, поскольку воспроизведение звуков из Java (как я делаю вмой собственный музыкальный проигрыватель) работает с выходным устройством, установленным на , plughw:0,0или plughw:0,1со светодиодами на моем ЦАП, изменяющимися соответствующим образом в соответствии с частотой дискретизации.

Чтобы один из них был выбран по умолчанию, нужно добавить

load-module module-alsa-sink
load-module module-alsa-source device=hw:0,1

в мой ~/.config/pulse/default.pa(скопировано из /etc/pulse/). Это добавляет опцию «Встроенный звук» в меню вывода звука, которая выбирается по умолчанию. Это фактически псевдоним для опции S/PDIF (что я нахожу немного раздражающим в этом решении).

Решение 2: набор-карт-профиль

Команда Pulseaudioсписок-картыраскрывает некоторую интересную информацию. В pacmd list-cardsвыводе указана карта с именем alsa_card.pci-0000_00_0e.0, которая имеетпортыраздел, содержащий строку:

iec958-stereo-output: Digital Output (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)

Это производится module-udev-detect, и должно быть там, где настройки звука получают информацию о выходе, который он перечисляет как S/PDIF. Глядя насписок-картывыход с различными выборами выходов в меню настроек звука, я обнаружил, что разница была в том, что было установлено как «активный профиль». Это,я нашел, можно изменить с помощью set-card-profile. Добавление

set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo

чтобы ~/.config/pulse/default.paработало в том смысле, что я получал выход S/PDIF после pulsaudio -k, но после перезагрузки и входа в систему вывод звука былвсе ещебыть настроен на HDMI. (Очевидно, что-то еще, а не инициализация Pulseaudio, изменяет настройки профиля карты.) Поэтому вместо этого я default.paснова удалил свой локальный и добавил команду

pacmd set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo

какзапуск приложения. Казалось, это сработало, пока не включилась заставка... Когда экран выходит из заставки, профиль картысноваизменено на что-то другое! Решение, которое я нашел для этого, было создание скрипта, который прослушивает события заставки, проверяет настройки профиля карты, когда заставка активируется, и возвращает их к этому, когда заставка отключается. Скрипт является измененной версией того, что вэтот ответ (который касается настройки приемника, а не профиля карты), и выглядит так:

#!/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)

Добавление этого скрипта в автозагрузку приложений избавляет от проблемы с заставкой.

Связанный контент