Як налаштувати звук за допомогою PulseAudio та Multiseat?


12

В дусі повного розкриття інформації я щойно опублікував це питання на форумах ubuntu, але я вважаю, що більше керівників, які працюють над цим, не могли зашкодити.

У мене багатомісна установка працює досить добре. Пристрої введення гарячим підключенням працюють, як очікувалося, і таке. Єдине питання, яке я досі не в змозі вирішити - це отримання звуку для кожного місця.

Ось підсумок моїх спроб примусити звук працювати:

  1. Зробити ~ / .pulse / default.pa динамічно налаштовано на основі $ DISPLAY, коли користувач входить у систему.

    • Докладні відомості дивіться у цій пастині .
  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 може одночасно позначити лише один сеанс активним. Цей простий маленький життєвий факт приводить мене до думки, що рішення повинно включати імпульсний аудіозапуск як екземпляр для всієї системи. Кожен користувач повинен підключитися до імпульсного сервера і обмежитися підмножиною всього обладнання. Можливо, кожен користувач підключається до імпульсного сервера через localhost, idk. Я знаю, що незалежно від моїх спроб та їх невдалих результатів я завжди міг використовувати, sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wavщоб грати щось на будь-яке обладнання.

Я хапаюся за соломинку, і зараз я опускаюся до останніх волосинок, які я можу витягнути з голови. Будь ласка, допоможіть мені зрозуміти це, щоб ми могли поділитися багатством. Будь-яка додаткова інформація буде надана на ваш запит.


Чи правильно я зрозумів: це 2 місця 2 звукових карт? Ви замінили default.pa на крихітні користувацькі файли чи додали власні рядки до інакше незмінних default.pa?
Таккат

Я б хотів, щоб я помітив тут коментар ... Так що так, це 2 звукові карти. Один - це вбудований звук, інший - аудіо з HDMI в gpu. Крихітні користувацькі файли знаходяться в ~ / .pulse, але /etc/pulse/default.pa не торкається. Тож у тому випадку, наскільки я розумію, ~ / .pulse / default.pa не замінить /etc/pulse/default.pa, а злиється з ним.
Ентоні

Спробуйте два файли .pa з повним вмістом default.pa, де додається інший розділ пристрою, як у двох існуючих файлах (якщо вони не об’єднані).
Таккат

Крім того, за замовчуванням.pa, прочитане імпульсним запуском у загальносистемному режимі, повинно бути в /etc/pulse, а не в ДОМАШНІЙ.
Таккат

у мене це в основному працює атм. Я доповім, коли у мене все це випрасується.
Ентоні

Відповіді:


7

Я багато годин займався дослідженнями в Інтернеті, тестуючи різні налаштування та спілкуючись з Pulseaudio devs. Суть у цьому полягає в тому, що запуск pulseaudio у звичайному режимі користувача дозволить лише активному сеансу, який позначений ConsoleKit, отримати доступ до аудіо апаратного забезпечення. Оскільки поточний ConsoleKit здатний одночасно позначати один сеанс як активний, це означає, що ми повинні запустити системний екземпляр pulseaudio. Перевернута сторона: кожне сидіння може мати індивідуальне аудіо. Мінус: ВСЕ аудіо апаратне забезпечення доступне будь-якому користувачеві і ним можна керувати ВСЕ. Це не ідеальна ситуація для інтернет-кафе чи інших громадських закладів, де безпека викликає серйозне занепокоєння. Майте це на увазі, створюючи політику безпеки вашого сайту. Може бути доцільним обмежити виконання павуконтролю лише адміністраторами.

Як завжди, зробіть резервну копію всіх конфігураційних файлів за замовчуванням. Якщо ви попрацювали зі своїми конфігураціями без резервного копіювання, ви можете отримати пакет 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 у мультисеансі має багато недоліків і не є повністю стабільним між перезавантаженнями. Я намагався запустити загальносистемний екземпляр і попросити екземпляри користувачів підключитися до нього як сервер через localhost. Схоже, це не працює, оскільки при запуску 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 не зовсім необхідний, як видно з мого прикладу. Це не викликає проблем.


1
Ентоні, дякую за твій пост, це було корисно! Я зіткнувся з тією ж проблемою і дізнався, як досягти бажаного результату без запуску Pulseaudio в системному режимі. Погляньте: unix.stackexchange.com/a/104344/34581 . Сподіваюся, це стане в нагоді.
Ілля Ростовцев

1

Мої розуміння ситуації: Доступ до pulseaudio обмежений активним сеансом, який позначений ConsoleKit (щось про ACL). CK може одночасно позначити лише один сеанс активним.

Існує патч для ConsoleKit, щоб додати підтримку мультисеансів; це дозволить йому повідомляти про всі активні місця як про активні. Можливо, це виправить вашу проблему. Потрібна співпраця з менеджером дисплеїв, і там є виправлення на старі версії GDM, що додає цю підтримку.

Я працював у мультиседі, працюючи в Natty (11.04), використовуючи модифіковані пакети ConsoleKit та GDM від PPA . Я ще не пройшов модернізацію від Natty - мені знадобилося багато часу, щоб зрозуміти, як змусити її працювати, і я переживаю, що LightDM не працюватиме з виправленим ConsoleKit.

EDIT: Зазначу, що Fedora 17 має кілька вражаючих багатосезонних функцій, деякі з яких будуть у Quantal. У них є вікі-сторінка з описом їх підходу . Ubuntu не може просто скопіювати підхід Fedora, оскільки це потребує значних змін; Fedora використовує systemd та GDM, а Ubuntu використовує upstart та LightDM.


Лол. Я знав про багатосезонні гілки ConsoleKit та GDM. Ви помітите, що я зв’язав їх із сторінкою Ubuntu MultiseatX, що я зараз в процесі оновлення. Власне, відділення ck залежить від гілки gdm. Їх підтримує та сама людина з Oracle. PPA, на який ви посилалися, - це теж те, про що я знав, і не для 12.04. Я намагаюся зробити це таким чином, що не передбачає виходу за межі стандартних репостів. Що стосується Fedora та 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

У налаштуваннях імпульсних аудіо інших користувачів додайте тунель - або кілька, якщо це те, що вам потрібно - з чимось поряд:

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 в наступній моїй установці, але якщо у вас багато карт і просто хочете поділитися одним або кількома раковинами / джерелами, це більш "хірургічне" рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.