Вопрос или проблема
У меня есть система с двумя аудиокартами: scarlett 2i2, к которой подключены две колонки и монитор HDMI, к которому подключены наушники. Также возможно, что в какой-то момент я подключу некоторые блютуз-наушники.
Я создал нулевой вывод, к которому подключаю все аудиоприложения, и хотел бы автоматически подключить этот нулевой вывод к моим аппаратным аудиоустройствам. Поскольку блютуз-наушники могут быть в системе или отсутствовать, я думаю, что мне нужно делать это динамически, поэтому мне нужен Wireplumber, но я не знаю, как это сделать.
Я добавил свою графику Pipewire.
Синим цветом отмечены приложения, которые воспроизводят аудио, подключенные к входу easy effects.
Красным цветом отмечена труба easy effects, подключенная к моему выходному нулевому выводу.
Белым цветом обозначены аппаратные аудиоустройства. Они получают аудио от нулевого вывода. Это те соединения, которые я хочу генерировать автоматически, так как сейчас я должен подключать их вручную каждый раз, когда я загружаю компьютер.
Желтым цветом отмечен путь микрофона.
Как мне автоматически выполнять подключения от нулевого вывода к аппаратным устройствам?
В конце концов, я добавил еще один ответ, так как не смог добиться ничего с помощью скриптов LUA и конфигурации pipewire… тем не менее… мне удалось заставить это работать… в ~/.config/systemd/user
:
- Добавьте файл
custom.target
<<
[Unit]
Description=Custom Target
Requires=default.target
After=default.target
AllowIsolate=yes
- Добавьте
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
-
Запустите
systemctl --user set-default custom.target
(это должно создать символическую ссылку внутри.config/systemd/user/default.target
, указывающей наcustom.target
)
*вы должны запустить systemctl –user get-default, чтобы убедиться, что default.target установлен… -
Запустите
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-скрипты для управления подключениями. Создайте свой собственный скрипт, который будет учитывать наличие «нулевого» выхода и ваших аппаратных устройств.
-
Создание 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)
Этот скрипт найдет все активные устройства воспроизведения и автоматически подключит их к вашему «нулевому» выходу.
-
Включение скрипта в Wireplumber
Убедитесь, что ваш новый скрипт загружается при старте Wireplumber. Для этого отредактируйте файл
wireplumber.conf
, добавьте строку с путем к вашему скрипту:exec = "/path/to/your/auto-connect.lua"
Шаг 3: Настройка Systemd
Создайте систему юнитов для управления процессом подключения.
-
Создайте
custom.target
В каталоге
~/.config/systemd/user/
создайте файлcustom.target
:[Unit] Description=Custom Target Requires=default.target After=default.target AllowIsolate=yes
-
Создайте
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
-
Активация юнита
Запустите команды для активации вашего кастомного сервиса:
systemctl --user set-default custom.target systemctl --user enable custom.service
Шаг 4: Тестирование
После выполнения всех настроек перезагрузите систему. Убедитесь, что ваши аудиоустройства автоматически подключены к «нулевому» выходу. Если что-то идет не так, проверьте логи Wireplumber и Systemd для диагностики ошибок.
Заключение
Настройка автоматических подключений между «нулевым» выходом и аппаратными аудиоустройствами с использованием PipeWire и Wireplumber позволяет значительно повысить удобство работы с аудио на вашем компьютере. Следуя вышеописанным шагам, вы сможете создать эффективную и динамическую аудиосистему, которая будет автоматически адаптироваться под ваши устройства. Не стесняйтесь настраивать и улучшать предложенные скрипты в зависимости от ваших конкретных нужд.