Jak skonfigurować dźwięk za pomocą PulseAudio i Multiseat?

12

W duchu pełnego ujawnienia, właśnie opublikowałem to pytanie na forach ubuntu, ale sądzę, że więcej głów nad nimi pracujących nie mogło zaszkodzić.

Mam konfigurację wielomiejscową działającą całkiem dobrze. Urządzenia wejściowe podłączane podczas pracy działają zgodnie z oczekiwaniami i takie. Jedynym problemem, którego wciąż nie jestem w stanie rozwiązać, jest uzyskanie dźwięku dla każdego miejsca.

Oto podsumowanie moich prób uzyskania dźwięku do pracy:

  1. Zrób ~ / .pulse / default.pa dynamicznie skonfigurowany na podstawie którego $ DISPLAY loguje się użytkownik.

    • Szczegółowe informacje można znaleźć w tej wklejce .
  2. Załaduj pulseaudio jako instancję ogólnosystemową.

    • Nie udało się uruchomić tego. Żaden sprzęt audio nie był dostępny dla użytkowników.
  3. Użyj reguł udev do oznaczania miejsc w ConsoleKit. Następujące wytyczne udev można znaleźć tutaj: http://www.freedesktop.org/wiki/Software/systemd/multiseat

    • Nie sądziłem, że to zadziała, chociaż „zagwarantowano”, że zadziała ktoś w irc.freenode #pulseaudio

Żadna z tych prób nie przyniosła sukcesu, dlatego zwracam się teraz do społeczności o pomoc. Jest całkiem możliwe, że sugerowane metody działają, a ja tylko pomieszałem pewien aspekt, idk. To ostatni element układanki, który jest potrzebny, zanim będę mógł przejść i zaktualizować stronę MultiseatX, aby zawierała instrukcje dla Ubuntu 12.04.

Moje rozumienie sytuacji: Dostęp do pulseaudio jest ograniczony do aktywnej sesji oznaczonej przez ConsoleKit (coś o ACL). CK może zaznaczyć tylko jedną sesję jako aktywną na raz. Ten prosty fakt z życia prowadzi mnie do przekonania, że ​​rozwiązaniem powinno być uruchomienie pulseaudio jako instancji ogólnosystemowej. Każdy użytkownik powinien połączyć się z serwerem impulsów i być ograniczony do podzbioru całego sprzętu. Być może każdy użytkownik łączy się z serwerem pulsów za pośrednictwem localhost, idk. Wiem, że niezależnie od moich prób i ich nieudanych rezultatów, zawsze byłem w stanie sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wavgrać na dowolnym sprzęcie.

Chwytam się słomek i jestem teraz przy ostatnich włosach, które mogę wyciągnąć z głowy. Proszę, pomóż mi to rozgryźć, abyśmy mogli dzielić się bogactwem. Wszelkie dodatkowe wymagane informacje zostaną dostarczone na żądanie.

Anthony
źródło
Czy zrozumiałem poprawnie: to 2 miejsca 2 karty dźwiękowe? Czy zastąpiłeś default.pa małymi plikami niestandardowymi, czy dodałeś niestandardowe wiersze do niezmienionego pliku default.pa?
Takkat
Chciałbym zauważyć tutaj komentarz ... Tak, to są 2 karty dźwiękowe. Jeden to dźwięk na płycie, drugi to dźwięk z HDMI w GPU. Małe pliki niestandardowe znajdują się w ~ / .pulse, ale /etc/pulse/default.pa pozostaje nietknięte. W takim przypadku, o ile rozumiem, ~ / .pulse / default.pa nie zastąpi /etc/pulse/default.pa, ale raczej się z nim połączy.
Anthony
Wypróbuj dwa niestandardowe pliki .pa z pełną zawartością pliku default.pa, do którego dodawana jest inna sekcja urządzenia jak w dwóch istniejących plikach (na wypadek, gdyby nie zostały scalone).
Takkat
Ponadto plik default.pa odczytany przez pulseaudio działający w trybie systemowym powinien być włączony /etc/pulse, a nie HOME.
Takkat
mam to głównie działający bankomat. Zamelduję się, kiedy wszystko będzie gotowe.
Anthony

Odpowiedzi:

7

