Wie konfiguriere ich Sound mit PulseAudio und Multiseat?


12

Im Geiste der vollständigen Offenlegung habe ich diese Frage gerade in den Ubuntu-Foren gepostet , aber ich glaube, mehr Köpfe, die daran arbeiten, können nicht schaden.

Ich habe ein Multi-Seat-Setup, das recht gut funktioniert. Das Hot-Plugging von Eingabegeräten funktioniert wie erwartet und so weiter. Das einzige Problem, das ich immer noch nicht lösen kann, ist das Abrufen der Audiodaten für jeden Sitzplatz.

Hier ist eine Zusammenfassung meiner Versuche, Audio zum Laufen zu bringen:

  1. Stellen Sie ~ / .pulse / default.pa dynamisch ein, basierend auf dem $ DISPLAY, unter dem sich der Benutzer anmeldet.

    • Einzelheiten finden Sie in diesem Pastebin .
  2. Laden Sie pulseaudio als systemweite Instanz.

    • Konnte das nicht zum Laufen bringen. Keine der Audio-Hardware war für die Benutzer zugänglich.
  3. Verwenden Sie udev-Regeln, um Plätze in ConsoleKit zu markieren. Die folgenden udev-Richtlinien finden Sie hier: http://www.freedesktop.org/wiki/Software/systemd/multiseat

    • Ich dachte nicht, dass dies funktionieren würde, obwohl es "garantiert" von jemandem in irc.freenode #pulseaudio funktioniert

Keiner dieser Versuche war erfolgreich. Deshalb wende ich mich jetzt an die Community, um Hilfe zu erhalten. Es ist durchaus möglich, dass die vorgeschlagenen Methoden funktionieren, und ich habe nur einen Teil davon durcheinander gebracht, Idk. Dies ist der letzte Teil des Puzzles, der benötigt wird, bevor ich die MultiseatX-Seite mit Anweisungen für Ubuntu 12.04 aktualisieren kann.

Mein Verständnis zur Situation: Der Zugriff auf pulseaudio ist auf die aktive Sitzung beschränkt, die durch ConsoleKit gekennzeichnet ist (etwas über eine ACL). CK kann jeweils nur eine Sitzung als aktiv markieren. Diese einfache kleine Tatsache lässt mich glauben, dass die Lösung darin bestehen sollte, dass pulseaudio als systemweite Instanz ausgeführt wird. Jeder Benutzer sollte eine Verbindung zum Pulsserver herstellen und sich auf eine Teilmenge der gesamten Hardware beschränken. Möglicherweise verbindet sich jeder Benutzer über localhost, idk mit dem Pulsserver. Ich weiß, dass ich unabhängig von meinen Versuchen und den fehlgeschlagenen Ergebnissen immer sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wavetwas auf der Hardware abspielen konnte .

Ich greife nach Strohhalmen und bin jetzt bis zu den letzten Haaren, die ich mir aus dem Kopf ziehen kann. Bitte helfen Sie mir, das herauszufinden, damit wir den Reichtum teilen können. Alle zusätzlichen Informationen werden auf Ihre Anfrage bereitgestellt.


Habe ich richtig verstanden: Es sind 2 Plätze 2 Soundkarten? Haben Sie ersetzen default.pa mit den winzigen benutzerdefinierten Dateien oder Sie fügen die benutzerdefinierten Linien an den ansonsten unveränderten default.pa?
Takkat

Ich wünschte, ich hätte den Kommentar hier bemerkt ... Also ja, es sind 2 Soundkarten. Eines ist das Onboard-Audio, das andere ist das Audio vom HDMI im GPU. Die kleinen benutzerdefinierten Dateien befinden sich in ~ / .pulse, aber /etc/pulse/default.pa bleibt unberührt. In diesem Fall wird die Datei ~ / .pulse / default.pa meines Wissens nicht die Datei /etc/pulse/default.pa ersetzen, sondern mit ihr zusammengeführt.
Anthony

Versuchen Sie es mit zwei benutzerdefinierten .pa-Dateien mit dem vollständigen Inhalt der Datei default.pa, wobei der andere Gerätebereich als in den beiden vorhandenen Dateien hinzugefügt wird (falls sie nicht zusammengeführt werden).
Takkat

Außerdem sollte die von pulseaudio im systemweiten Modus gelesene Datei default.pa in /etc/pulseund nicht in HOME sein.
Takkat

Ich habe es meistens arbeiten atm. Ich melde mich wieder, wenn ich alles ausgebügelt habe.
Anthony

Antworten:


7

Ich habe viele Stunden online recherchiert, verschiedene Setups getestet und mit Pulseaudio-Entwicklern gesprochen. Das Fazit ist, dass beim Ausführen von pulseaudio im normalen Benutzermodus nur die von ConsoleKit markierte aktive Sitzung auf die Audio-Hardware zugreifen kann. Da das aktuelle ConsoleKit immer nur eine Sitzung als aktiv markieren kann, müssen wir eine systemweite Instanz von pulseaudio ausführen. Der Vorteil: Jeder Sitzplatz kann individuell ausgestattet werden. Der Nachteil: ALLE Audio-Hardware steht jedem Benutzer zur Verfügung und kann nach Belieben manipuliert werden. Dies ist keine ideale Situation für ein Internetcafé oder eine andere öffentliche Umgebung, in der Sicherheit ein echtes Problem darstellt. Beachten Sie dies, wenn Sie Ihre Site-Sicherheitsrichtlinie erstellen. Es kann ratsam sein, die Ausführung von Pavucontrol nur auf Administratoren zu beschränken.

Erstellen Sie wie immer eine Sicherungskopie aller Ihrer Standardkonfigurationsdateien. Wenn Sie mit Ihren Konfigurationen gearbeitet haben, ohne eine Sicherungskopie zu erstellen, können Sie das pulseaudio-Paket mit apt-get -d install pulseaudio abrufen. Dadurch wird nur das Paket (nach / var / cache / archives / apt) heruntergeladen, und Sie können den Inhalt extrahieren, um die Standardkonfigurationen abzurufen. Beachten Sie, dass client.conf dort nicht enthalten ist.

Um pulseaudio als systemweiten Daemon auszuführen, müssen einige Dateien bearbeitet werden.

1.) / etc / default / pulseaudio

    PULSEAUDIO_SYSTEM_START=1

2.) /etc/pulse/daemon.conf - Weitere Informationen finden Sie unter man pulse-daemon.conf.

    daemonize = yes
    local-server-type = system

3.) /etc/pulse/client.conf

    autospawn = no

Wir müssen auch Benutzer zur Pulszugriffsgruppe hinzufügen.

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

Nachdem alle Benutzer auf die Audio-Hardware zugreifen können, müssen wir die Hardware auswählen, die jeder Benutzer verwenden soll. Dies kann mit pavucontrol erfolgen. Bitte beachten Sie, dass die Einstellungen PRO BENUTZER gespeichert werden und nicht dem Sitzplatz folgen. Wenn Benutzer die Plätze wechseln, müssen Sie die gewünschte Audio-Hardware erneut auswählen.

Zusätzliche Kommentare zu Pulseaudio

Ich hatte gehofft, dass es eine elegantere Lösung geben würde, um die Audiowiedergabe pro Sitz zu optimieren. Die Verwendung eines systemweiten Pulseaudio in Multiseat hat viele Nachteile und ist zwischen Neustarts nicht ganz stabil. Ich hatte versucht, eine systemweite Instanz zu starten und Benutzerinstanzen über localhost als Server mit ihr zu verbinden. Das scheint nicht zu funktionieren, da beim Ausführen von pulseaudio --start die daemon.conf-Quelle verwendet wird.

In Bezug auf ConsolKit

Das Problem, das wir sehen, wenn ein normales Pro-Benutzer-Pulseaudio ausgeführt wird, ist, dass ein Sitz Zugriff auf die Hardware hat und alle anderen über eine Dummy-Ausgabe verfügen. Dies liegt daran, dass ConsoleKit den Sitz nicht vollständig erkennt. CK betrachtet alle unsere Plätze als Sitzungen von Platz 1 und kann nur eine Sitzung als aktiv markieren. Diese Tatsache kann durch Ausführen von getfacl / dev / snd / * festgestellt werden. Mir kam der Gedanke, dass wir möglicherweise die ACL der entsprechenden / dev / snd / -Dateien bearbeiten können, basierend darauf, welches $ DISPLAY ein bestimmter Benutzer verwendet. Dies ist eine Option, die ich nicht untersucht habe. Bitte erwägen Sie, einen Beitrag zur Multiseat-Ursache zu leisten, indem Sie diese Hypothese untersuchen und das Dokument mit Ihren Ergebnissen bearbeiten.

Es gibt Multiseat-Zweige für ConsoleKit , GDM-2.3 und GDM-3.x , die eine automatische Multiseat-Funktionalität bieten sollen.

Zusätzliche Bemerkungen

