Вопрос или проблема
Я пытаюсь играть в VR-игры на своем Oculus Quest 2 через Air Link. Это делается с помощью бесплатного программного обеспечения с открытым исходным кодом под названием ALVR. Мне удалось подключить шлем к этому программному обеспечению без особых проблем, за исключением аудио-части.
После некоторых усилий мне удалось заставить его работать, используя виртуальный выход, созданный ALVR с Pipewire. Проблема в том, что этот виртуальный выход создается только когда шлем находится на моей голове, и он уничтожается, когда я снимаю шлем. Это приводит к тому, что всякий раз, когда он уничтожается, все аудиоустройства (Steam, Beat Saber и т. д.) отключаются от этого выхода, поэтому, когда я снова надеваю шлем, я должен вручную переподключать их с помощью программы Helvum. Я прикрепил скриншот программы Helvum, когда шлем подключен (аудиовыход alsa-jack.jackC.11829). Как видите, ‘Beat Saber.exe’ не подключается автоматически, когда выход создается.
Helvum не сохраняет соединения. Используйте qpwgraph. Сделайте свои соединения, затем нажмите “активировать” и “эксклюзивно”, а затем — ЭТО ВАЖНО — используйте вкладку ‘patchbay’ для сохранения. Qpwgraph должен сохранить вашу настройку и правильно подключать при добавлении и отключении источников.
Вы можете либо запускать все источники, которые хотите использовать, а затем подключать их по мере необходимости и сохранять; либо добавлять каждый новый источник по мере их появления — но не забудьте обновить свою сохраненную настройку каждый раз, когда добавляется новый источник.
По моему опыту, pipewire все еще капризен, поэтому не расстраивайтесь, если это не сработает с первого раза. Иногда я сохраняю одну и ту же настройку несколько раз, чтобы убедиться. Pipewire, как правило, подключает все выходы и входы, поэтому я обнаружил, что если не хочу все входы/выходы, я направляю ненужные выходы на неиспользуемый вход 🙂
Я вижу только один способ решить эту проблему. Вы можете запустить скрипт sh, который выбирает все выходы по маске и объединяет их с конкретным выходом. Не знаю, возможно ли автоматически запустить скрипт.
Ответ или решение
PipeWire: АвтоПодключение всех аудиоустройств к Jack Sink
Проблема, с которой вы столкнулись, является достаточно распространенной среди пользователей систем на базе Linux, использующих PipeWire для работы с аудио и VR-технологиями. Основная цель — автоматизировать процесс подключения аудиоустройств к виртуальному аудиовыходу (Jack Sink), созданному вашим программным обеспечением ALVR для Oculus Quest 2. В данной статье мы рассмотрим возможные решения и сценарии, которые помогут вам преодолеть вашу текущую проблему без необходимости вручную подключать каждое устройство.
1. Понимание Системы PipeWire
PipeWire — это современный сервер мультимедиа, который обеспечивает поддержку потоковой передачи аудио и видео, позволяя легко управлять аудиоисточниками и выходами. В отличие от традиционных серверов, таких как PulseAudio или JACK, PipeWire интегрирует оба подхода и предоставляет более широкий спектр возможностей для управления и маршрутизации потоков.
2. Использование Qpwgraph для Управления Подключениями
Один из наиболее эффективных методов для автоматизации подключения audio stream с помощью PipeWire — это использование программы Qpwgraph. Этот инструмент позволяет создавать графические представления ваших аудиосоединений и управлять ими в реальном время.
Как настроить Qpwgraph:
-
Установите Qpwgraph, используя ваш пакетный менеджер. Например, для Debian/Ubuntu:
sudo apt install qpwgraph
-
Запустите Qpwgraph и создайте все необходимые соединения между вашими аудиопотоками и виртуальным выходом ALVR.
-
Не забудьте сохранить вашу конфигурацию:
- Перейдите на вкладку "Patchbay".
- Используйте опцию "Activate" и "Exclusive", чтобы зафиксировать ваши подключения.
-
После настройки сохраните вашу конфигурацию, чтобы она загружалась автоматически при старте Qpwgraph. Важно проверять и обновлять ваш патчбэй каждый раз, когда вы добавляете новое приложение или аудиоустройство.
3. Скрипт для Автоматизации Подключений
Если вам необходимо более динамическое решение, можно рассмотреть возможность написания shell-скрипта, который будет автоматически подключать все аудиопотоки к вашему Jack Sink. Пример такого скрипта:
#!/bin/bash
# Задаем имя Jack Sink
JACK_SINK="alsa-jack.jackC.11829"
# Получаем список всех активных аудиопотоков
ACTIVE_STREAMS=$(pw-cli list-all | grep 'node.name' | awk '{print $3}')
# Подключаем все активные потоки к Jack Sink
for STREAM in $ACTIVE_STREAMS; do
pw-link "$STREAM" "$JACK_SINK"
done
Этот скрипт извлекает имена всех активных аудиопотоков и устанавливает соединение для каждого из них с заданным виртуальным выходом. Запустите этот скрипт каждый раз, когда вы надеваете шлем Oculus Quest 2.
4. Автоматизация Скрипта при Подключении
Чтобы автоматизировать выполнение скрипта при каждом подключении устройства, можно воспользоваться функцией udev
, добавив соответствующее правило в систему. Пример:
-
Создайте файл правила для
udev
:sudo touch /etc/udev/rules.d/99-audio.rules
-
Вставьте в него следующую строку (замените
<YOUR_DEVICE>
на id вашего устройства):ACTION=="add", SUBSYSTEM=="audio", ATTR{idVendor}=="<YOUR_VENDOR_ID>", ATTR{idProduct}=="<YOUR_PRODUCT_ID>", RUN+="/path/to/your/script.sh"
-
После сохранения перезагрузите
udev
:sudo udevadm control --reload-rules sudo service udev restart
Заключение
Автоматизация подключения аудиопотоков в PipeWire может существенно упростить использование вашей аудиосистемы без значительных усилий. Используя Qpwgraph для настройки соединений и shell-скрипт для динамического подключения, вы сможете наслаждаться VR играми и другими аудиоприложениями, не тратя время на повторные подключения.
Надеюсь, данные рекомендации помогут вам эффективно справиться с вашей задачей. Если у вас будут дополнительные вопросы или потребуется уточнение, не стесняйтесь обращаться за помощью.