jack2 и pipewire-jack: конфликт пакетов и его решение
Сообщение «Cannot replace jack2 with pipewire-jack» — это не поломка репозитория, а честный отказ pacman: оба пакета претендуют на одну и ту же библиотеку libjack.so.0, поэтому вместе они не уживаются. Держать рядом их нельзя, придётся снять один из них. Если весь остальной звук у тебя уже живёт на PipeWire, выбор почти всегда в пользу pipewire-jack, а JACK-приложения запускаются через обёртку pw-jack. Разберём, почему так выходит и что именно вбить в терминал.
Почему pacman не заменяет jack2 на pipewire-jack?
В Arch оба пакета лежат в [extra], и в метаданных у них почти одинаковый набор: provides=('jack') и конфликт друг с другом. Физически это одна и та же разделяемая библиотека с JACK API, а ставить два владельца одного файла пакетный менеджер не станет:
sudo pacman -S pipewire-jack
error: failed to prepare transaction (conflicting dependencies)
:: pipewire-jack and jack2 are in conflict
Ключевое слово тут — conflicts, а не replaces. Поле replaces помогает pacman разрешить конфликт файлов при удалении старого пакета, но не отменяет конфликт зависимостей, поэтому автоматической замены не происходит. А виртуальный пакет jack в поиске показывает обоих кандидатов сразу:
pacman -Ss '^jack$'
То же самое касается 32-битных библиотек: lib32-jack2 конфликтует с lib32-pipewire-jack, и если в системе стояли Steam с 32-битными играми, пакетный менеджер упрётся в конфликт на этой паре.
Частая ошибка — искать решение в pacman -Sdd. Этот флаг снимает проверку зависимостей, но не трогает conflicts, поэтому сообщение останется тем же. Убедиться, что ты видишь ту самую проблему, можно так:
pacman -Qi jack2 | grep -E 'Provides|Conflicts|Replaces'
pacman -Qi pipewire-jack | grep -E 'Provides|Conflicts|Replaces'
Если в системе не было JACK вообще, пакет ставится без всяких танцев. Сложности начинаются ровно тогда, когда jack2 уже стоял — например, ставился ради Pro Tools, Ardour с JACK-бэкендом или старой студийной связки.
Что выбрать: jack2 или pipewire-jack?
Понять проще, если сначала убедиться, что звуковая цепочка целиком на PipeWire — тогда разговор короткий. Проверка после установки WirePlumber разобрана отдельно.
jack2 — отдельный Realtime-процесс с собственным планировщиком. Плюсы: очень низкая и предсказуемая задержка, полный набор настроек из ~/.jackdrc, независимость от PipeWire. Минусы: две независимые системы звука на одной машине, ручная возня с частотой сэмплирования, если карта не умеет 48 кГц, и вечная оглядка на jackd -r.
pipewire-jack — слой совместимости, который отдаёт JACK API поверх уже запущенного PipeWire. Плюсы: единый граф звука с PulseAudio-совместимым слоем и приложениями, авто-подстройка под формат устройства, ноль ручной синхронизации. Минусы: задержка обычно выше, чем у хорошо настроенного jack2, ~/.jackdrc полностью игнорируется, а часть старых JACK-плагинов и утилит рассчитывает на живой jackd.
Мой выбор по умолчанию: если в системе уже PipeWire и WirePlumber — pipewire-jack. jack2 имеет смысл оставить только ради специализированного JACK-сетапа, где важна минимальная задержка и ты точно знаешь, зачем тебе этот стек.
Перед решением полезно посмотреть, кто ещё зависит от jack:
pacman -Q | grep -i jack
pacman -Qi pipewire-pulse | grep -E 'Depends|Optional'
Если в списке только jack2 и lib32-jack2, снимать их безопасно. Если там jack от стороннего AUR-пакета, сначала пойми, что он делает: возможно, достаточно оставить ALSA-мост и не трогать JACK вообще.
Как поставить pipewire-jack и разрулить конфликт?
Сначала останови возможный фоновой JACK-демон, чтобы он не держал устройство:
systemctl --user stop jack.service
systemctl --user disable jack.service
Дальше снимаем старые пакеты вместе с зависимостями. Rns — удалить с зависимостями, без сохранения конфигов, сверить зависимости:
sudo pacman -Rns jack2 lib32-jack2
Если pacman ругается на зависимости, которые на них ссылаются, придётся рвать в принудительном режиме и брать ответственность на себя:
sudo pacman -Rdd jack2
И только теперь ставим замену — порядок важен, иначе снова получишь конфликт:
sudo pacman -S --needed pipewire-jack lib32-pipewire-jack
Перезапуск сессии нужен, чтобы подхватить новую библиотеку:
systemctl --user restart pipewire.service pipewire-pulse.service wireplumber.service
Обратный путь, если pipewire-jack не подошёл, симметричен: sudo pacman -Rns pipewire-jack lib32-pipewire-jack && sudo pacman -S jack2. Механика provides и conflicts, почему -Sdd тут не помогает и как читать сообщения транзакции, разобрана в шпаргалке по pacman — загляни туда, если увидишь незнакомую ошибку.
Как запускать JACK-приложения через PipeWire?
JACK-сервер при pipewire-jack поднимает сам PipeWire, имя у него — pipewire-0. Ничего стартовать руками не нужно, но клиенту стоит указать имя сервера. Для разовых запусков есть готовая обёртка pw-jack:
pw-jack ardour
pw-jack jalv
pw-jack qsynth
Она выставляет JACK_DEFAULT_SERVER и передаёт остальные аргументы приложению. То же самое можно сделать вручную:
JACK_DEFAULT_SERVER=pipewire-0 ardour
Для постоянного окружения удобно environment.d — файл подхватывается при входе в сессию:
mkdir -p ~/.config/environment.d
printf 'JACK_DEFAULT_SERVER=pipewire-0\n' > ~/.config/environment.d/jack.conf
Если приложение запускается из ярлыка и не подхватывает переменную, положи .desktop-файл в ~/.local/share/applications и поправь строку Exec, добавив в начало pw-jack .
Отдельно стоит запомнить: ~/.jackdrc при pipewire-jack не читается вообще. Старые настройки rate и period просто перестают действовать без всякой ошибки, и это частый источник путаницы при переходе.
Как проверить, какой JACK работает сейчас?
Самый честный способ — спросить у pacman, кому принадлежит библиотека:
sudo pacman -Qo /usr/lib/libjack.so.0
В ответе будет либо pipewire-jack, либо jack2, третьего не бывает. Дополнительно:
pacman -Q jack2 pipewire-jack
pactl info | grep -i 'server name'
jack_lsp
Учти нюанс: pactl info показывает сервер PulseAudio-совместимого слоя, а не JACK, поэтому строка вида Server Name: PulseAudio (on PipeWire ...) ничего не говорит про JACK. Для JACK смотри jack_lsp — он печатает порты, если клиент подключился, и ругается Cannot connect to server, если сервера нет. Со стороны PipeWire видно JACK-узлы так:
pw-dump | grep -i jack
Если не отвечает даже pactl info, проблема глубже, чем замена пакета, и начинать надо с конфликта PulseAudio и PipeWire — по ссылке внизу есть разбор. Если WirePlumber после перезапуска лежит в failed, сначала чини его, потом возвращайся к JACK-приложениям.
Где крутить задержку и патч-бай?
У jack2 всё настраивалось в ~/.jackdrc. У pipewire-jack задержка живёт в графе PipeWire, и смотреть её нужно там же:
pw-metadata -n settings 0 | grep -i latency
Значение выражено как кадры/частота. Поменять для текущей сессии:
pw-metadata -n settings 0 node.latency 512/48000
Помни, что узлы с явно заданной задержкой (например, привязанные к физическому устройству) перекрывают общее значение — проверяй фактическое через pw-top и pw-cli info <id>. Если после смены числа JACK-приложение «зависло» на 1024, сначала опусти значение, потом трогай коэффициенты в плагинах.
Соединения портов берут на себя отдельные инструменты: qpwgraph — нативный патч-бай для PipeWire на Qt, helvum — рисует граф в виде картинки через Graphviz, carla — тяжёлый вариант, зато связывает PipeWire, JACK и ALSA в одной сетке. qjackctl с jack2 тоже рабочим останется: его окно Connections говорит с JACK через libjack, но кнопка Start больше ничего не запускает и настройки драйвера там можно не трогать.
Частые вопросы
Можно ли держать оба пакета одновременно? Нет, они делят libjack.so.0. Если софт настолько привязан к живому jackd, варианты остаются такие: запустить его в контейнере или виртуалке, либо скармливать PipeWire ALSA-мостом (module-alsa-loop в WirePlumber) и забыть про JACK.
Что делать, если после перехода JACK-приложение молчит? Проверь systemctl --user status pipewire, затем pw-top — должен быть активный граф с sink. Дальше посмотри, видит ли приложение сервер: JACK_DEFAULT_SERVER=pipewire-0 <приложение>. И не забудь про перезапуск сессии после установки пакета.
Нужен ли lib32-pipewire-jack? Да, если есть 32-битные игры, плагины в префиксах Proton или старые VST. Без него Steam-игры в 32-битном режиме не увидят JACK вообще.
Чем придётся заплатить за переход? Задержкой: типичные 1024 кадра против 256 у настроенного jack2, и ~/.jackdrc больше не спасает. Для большинства задач это незаметно, для сведения на дублях разница слышна.
Полезные ресурсы
- ArchWiki: JACK — параметры сервера и совместимость версий.
- ArchWiki: PipeWire — задержка, отладка графа,
pw-metadataиpw-cli. - PipeWire не запускается: конфликт с PulseAudio — если до JACK дело не дошло.
- Нет звука после установки WirePlumber — проверка сессии перед переходом на JACK-слой.
Заключение
«Cannot replace jack2 with pipewire-jack» лечится удалением старого пакета, а не флагом -Sdd: сначала pacman -Rns jack2 lib32-jack2, потом pacman -S pipewire-jack, затем перезапуск pipewire и запуск приложений через pw-jack. Проверяй результат через pacman -Qo /usr/lib/libjack.so.0 и jack_lsp, а задержку крути pw-metadata — ~/.jackdrc в новой схеме просто не действует.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии