Можете ли вы запускать pulseaudio одновременно для пользователя root и обычного пользователя?

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

Возможно ли одновременно воспроизводить звук из 2 процессов PulseAudio, один из которых принадлежит пользователю root, а другой – пользователю без root-прав?

Например, взаимное исключение между Audacity, запущенным от имени пользователя root, и VLC, запущенным от имени пользователя без root-прав. Оба приложения используют отдельные процессы PulseAudio.
Когда VLC сначала запускается пользователем без root-прав, то она работает нормально, но затем при попытке запустить Audacity от имени root происходит ошибка в Audacity
“Ошибка открытия звукового устройства
Попробуйте изменить аудио-хост, устройство воспроизведения и частоту дискретизации проекта”
Процесс PulseAudio root-пользователя завладел звуковым выходным устройством здесь.

Наоборот, когда Audacity сначала запускается от имени root-пользователя, то после попытки запуска VLC от имени пользователя без root-прав она отключается, без звукового выхода.
Процесс PulseAudio пользователя без root-прав завладел звуковым выходным устройством здесь.

Другие примеры: когда веб-браузеры с открытым YouTube запускаются от имени root-пользователей, а процессы wine – от обычных пользователей, то также невозможно воспроизводить звук одновременно из обоих приложений.

Я использую эти команды, чтобы узнать, какие процессы используют какие звуковые устройства.
sudo fuser -fv /dev/snd/*
sudo lsof /dev/snd/*

Я пробовал запускать процесс PulseAudio на уровне системы, как описано здесь
https://ubuntuforums.org/showthread.php?t=1417647

Завершаю все экземпляры сервера pulseaudio
pulseaudio -k
Запускаю pulseaudio в системном режиме
pulseaudio --system -D

Предполагается, что это предоставит звук всем пользователям. Но это не совсем работает для меня. Я до сих пор не могу воспроизводить звук одновременно из 2 процессов PulseAudio, один из которых принадлежит root-пользователю, а другой – пользователю без root-прав.
Я думаю, что этот системный режим PulseAudio работает только для нескольких пользователей без root-прав. Вероятно, это отношение root-пользователь/пользователь без root-прав исключено из этого системного режима PulseAudio.

Можно ли сделать какие-либо изменения в Linux, чтобы можно было одновременно воспроизводить звук из процесса PulseAudio, запущенного для root-пользователя, и процесса PulseAudio, запущенного для пользователя без root-прав?

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

Запуск PulseAudio для пользователя root и обычного пользователя одновременно представляет собой интересную задачу с точки зрения управления ресурсами и безопасности в Linux. Для полноценного понимания проблемы и возможных решений важно учесть архитектуру PulseAudio и правила обеспечения безопасности в операционных системах семейства Unix.

Теоретическая основа

PulseAudio — это продвинутый звуковой сервер для систем, основанных на Unix, который обрабатывает аудиопотоки и маршрутизацию между приложениями и физическими устройствами. Работая преимущественно в пространстве пользовательского уровня, он обеспечивает гибкость маршрутизации звука и управление громкостью.

Одной из ключевых особенностей PulseAudio является его многопользовательская и многопоточность, которые позволяют нескольким приложениям получать доступ к звуковым ресурсам одновременно. Однако вызовы возникают, когда речь идет о взаимодействии процессов, запущенных от имени root и обычного пользователя.

По умолчанию, PulseAudio работает сессийно, т.е. его процесс применяется в пределах конкретного пользовательского окружения. Это объясняется политиками безопасности: каждый пользователь должен иметь изолированный доступ к своим звуковым потокам, чтобы предотвратить уязвимости и потенцируемые атаки межпроцессного взаимодействия.

Пример 1: Взаимодействие приложений

В ситуации, описанной в вопросе, когда пользователь запускает VLC от имени обычного пользователя, а затем пытается воспроизвести звук в Audacity от имени root, возникает ошибка. Это связано с тем, что каждый пользователь имеет отдельный экземпляр PulseAudio, который пытается получить эксклюзивный доступ к звуковому устройству. Подобная проблема воспроизводится в обратной последовательности действий, когда сначала запускается приложение Audacity от root, а затем VLC от имени обычного пользователя оказывается заглушенным.

Попытка запуска PulseAudio в системном режиме (pulseaudio --system -D) может казаться естественным решением, предполагая, что это предоставит единый сервер звука для всех пользователей на системе. Однако на практике запуск PulseAudio в системном режиме не рекомендуется и даже отключен в большинстве дистрибутивов Linux. Основные причины такой политики:

  1. Ограничения безопасности: Системный режим предполагает, что все пользователи могут теоретически влиять на качество звука других пользователей, что создаёт риски и неравномерность в управлении правами.

  2. Конфликты с архитектурой: PulseAudio изначально не предназначен для использования в системном режиме из-за своей конструкции и подхода к обработке политик доступа.

  3. Технические ограничения: В блокировках и управлениях доступом к /dev/snd/* через fuser и lsof видно, что устройствами может управлять одновременно лишь ограниченное число процессов PulseAudio, и очевидно, системный демон принимает решения в пользу одного пользователя.

Применение к Задаче

Для достижения цели одновременного воспроизведения звука от root и обычного пользователя необходимо обойти ограничение эксклюзивного удержания акустических устройств. Возможные пути решения:

  1. Использование Jack Audio Connection Kit: Jack — это профессиональный звуковой сервер, который предоставляет более гибкие возможности управления соединениями между приложениями. Он позволяет соединить и маршрутизировать аудиопотоки более эффективно между пользователями или процессами.

  2. Использование Unix-групп: Настройка подсистемы таким образом, чтобы группы пользователей имели доступ к звуковым устройствам, может помочь, однако потребуется точная настройка прав доступа и контроля, чтобы избежать конфликтов.

  3. Использование виртуальных звуковых устройств: Создание виртуальных устройств, предоставленных ALSA, может быть решением, однако для конфигурации и использования может потребоваться значительное количество времени и экспериментов, учитывая специфику приложений и архитектуры операционной системы.

  4. Системные настройки и распределители: Использование внешних, более специализированных программных средств для распределения и обработки звуковых потоков может также помочь, однако потребует значительных усилий по внедрению.

Дополнительными преимуществами использования подходов с виртуальными устройствами и Jack является возможность гибкого управления динамическим маршрутом в реальном времени. Это позволяет не только решить проблему параллельного доступа, но и повысить качество управления звуками для профессиональных нужд.

Заключение

Проблема одновременного звуковоспроизведения для процессов от root и обычного пользователя в Linux — это вопрос в большей степени системы управления ресурсами и архитектуры безопасности, установленных в PulseAudio. Несмотря на сложность задачи, существуют методы, включающие использование альтернативных серверов звука и настройку пользовательских прав доступа. Для конкретного использования их преимуществ потребуется детальная конфигурация и настройка системы, основанная на потребностях и условиях вашей среды.

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

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