Spędziłem wiele godzin szukając w Internecie, testując różne konfiguracje i rozmawiając z twórcami Pulseaudio. Najważniejsze jest to, że uruchomienie pulseaudio w normalnym trybie użytkownika pozwoli tylko aktywnej sesji oznaczonej przez ConsoleKit na dostęp do sprzętu audio. Ponieważ bieżący ConsoleKit jest w stanie oznaczyć tylko jedną sesję jako aktywną na raz, oznacza to, że musimy uruchomić ogólnosystemową instancję pulseaudio. Zaleta: każde miejsce może mieć indywidualny dźwięk. Wadą: CAŁY sprzęt audio jest dostępny dla każdego użytkownika i można nim manipulować AT WILL. To nie jest idealna sytuacja dla kafejki internetowej lub innych miejsc publicznych, w których bezpieczeństwo stanowi poważny problem. Pamiętaj o tym podczas tworzenia zasad bezpieczeństwa witryny. Rozsądne może być ograniczenie wykonywania pavucontrol tylko do administratorów.

Jak zawsze wykonaj kopię zapasową wszystkich domyślnych plików konfiguracyjnych. Jeśli majstrowałeś przy swoich konfiguracjach bez tworzenia kopii zapasowej, możesz pobrać pakiet pulseaudio za pomocą apt-get -d install pulseaudio. Spowoduje to pobranie tylko pakietu (do / var / cache / archives / apt) i możesz wyodrębnić zawartość, aby pobrać domyślne konfiguracje. Pamiętaj, że klient.conf nie jest tam uwzględniony.

Aby uruchomić pulseaudio jako demona ogólnosystemowego, musimy edytować kilka plików.

1.) / etc / default / pulseaudio

    PULSEAUDIO_SYSTEM_START=1

2.) /etc/pulse/daemon.conf - Aby uzyskać więcej informacji, zobacz man puls-daemon.conf.

    daemonize = yes
    local-server-type = system

3.) /etc/pulse/client.conf

    autospawn = no

Musimy również dodać użytkowników do grupy z pulsem dostępu.

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

Teraz, gdy wszyscy użytkownicy mają dostęp do sprzętu audio, musimy wybrać sprzęt, z którego będzie korzystać każdy użytkownik. Można to zrobić za pomocą pavucontrol. Należy pamiętać, że ustawienia są przechowywane NA UŻYTKOWNIKA i nie będą podążać za siedzeniem. Jeśli użytkownicy zamieniają miejsca, musisz ponownie wybrać żądany sprzęt audio.

Dodatkowe komentarze na temat Pulseaudio

Miałem nadzieję, że będzie bardziej eleganckie rozwiązanie dla uzyskania dźwięku na stanowisko. Korzystanie z ogólnosystemowego systemu Pulseaudio w trybie wielostanowiskowym ma wiele wad i nie jest całkowicie stabilne między restartami. Próbowałem uruchomić instancję ogólnosystemową i kazać instancjom użytkownika połączyć się z nią jako serwer za pośrednictwem hosta lokalnego. Nie wydaje się to działać, ponieważ po uruchomieniu pulseaudio --start źródła daemon.conf.

Odnośnie ConsolKit

Problem, który widzimy podczas uruchamiania normalnego pulseaudio dla jednego użytkownika, polega na tym, że jedno miejsce ma dostęp do sprzętu, a wszystkie pozostałe mają wyjście atrapy. Wynika to z faktu, że ConsoleKit nie jest w pełni świadomy miejsca. CK uważa wszystkie nasze miejsca za sesje siedzenia 1 i może oznaczyć tylko jedną sesję jako aktywną. Fakt ten można zobaczyć, uruchamiając getfacl / dev / snd / *. Przyszło mi do głowy, że możemy edytować acl odpowiednich plików / dev / snd / na podstawie których $ DISPLAY używa dany użytkownik. Jest to opcja, której nie zbadałem. Proszę rozważyć przyczynienie się do przyczyny wielopłaszczyznowej, badając tę ​​hipotezę i edytując dokument ze swoimi ustaleniami.

Istnieją gałęzie wielostanowiskowe dla ConsoleKit , GDM-2.3 i GDM-3.x , które powinny zapewniać automatyczną funkcjonalność wielostanowiskową.

Dodatkowe uwagi

1.) Mądrze byłoby również uniemożliwić użytkownikom ładowanie modułów DISALLOW_MODULE_LOADING = 1.

2.) autospawn = no nie jest całkowicie konieczne, jak widać w moim przykładowym pliku. Nie powoduje problemów.

Anthony
źródło
1
Anthony, dziękuję za twój post, który był pomocny! Napotkałem ten sam problem i dowiedziałem się, jak osiągnąć pożądany rezultat bez uruchamiania Pulseaudio w trybie systemowym. Spójrz: unix.stackexchange.com/a/104344/34581 . Mam nadzieję, że się przyda.
Ilia Rostovtsev,
1

Moje rozumienie sytuacji: Dostęp do pulseaudio jest ograniczony do aktywnej sesji oznaczonej przez ConsoleKit (coś o ACL). CK może zaznaczyć tylko jedną sesję jako aktywną na raz.

W ConsoleKit dostępna jest łatka dodająca obsługę wielu stron; pozwoli to zgłosić wszystkie aktywne stanowiska jako aktywne. Być może to rozwiąże problem. Wymaga współpracy z menedżerem wyświetlania, a do starszych wersji GDM dostępna jest łatka, która dodaje tę obsługę.

Mam wielostanowiskową pracę w Natty (11.04) przy użyciu zmodyfikowanych pakietów ConsoleKit i GDM z PPA . Nie zaktualizowałem jeszcze wersji Natty - zajęło mi dużo czasu, aby wymyślić, jak to zrobić, i martwię się, że LightDM nie będzie działać z poprawionym ConsoleKit.

EDYCJA: Powinienem zauważyć, że Fedora 17 ma imponujące funkcje wielostanowiskowe, z których niektóre będą w wersji Quantal. Mają stronę wiki opisującą ich podejście . Ubuntu nie może po prostu skopiować podejścia Fedory, ponieważ wymagałoby to znacznych zmian; Fedora używa systemd i GDM, podczas gdy Ubuntu używa upstart i LightDM.

Richard Hansen
źródło
Lol. Wiem o wielostanowiskowych gałęziach ConsoleKit i GDM. Zauważysz, że podłączyłem do nich na stronie Ubuntu MultiseatX , którą właśnie aktualizuję. W rzeczywistości gałąź ck zależy od gałęzi gdm. Obsługuje je ta sama osoba z Oracle. PPA, o którym wspominałeś, jest również czymś, o czym wiem i nie dotyczy 12.04. Próbuję to zrobić w sposób, który nie wymaga wychodzenia poza standardowe repo. Jeśli chodzi o Fedorę i systemd ... systemowe podejście wielostanowiskowe NIE będzie działać z plikiem binarnym nvidia.
Anthony
0

Niedawno próbowałem rozwiązać problem z PulseAudio i Multiseat. Widząc, że nie było eleganckiego rozwiązania, moim obejściem było użycie sieci.

To rozwiązanie pasuje do mojego scenariusza, ponieważ jestem użytkownikiem, który najczęściej jest w maszynie, a moje siedzenie jest najczęściej zalogowane. A moje siedzenie jest skonfigurowane dla osób leworęcznych i nikt inny z niego nie korzysta.

W moim ~/.config/pulse/default.paskopiowałem konfigurację systemu /etc/pulse/default.pai dodałem następujący wiersz:

load-module module-native-protocol-tcp auth-anonymous=1 auth-ip-acl=127.0.0.1

W ustawieniach pulseaudio innych użytkowników dodaj tunel - lub kilka, jeśli tego potrzebujesz - wraz z czymś:

load-module module-tunnel-sink server=127.0.0.1 sink=alsa_output.pci-0000_00_XX.X.iec958-stereo

Zmień nazwę zlewu, aby pasowała do nazwy w urządzeniu. Możesz zdecydować o skonfigurowaniu bardziej przyjaznej nazwy - co oznacza, że ​​powinieneś ją skonfigurować w pliku ustawień pulseaudio - ale właśnie użyłem tej nazwy, szukając jej pacmd list-sinks.

To nie jest eleganckie rozwiązanie, prawdopodobnie spróbuję użyć konfiguracji ogólnosystemowej, jak sugeruje @Anthony w moim następnym zestawie, ale jeśli masz dużo kart i chcesz po prostu udostępnić jedno lub kilka zlewów / źródeł, jest to więcej „chirurgicznego” rozwiązania.

MariusSiuram
źródło