Debian переключает динамики ноутбука на наушники, но не HDMI на наушники. Можно ли автоматически переключать аудиовыход?

Debian переключает динамики ноутбука на наушники, но не HDMI на наушники. Можно ли автоматически переключать аудиовыход?

При использовании динамиков ноутбука подключение наушников автоматически переключает выход с динамиков на наушники и наоборот при отключении. При использовании динамиков монитора через HDMI автопереключение отсутствует:

Можно ли автоматически переключать аудиовыход между устройствами, когда наушники подключены (не подключены)?

Debian 12 (bookworm), версия ядра 6.7.9-2, pipewire 1.0.5.

решение1

Автоматическое переключение звука между динамиками ноутбука и аналоговыми наушниками происходит между различными выходами одного аудиочипа. Чип может даже иметь некоторую аппаратную поддержку для этого: с аудиоразъемами на передней панели в стиле HD-Audio это переключаемая функция внутри звукового чипа, которая при включении автоматически отключает другие выходы, когда обнаруживает, что подключены наушники.

(Если вы используете eg alsamixerи выбираете фактический аппаратный микшер вашего звукового чипа вместо упрощенного регулятора громкости, предоставляемого Pipewire, вы можете увидеть его в виде переключателя Auto-Mute.)

В старых аудиоразъемах на передней панели типа AC97 фактически имеется механический переключатель внутри самого аудиоразъема, который прерывает выходные сигналы на динамик/линейный выход при подключении наушников.

При переключении между HDMI и наушниками любого типа или между динамиками ноутбука и USB-гарнитурой поток аудиоданных необходимо переключить на другой аудиочип. Pipewire может это сделать, но только если приоритеты выходного приемника установлены правильно и включено автоматическое переключение.

Видетьэта запись в блоге: в нем описывается, как проверять и настраивать приоритеты приемников звука в wireplumberсерии 0.4, которая есть в Debian 12.Этот совет не будет напрямую применим, если у вас wireplumberверсия 0.5 или выше, поскольку метод настройки изменился в версии 0.5.

Вкратце: первый шаг — включить автоматическое переключение при подключении нового звукового устройства. Вы можете сделать это временно, запустив pactl load-module module-switch-on-connect.

Этот вопрос AskUbuntu.SEтакже включает предложение запустить pactl load-module module-switch-on-port-available: Я понимаю, что это позволяет переключаться, когда на существующем аудиоустройстве становится доступен новый порт.

Чтобы сделать приведенные выше команды постоянными, прочтите /usr/share/pipewire/pipewire-pulse.confпримеры и добавьте соответствующую часть в *.confфайл в вашем ~/.config/pipewire/pipewire-pulse.conf.d/каталоге (создайте его, если он не существует). Например:

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" ] }
]

Вторым шагом является обеспечение назначения вашим звуковым устройствам соответствующих приоритетов.

Вы можете использовать wpctl status, чтобы увидеть идентификационные номера для любых устройств, которые интересуют Pipewire, а затем wpctl inspect <number> | grep -e node -e priorityувидеть имя(имена), описание и приоритет конкретного аудиоустройства. Если порядок приоритетов по умолчанию не тот, который вам нужен, вы можете создать файл ~/.config/wireplumber/main.lua.d/60-*.luaдля их настройки, с содержимым, похожим на это:

rule = {
  matches = {
    {
      { "node.name", "equals", "alsa_output.usb-MOTU_M4_M4MC0570FU-00.Direct__hw_M4__sink" },
    },
  },
  apply_properties = {
    ["priority.driver"] = 1050,
    ["priority.session"] = 1050,
  },
}

Приоритет по умолчанию для "ожидаемого" основного звукового устройства должен быть около 1009, поэтому назначение более высокого значения какому-либо другому звуковому устройству сделает pipewireего предпочтительным среди других, если оно доступно. Но не следует назначать значение выше 1500, поскольку значения выше зарезервированы для устройств мониторинга.

Видимо, есть также значения приоритета для отдельных портов, к сожалению, я в настоящее время не знаю, как их настроить. Вы можете просмотреть их с помощью, pactl list cardsхотя вывод довольно длинный.

Если кто-то знает хороший способ настройки приоритетов портов Pipewire, смело редактируйте его, если не хотите писать полный ответ самостоятельно.

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