1.) Es ist ratsam, Benutzern auch das Laden von Modulen zu verbieten. DISALLOW_MODULE_LOADING = 1.

2.) autospawn = no ist nicht unbedingt notwendig, wie in meiner Beispieldatei zu sehen. Es verursacht keine Probleme.


1
Anthony, danke für deinen Beitrag, es war hilfreich! Ich hatte das gleiche Problem und fand heraus, wie ich das gewünschte Ergebnis erzielen kann, ohne Pulseaudio im Systemmodus auszuführen. Schauen Sie sich das an: unix.stackexchange.com/a/104344/34581 . Ich hoffe es wird nützlich sein.
Ilia Rostovtsev

1

Mein Verständnis zur Situation: Der Zugriff auf pulseaudio ist auf die aktive Sitzung beschränkt, die durch ConsoleKit gekennzeichnet ist (etwas über eine ACL). CK kann jeweils nur eine Sitzung als aktiv markieren.

ConsoleKit enthält einen Patch, mit dem Multiseat-Unterstützung hinzugefügt werden kann. Auf diese Weise können alle aktiven Sitze als aktiv gemeldet werden. Vielleicht behebt dies Ihr Problem. Es muss mit dem Display Manager zusammengearbeitet werden, und es gibt einen Patch für alte Versionen von GDM , der diese Unterstützung hinzufügt.

Ich habe Multiseat in Natty (11.04) mit modifizierten ConsoleKit- und GDM-Paketen von einem PPA zum Laufen gebracht . Ich habe noch kein Upgrade von Natty durchgeführt - es dauerte lange, bis ich herausgefunden hatte, wie es funktioniert, und ich befürchte, dass LightDM mit dem gepatchten ConsoleKit nicht funktioniert.

EDIT: Ich sollte beachten, dass Fedora 17 einige beeindruckende Multiseat-Funktionen hat, von denen einige in Quantal sein werden. Sie haben eine Wiki-Seite, die ihre Vorgehensweise beschreibt . Ubuntu kann Fedoras Ansatz nicht einfach kopieren, da dies erhebliche Änderungen erforderlich machen würde. Fedora verwendet systemd und GDM, während Ubuntu upstart und LightDM verwendet.


Lol. Ich kenne die Multiseat ConsoleKit- und GDM-Zweige. Sie werden feststellen, dass ich auf der Ubuntu MultiseatX- Seite, die gerade aktualisiert wird, einen Link zu ihnen erstellt habe. Tatsächlich hängt der ck-Zweig vom gdm-Zweig ab. Sie werden von derselben Person von Oracle verwaltet. Das PPA, auf das Sie verwiesen haben, ist mir ebenfalls bekannt und nicht für den 12.04. Ich versuche es auf eine Art und Weise zu tun, bei der man nicht über die Standard-Repos hinausgeht. In Bezug auf Fedora und systemd ... funktioniert der systemd-Multiseat-Ansatz NICHT mit der NVIDIA-Binärdatei.
Anthony

0

Ich habe kürzlich versucht, das Problem mit PulseAudio und Multiseat zu lösen. Da es keine elegante Lösung gab, bestand meine Problemumgehung darin, das Netzwerk zu verwenden.

Diese Lösung passt zu meinem Szenario, da ich der Benutzer bin, der sich am häufigsten in der Maschine aufhält, und mein Sitz am häufigsten angemeldet ist. Mein Sitz ist für Linkshänder konfiguriert und wird von niemand anderem verwendet.

In my habe ~/.config/pulse/default.paich die Systemkonfiguration von kopiert /etc/pulse/default.paund folgende Zeile hinzugefügt:

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

Fügen Sie in den pulseaudio-Einstellungen anderer Benutzer einen Tunnel hinzu - oder mehrere, falls erforderlich - und fügen Sie Folgendes hinzu:

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

Ändern Sie den Namen der Spüle so, dass er mit dem Namen in Ihrem Computer übereinstimmt. Sie können sich dafür entscheiden, einen freundlicheren Namen zu konfigurieren - was bedeutet, dass Sie diesen in Ihrer pulseaudio-Einstellungsdatei konfigurieren sollten -, aber ich habe nur den angegebenen Namen verwendet, indem ich ihn mit angesehen habe pacmd list-sinks.

Es ist keine elegante Lösung, ich werde wahrscheinlich versuchen, eine systemweite Konfiguration wie von @Anthony vorgeschlagen in meinem nächsten Rig zu verwenden, aber wenn Sie viele Karten haben und nur eine oder wenige Senken / Quellen teilen möchten, ist dies eine mehr "chirurgische" Lösung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.