Как настроить звук с помощью PulseAudio и Multiseat?
В духе полного раскрытия, я только что разместил этот вопрос на форумах Ubuntu, но я думаю, что больше людей, работающих над этим, не повредит.
У меня есть установка на несколько мест, работающая довольно хорошо. Горячее подключение устройств ввода работает как положено и так далее. Единственная проблема, которую я до сих пор не могу решить, это получить аудио для каждого места.
Вот краткое изложение моих попыток заставить аудио работать:
Сделайте ~/.pulse/default.pa динамически настроенным в зависимости от того, в каком $DISPLAY пользователь входит в систему.
- Смотрите этот pastebin для деталей.
Загрузите pulseaudio как общесистемный экземпляр.
- Не могу заставить это работать. Ни одно из аудиооборудования не было доступно пользователям.
Используйте правила udev, чтобы отмечать места в ConsoleKit. Следующие рекомендации udev можно найти здесь: http://www.freedesktop.org/wiki/Software/systemd/multiseat
- Я не думал, что это сработает, хотя это было "гарантировано" работать кем-то в irc.freenode #pulseaudio
Ни одна из этих попыток не принесла успеха, поэтому сейчас я обращаюсь к сообществу за помощью. Вполне возможно, что предложенные методы работают, и я просто испортил некоторые аспекты, idk. Это последняя часть головоломки, которая необходима, прежде чем я смогу перейти и обновить страницу MultiseatX, чтобы включить инструкции для Ubuntu 12.04.
Мое понимание ситуации: доступ к pulseaudio ограничен активным сеансом, как отмечено в ConsoleKit (что-то о ACL). CK может пометить только один сеанс как активный за один раз. Этот простой маленький жизненный факт заставляет меня поверить, что решение должно включать в себя pulaudio, запускаемый как общесистемный экземпляр. Каждый пользователь должен подключаться к импульсному серверу и быть ограниченным подмножеством всего оборудования. Возможно, каждый пользователь подключается к импульсному серверу через localhost, idk. Я знаю, что независимо от моих попыток и их неудачных результатов, я всегда мог использовать sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wav
играть что-то на любом оборудовании.
Я хватаюсь за соломинку и теперь до последних волосков, которые я могу вырвать из головы. Пожалуйста, помогите мне разобраться в этом, чтобы мы могли поделиться богатством. Любая дополнительная необходимая информация будет предоставлена по вашему запросу.
2 ответа
Я провел много часов, исследуя онлайн, тестируя различные установки и общаясь с разработчиками Pulseaudio. Суть в том, что запуск pulseaudio в обычном пользовательском режиме позволит только активному сеансу, отмеченному ConsoleKit, получить доступ к звуковому оборудованию. Поскольку текущий ConsoleKit может пометить только один сеанс как активный за раз, это означает, что мы должны запустить общесистемный экземпляр pulseaudio. Плюс: у каждого места может быть индивидуальный звук. Недостаток: ВСЕ аудиоустройства доступны для любого пользователя и могут манипулировать по желанию. Это не идеальная ситуация для интернет-кафе или других общественных мест, где безопасность является реальной проблемой. Помните об этом при создании политики безопасности вашего сайта. Было бы разумно ограничить выполнение pavucontrol только для администраторов.
Как всегда, сделайте резервную копию всех ваших файлов конфигурации по умолчанию. Если вы работали с вашими конфигами без резервного копирования, вы можете получить пакет pulseaudio с помощью apt-get -d install pulseaudio. Это загрузит только пакет (в /var/cache/archives/apt), и вы сможете извлечь содержимое для получения настроек по умолчанию. Имейте в виду, что client.conf там не включен.
Чтобы запустить pulseaudio как системный демон, нам нужно отредактировать несколько файлов.
1.) / etc / default / pulseaudio
PULSEAUDIO_SYSTEM_START=1
2.) /etc/pulse/daemon.conf - см. Man pulse-daemon.conf для получения дополнительной информации.
daemonize = yes
local-server-type = system
autospawn = no
Нам также нужно добавить пользователей в группу импульсного доступа.
sudo usermod -a -G pulse-access <username>
Теперь, когда все пользователи имеют доступ к звуковому оборудованию, нам нужно выбрать оборудование, которое будет использовать каждый пользователь. Это можно сделать с помощью pavucontrol. Обратите внимание, что настройки хранятся на пользователя и не будут следовать за местом. Если пользователи поменялись местами, вам нужно будет повторно выбрать нужное аудиооборудование.
Дополнительные комментарии на Pulseaudio
Я надеялся, что будет более элегантное решение для получения звука на место. Использование общесистемного Pulseaudio в мультисайтах имеет много недостатков и не является полностью стабильным между перезагрузками. Я попытался запустить общесистемный экземпляр, чтобы пользовательские экземпляры подключались к нему как к серверу через локальный хост. Похоже, это не работает, так как при запуске pulseaudio --start он создает исходный файл daemon.conf.
Что касается ConsolKit
Проблема, которую мы видим при запуске обычного импульса для пользователя, заключается в том, что одно рабочее место имеет доступ к оборудованию, а все остальные имеют фиктивный выход. Это связано с тем, что ConsoleKit не полностью осведомлен о месте. CK рассматривает все наши места как сеансы seat1 и может отметить только одну сессию как активную. Этот факт можно увидеть, запустив getfacl /dev/snd/*. Мне пришла в голову мысль, что мы можем отредактировать acl соответствующих файлов / dev / snd /, основываясь на том, что $DISPLAY использует конкретный пользователь. Это вариант, который я не исследовал. Пожалуйста, рассмотрите возможность внесения вклада в проблему множественности мест, изучив эту гипотезу и отредактировав документ со своими выводами.
Существуют многосетевые ветки для ConsoleKit, GDM-2.3 и GDM-3.x, которые должны обеспечивать автоматическую функциональность нескольких мест.
Дополнительные примечания
1.) Было бы целесообразно также запретить пользователям загружать модули DISALLOW_MODULE_LOADING = 1.
2.) autospawn = no не совсем необходим, как видно из моего файла примера. Это не вызывает никаких проблем.
Недавно я пытался решить проблему с PulseAudio и Multiseat. Видя, что не было элегантного решения, мой обходной путь должен был использовать сеть.
Это решение подходит для моего сценария, поскольку я являюсь пользователем, который чаще всего находится в машине, а мое место чаще всего регистрируется. И мое место настроено для левши, и никто другой не использует его.
В моем ~/.config/pulse/default.pa
Я скопировал конфигурацию системы /etc/pulse/default.pa
и добавил следующую строку:
load-module module-native-protocol-tcp auth-anonymous=1 auth-ip-acl=127.0.0.1
В настройках pulseaudio других пользователей добавьте туннель - или несколько, если это то, что вам нужно - с чем-то вместе:
load-module module-tunnel-sink server=127.0.0.1 sink=alsa_output.pci-0000_00_XX.X.iec958-stereo
Измените имя раковины так, чтобы оно совпадало с именем на вашем компьютере. Вы можете решить настроить более дружественное имя - что означает, что вы должны настроить это в своем файле настроек pulseaudio - но я просто использовал данное имя, просматривая его с pacmd list-sinks
,
Это не элегантное решение, я, вероятно, попытаюсь использовать общесистемную конфигурацию, как предложено @Anthony в моей следующей установке, но если у вас много карт и вы хотите поделиться одним или несколькими приемниками / источниками, это более "хирургическое" решение.
Мое понимание ситуации: доступ к pulseaudio ограничен активным сеансом, как отмечено в ConsoleKit (что-то о ACL). CK может пометить только один сеанс как активный за один раз.
В ConsoleKit есть патч для добавления поддержки нескольких мест; это позволит ему сообщать обо всех активных местах как активных. Возможно, это решит вашу проблему. Требуется сотрудничество с диспетчером отображения, и есть патч для старых версий GDM, который добавляет эту поддержку.
Я получил многозадачность в Natty (11.04) с использованием модифицированных пакетов ConsoleKit и GDM из PPA. Я еще не обновил Natty - мне потребовалось много времени, чтобы понять, как заставить его работать, и я беспокоюсь, что LightDM не будет работать с пропатченным ConsoleKit.
РЕДАКТИРОВАТЬ: я должен отметить, что Fedora 17 имеет некоторые впечатляющие функции многоуровневых, некоторые из которых будут в Quantal. У них есть вики-страница, описывающая их подход. Ubuntu не может просто скопировать подход Fedora, потому что это потребует значительных изменений; Fedora использует systemd и GDM, а Ubuntu использует upstart и LightDM.