Как настроить звук с помощью PulseAudio и Multiseat?

12

В духе полного раскрытия, я только что разместил этот вопрос на форумах Ubuntu, но я думаю, что больше людей, работающих над этим, не повредит.

У меня есть установка на несколько мест, работающая довольно хорошо. Горячее подключение устройств ввода работает как положено и так далее. Единственная проблема, которую я до сих пор не могу решить, это получить аудио для каждого места.

Вот краткое изложение моих попыток заставить аудио работать:

  1. Сделайте ~ / .pulse / default.pa динамически настроенным в зависимости от того, в каком $ DISPLAY пользователь входит в систему.

    • Смотрите этот pastebin для деталей.
  2. Загрузите pulseaudio как общесистемный экземпляр.

    • Не могу заставить это работать. Ни одно из аудиооборудования не было доступно пользователям.
  3. Используйте правила udev, чтобы отмечать места в ConsoleKit. Следующие рекомендации udev можно найти здесь: http://www.freedesktop.org/wiki/Software/systemd/multiseat

    • Я не думал, что это сработает, хотя кто-то "гарантированно" сработал в irc.freenode #pulseaudio

Ни одна из этих попыток не принесла успеха, поэтому сейчас я обращаюсь к сообществу за помощью. Вполне возможно, что предложенные методы работают, и я только что испортил некоторые аспекты, idk. Это последняя часть головоломки, которая необходима, прежде чем я смогу перейти и обновить страницу MultiseatX, чтобы включить инструкции для Ubuntu 12.04.

Мое понимание ситуации: доступ к pulseaudio ограничен активным сеансом, как отмечено в ConsoleKit (что-то о ACL). CK может пометить только один сеанс как активный за один раз. Этот простой маленький факт жизни заставляет меня поверить, что решение должно включать в себя PulseAdio, работающий как общесистемный экземпляр. Каждый пользователь должен подключаться к импульсному серверу и быть ограниченным подмножеством всего оборудования. Возможно, каждый пользователь подключается к импульсному серверу через localhost, idk. Я знаю, что независимо от моих попыток и их неудачных результатов, я всегда мог использовать sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wavчто-нибудь для воспроизведения на любом оборудовании.

Я хватаюсь за соломинку и теперь до последних волосков, которые я могу вырвать из головы. Пожалуйста, помогите мне понять это, чтобы мы могли поделиться богатством. Любая дополнительная необходимая информация будет предоставлена ​​по вашему запросу.

Энтони
источник
Правильно ли я понял: это 2 места, 2 звуковые карты? Вы заменить default.pa с крошечными пользовательскими файлами или же добавить пользовательские строки в противном случае без изменений default.pa?
Таккат
Хотелось бы, чтобы я заметил здесь комментарий ... Так что да, это две звуковые карты. Один из них - встроенный звук, другой - звук из HDMI в графическом процессоре. Крошечные пользовательские файлы находятся в ~ / .pulse, но /etc/pulse/default.pa остается нетронутым. Так что в этом случае, насколько я понимаю, ~ / .pulse / default.pa не заменит /etc/pulse/default.pa, а скорее слится с ним.
Энтони
Попробуйте использовать два пользовательских файла .pa с полным содержимым файла default.pa, в котором добавлен раздел о разных устройствах, как в двух существующих файлах (если они не объединены).
Таккат
Кроме того, файл default.pa, считываемый при запуске pulseaudio в общесистемном режиме, должен находиться /etc/pulseне в HOME, а в.
Таккат
у меня это в основном работает атм. Я доложу, когда все улажу.
Энтони

Ответы:

7

Я провел много часов, исследуя онлайн, тестируя различные установки и общаясь с разработчиками 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

3.) /etc/pulse/client.conf

    autospawn = no

Нам также нужно добавить пользователей в группу импульсного доступа.

sudo usermod -a -G pulse-access <username>

Теперь, когда все пользователи имеют доступ к аудиооборудованию, нам нужно выбрать оборудование, которое будет использовать каждый пользователь. Это можно сделать с помощью pavucontrol. Пожалуйста, имейте в виду, что настройки хранятся на пользователя и не будут следовать за местом. Если пользователи поменялись местами, вам нужно будет повторно выбрать нужное аудиооборудование.

Дополнительные комментарии на Pulseaudio

Я надеялся, что будет более элегантное решение для получения звука на место. Использование общесистемного Pulseaudio в мультисайтах имеет много недостатков и не является полностью стабильным между перезагрузками. Я попытался запустить общесистемный экземпляр, чтобы пользовательские экземпляры подключались к нему как к серверу через локальный хост. Это, похоже, не работает, так как при запуске pulseaudio --start он создает источник daemon.conf.

Что касается ConsolKit

Проблема, которую мы видим при запуске обычного импульса для пользователя, заключается в том, что одно рабочее место имеет доступ к оборудованию, а все остальные имеют фиктивный выход. Это связано с тем, что ConsoleKit не полностью осведомлен о месте. CK считает все наши места сеансами места 1 и может отметить только одну сессию как активную. Этот факт можно увидеть, запустив getfacl / dev / snd / *. Мне пришла в голову мысль, что мы можем отредактировать acl соответствующих файлов / dev / snd /, основываясь на том, что $ DISPLAY использует конкретный пользователь. Это вариант, который я не исследовал. Пожалуйста, рассмотрите возможность внесения вклада в проблему множественности мест, исследуя эту гипотезу и редактируя документ со своими результатами

Существуют многосетевые ветки для ConsoleKit , GDM-2.3 и GDM-3.x , которые должны обеспечивать автоматическую функциональность нескольких мест.

Дополнительные замечания

1.) Было бы целесообразно также запретить пользователям загружать модули DISALLOW_MODULE_LOADING = 1.

2.) autospawn = no не совсем необходим, как видно из моего файла примера. Это не вызывает никаких проблем.

Энтони
источник
1
Энтони, спасибо за твой пост, это было полезно! Я столкнулся с той же проблемой и узнал, как достичь желаемого результата без запуска Pulseaudio в системном режиме. Посмотрите: unix.stackexchange.com/a/104344/34581 . Надеюсь это будет полезно.
Илья Ростовцев
1

Мое понимание ситуации: доступ к 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.

Ричард Хансен
источник
Лол. Я знал о многосетевых ветках ConsoleKit и GDM. Вы заметите, что я связался с ними на странице Ubuntu MultiseatX, которую я обновляю. На самом деле ветка ck зависит от ветки gdm. Их поддерживает один и тот же человек из Oracle. PPA, на который вы ссылались, также является тем, о чем я знаю, и не для 12.04. Я пытаюсь сделать это так, чтобы не выходить за рамки стандартных репо. Относительно Fedora и systemd ... многоадресный подход systemd НЕ будет работать с двоичным файлом nvidia.
Энтони
0

Недавно я пытался решить проблему с 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 в моей следующей установке, но если у вас много карт и вы просто хотите использовать один или несколько приемников / источников, это более «хирургическое» решение.

MariusSiuram
источник