Создайте соединения pipewire между нулевым выходом и аудиоустройствами.

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

У меня есть система с двумя аудиокартами: scarlett 2i2, к которой подключены две колонки и монитор HDMI, к которому подключены наушники. Также возможно, что в какой-то момент я подключу некоторые блютуз-наушники.

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

Я добавил свою графику Pipewire.
Синим цветом отмечены приложения, которые воспроизводят аудио, подключенные к входу easy effects.
Красным цветом отмечена труба easy effects, подключенная к моему выходному нулевому выводу.
Белым цветом обозначены аппаратные аудиоустройства. Они получают аудио от нулевого вывода. Это те соединения, которые я хочу генерировать автоматически, так как сейчас я должен подключать их вручную каждый раз, когда я загружаю компьютер.
Желтым цветом отмечен путь микрофона.

введите описание изображения здесь

Как мне автоматически выполнять подключения от нулевого вывода к аппаратным устройствам?

В конце концов, я добавил еще один ответ, так как не смог добиться ничего с помощью скриптов LUA и конфигурации pipewire… тем не менее… мне удалось заставить это работать… в ~/.config/systemd/user:

  1. Добавьте файл custom.target <<
[Unit]
Description=Custom Target
Requires=default.target
After=default.target
AllowIsolate=yes
  1. Добавьте custom.service <<
[Unit]
Description=Custom Service
After=default.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/script #(я сделал ln -s, не знаю о /path/to/script)
[Install]
WantedBy=custom.target
  1. Запустите systemctl --user set-default custom.target (это должно создать символическую ссылку внутри .config/systemd/user/default.target, указывающей на custom.target)
    *вы должны запустить systemctl –user get-default, чтобы убедиться, что default.target установлен…

  2. Запустите systemctl --user enable custom.service, это должно создать символическую ссылку на custom.target.wants

[EDIT]
Я выкладываю свой shell-скрипт, чтобы лучше проиллюстрировать процесс

#!/bin/sh

#Статические имена
APPLDUALSINK=sink.Dual_Apple_Inc._Display_Audio.analog-stereo
APPLDUAL_L=alsa_output.usb-Apple_Inc._Display_Audio_27711502-00.analog-stereo
APPLDUAL_R=alsa_output.usb-Apple_Inc._Display_Audio_27711702-00.analog-stereo

function __link () {
        #сопряжение монитора слева с воспроизведением слева
        /usr/bin/pw-link $APPLDUALSINK:monitor_FL $APPLDUAL_L:playback_FL
        #сопряжение монитора слева с воспроизведением справа
        /usr/bin/pw-link $APPLDUALSINK:monitor_FL $APPLDUAL_L:playback_FR
        #сопряжение монитора справа с воспроизведением слева
        /usr/bin/pw-link $APPLDUALSINK:monitor_FR $APPLDUAL_R:playback_FL
        #сопряжение монитора справа с воспроизведением справа
        /usr/bin/pw-link $APPLDUALSINK:monitor_FR $APPLDUAL_R:playback_FR
}

#ожидание нуля pipewire
sleep 5

__link

.

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

Автоматическое подключение «нулевых» выходов PipeWire к аппаратным аудиоустройствам

В данной статье мы рассмотрим, как автоматически подключить созданный «нулевой» выход (null sink) к аппаратным аудиоустройствам на системе с использованием PipeWire и Wireplumber. Это поможет обойти необходимость вручную настраивать подключения при загрузке системы, что особенно актуально, если вы планируете использовать различные устройства, такие как Bluetooth-гарнитуры, динамики и наушники.

Шаг 1: Необходимые компоненты

Для выполнения данной задачи вам потребуется:

  • PipeWire: основный компонент для обработки аудио и видео.
  • Wireplumber: менеджер сессий для автоматизации управления ресурсами PipeWire.
  • Systemd: для создания кастомизированного сервиса, который будет активироваться при запуске системы.

Шаг 2: Настройка Wireplumber

Wireplumber использует Lua-скрипты для управления подключениями. Создайте свой собственный скрипт, который будет учитывать наличие «нулевого» выхода и ваших аппаратных устройств.

  1. Создание Lua-скрипта

    Перейдите в папку конфигурации Wireplumber (обычно находится по пути ~/.config/wireplumber/) и создайте файл, например, auto-connect.lua:

    local pw = require("pipewire")
    local scheduler = require("scheduler")
    
    function connect_null_sink()
       local null_sink = pw.find_node("name", "alsa_output.null")
       local devices = pw.enum_devices()
       for _, device in ipairs(devices) do
           if device.state == "PLAYBACK" and device.active then
               pw.link(null_sink.monitor, device)
           end
       end
    end
    
    scheduler.add(connect_null_sink)

    Этот скрипт найдет все активные устройства воспроизведения и автоматически подключит их к вашему «нулевому» выходу.

  2. Включение скрипта в Wireplumber

    Убедитесь, что ваш новый скрипт загружается при старте Wireplumber. Для этого отредактируйте файл wireplumber.conf, добавьте строку с путем к вашему скрипту:

    exec = "/path/to/your/auto-connect.lua"

Шаг 3: Настройка Systemd

Создайте систему юнитов для управления процессом подключения.

  1. Создайте custom.target

    В каталоге ~/.config/systemd/user/ создайте файл custom.target:

    [Unit]
    Description=Custom Target
    Requires=default.target
    After=default.target
    AllowIsolate=yes
  2. Создайте custom.service

    В том же каталоге создайте файл custom.service:

    [Unit]
    Description=Custom Service
    After=default.target
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/script # здесь ваш путь к скрипту
    RemainAfterExit=yes
    
    [Install]
    WantedBy=custom.target
  3. Активация юнита

    Запустите команды для активации вашего кастомного сервиса:

    systemctl --user set-default custom.target
    systemctl --user enable custom.service

Шаг 4: Тестирование

После выполнения всех настроек перезагрузите систему. Убедитесь, что ваши аудиоустройства автоматически подключены к «нулевому» выходу. Если что-то идет не так, проверьте логи Wireplumber и Systemd для диагностики ошибок.

Заключение

Настройка автоматических подключений между «нулевым» выходом и аппаратными аудиоустройствами с использованием PipeWire и Wireplumber позволяет значительно повысить удобство работы с аудио на вашем компьютере. Следуя вышеописанным шагам, вы сможете создать эффективную и динамическую аудиосистему, которая будет автоматически адаптироваться под ваши устройства. Не стесняйтесь настраивать и улучшать предложенные скрипты в зависимости от ваших конкретных нужд.

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

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