Jack

Материал из ALT Linux Wiki

Что такое JACK

JACK (https://jackaudio.org/) — сервер звуковых соединений, используемый при профессиональной работе со звуком. JACK позволяет разным приложениям обмениваться потоками звука с низкой задержкой в режиме «реального времени». Многие приложения для обработки звука поддерживают или даже требуют JACK. Например, наличие работающего JACK очень желательно при работе с DAW Ardour.

Одновременная работа JACK и PulseAudio невозможна и вряд ли будет возможна в обозримом будущем.

Установка JACK

$ sudo apt-get install jack-audio-connection-kit

Запуск JACK

Можно запустить JACK из командной строки, например, так:

jackd -dalsa -dhw:SB -r48000 -p1024 -n2

но лучше воспользоваться программой QJackCtl, предоставляющей дружественный к пользователю интерфейс для запуска и остановки JACK и имеющей разумные настройки «по умолчанию».

Управление соединениями JACK

Из визуальных редакторов соединений JACK в AltLinux есть Patchage. Кроме того, в QJackCtl встроен свой редактор графа соединений JACK, хотя и не такой красивый и удобный.

Альтоспецифичные проблемы

Cannot create RT messagebuffer thread: Operation not permitted (1)

Иногда запуск JACK сопровождается сообщениями: Cannot create RT messagebuffer thread: Operation not permitted (1)

Это означает, что у JACK нет возможности использовать режим «реального времени». Некоторые приложения (например, Ardour) без режима реального времени просто не будут работать.

Скорее всего, это связано с тем, что ядро собрано с настройкой CONFIG_RT_GROUP_SCHED=y (на момент создания страницы с этой опцией собирается, например, альтовое ядро std-def). В таких ядрах у приложений, запускаемых от непривилегированного пользователя, нет доступа к RT-возможностям планировщика, даже если соответствующее разрешение прописано через механизм limits, пока эта возможность явно не делегирована пользователю через механизм cgroups.

Проверить, какое у вас ядро, можно так:

sudo cat /boot/config-`uname -r` | grep CONFIG_RT_GROUP_SCHED

На проблемных ядрах эта команда выдаст

CONFIG_RT_GROUP_SCHED=y

Убедиться, что cgroups не настроены и доступа к RT нет можно так:

$ ulimit -r
95

(убедимся, что нет других причин, по которым мы не сможем работать в режиме «реального времени»),

$ chrt -f 80 echo "I'm chrt'ed!"

(попробуем поменять приоритет).

На ядрах без CONFIG_RT_GROUP_SCHED=y пользователь увидит сообщение

I'm chrt'ed!

а на ядрах с CONFIG_RT_GROUP_SCHED=y ошибку:

chrt: failed to set pid 0's policy: Операция не позволена

Настроим через cgroups доступ к RT-возможностям планировщика ядра с помощью сервиса cgconfig (именно это решение рекомендуется авторами JACK). Для этого нужно поставить пакет cgroup, если он ещё не поставлен:

$ sudo apt-get install cgroup

дописать в /etc/cgconfig.conf:

group rtaudio {
        perm {
                task {
                        uid = root;
                        gid = audio;
                }
                admin {
                        uid = root;
                        gid = root;
                }
        }
        cpu {
                cpu.rt_runtime_us = 950000;
        }
}

а в /etc/cgrules.conf:

@audio cpu rtaudio/

после чего сделать сервисы cgred и cgconfig стартующими при запуске системы и перезагрузиться:

$ sudo systemctl enable cgred
$ sudo systemctl enable cgconfig
$ systemctl reboot

Теперь от пользователей, входящих в группу audio (убедитесь, что ваш пользователь в неё входит с помощью команды groups) JACK можно запускать в режиме «реального времени».