Как остановить PipeWire от переключения на аудио HDMI

Вопрос или проблема

Очень часто, когда я подключаю внешний экран, аудиопрофиль HDMI автоматически включается снова. Иногда даже когда экран просыпается из режима энергосбережения, будучи подключенным. И многие приложения начинают предпочитать аудио по HDMI вместо выхода на наушники.

Это нежелательное поведение. Я хочу, чтобы аудиопрофили HDMI оставались выключенными, если я сам их не включу. Как настроить PipeWire таким образом?

В качестве альтернативы, мне подошла бы приоритетная схема выбора выхода “Наушники > Аудио HDMI > Встроенные динамики”.

Я использую PipeWire 1.2.3. Дистрибутив – Gentoo Linux, я использую i3 без какого-либо окружения рабочего стола.

Ответ или решение

Чтобы остановить PipeWire от автоматического переключения на HDMI аудио при подключении внешнего экрана или выходе из спящего режима, вам понадобится изменить некоторые конфигурации. Вот пошаговое руководство по настройке PipeWire на Gentoo Linux, используя вашу систему без полного рабочего окружения (i3).

Шаг 1: Настройка конфигурации PipeWire

  1. Создание конфигурационного файла: Вам потребуется создать (или отредактировать) файл конфигурации PipeWire. Обычно он находится в ~/.config/pipewire/. Если такой директории нет, создайте её:

    mkdir -p ~/.config/pipewire/

    Затем создайте файл pipewire.conf (если его нет) с помощью текстового редактора:

    nano ~/.config/pipewire/pipewire.conf
  2. Добавление параметров конфигурации: В этом файле добавьте следующие строки, чтобы настроить приоритеты вывода аудио:

    # Установите приоритеты для аудио
    default.clock.rate          = 48000
    default.clock.drift-compensation = true
    default.audio.channels      = 2
    
    # Заглушить автоматическое переключение на HDMI
    context.modules = [
     ...
     { name = libpipewire-module-protocol-pulse }
     { name = libpipewire-module-device-restore }
     { name = libpipewire-module-context }
     { name = libpipewire-module-adapter }
     ...
    ]
    
    context.properties            = {
       "default.audio.device"      = "headphones"  # Установка приоритета
       "default.video.device"      = "silent"
    }

    Обратите внимание на строку default.audio.device. Замените headphones на имя устройства, которое вы хотите установить как приоритетное.

Шаг 2: Отключение ручного смены профиля HDMi

  1. Configuring pipewire-media-session: Если вы используете pipewire-media-session, вам нужно также внести изменения в конфигурации этой сессии. Создайте (или отредактируйте) ~/.config/pipewire/media-session.d/media-session.conf.

  2. Добавление конфигурации:

    [source]
    # Отключаем HDMI аудио по умолчанию
    [device]
    manager = "none"
    
    hook = [ 
       ...
       { name = libwireplumber }
       ...
    ]
    
    # Устанавливаем приоритет для ушей
    priority = 1000

Шаг 3: Перезапуск службы PipeWire

После внесения всех изменений вам необходимо перезапустить PipeWire, чтобы они вступили в силу. Выполните следующие команды в терминале:

systemctl --user restart pipewire
systemctl --user restart pipewire-pulse

Шаг 4: Проверка работы

После перезапуска проверьте, что устройство аудио теперь правильно отображается. Вы можете использовать следующую команду для диагностики:

pw-cli dump | grep Audiodevice

Убедитесь, что приоритеты устраивают ожидаемое поведение (на первом месте должны быть наушники, затем встроенные динамики, и последний — HDMI).

Заключение

Теперь PipeWire не должен автоматически переключаться на HDMI аудио при подключении внешнего экрана или при выходе из режима ожидания. Если всё сделано правильно, HDMI будет отключён в статусе, пока вы не включите его вручную. Следуйте этому руководству при необходимости и настройте аудио согласно вашим предпочтениям.

Если у вас возникнут трудности или появятся новые вопросы, не стесняйтесь обращаться за помощью в специализированные форумы или сообщества Gentoo.

Оцените материал
Добавить комментарий

Капча загружается...