web-dev-qa-db-fra.com

Comment configurer le son avec PulseAudio et Multiseat?

Dans l’esprit de la divulgation complète, je viens de poster cette question sur les forums Ubuntu, mais je pense que plus de personnes travaillant dessus ne pourraient pas faire de mal.

J'ai une configuration multi-sièges qui fonctionne assez bien. Le branchement à chaud des périphériques d’entrée fonctionne comme prévu. Le seul problème que je ne suis toujours pas en mesure de résoudre est celui de l’audio pour chaque siège.

Voici un résumé de mes tentatives pour que l'audio fonctionne:

  1. Configurez ~/.Pulse/default.pa de manière dynamique en fonction de la variable $ DISPLAY à laquelle l'utilisateur se connecte.

  2. Chargez pulseaudio en tant qu'instance système.

    • Impossible d'obtenir que cela fonctionne. Aucun du matériel audio n'était accessible aux utilisateurs.
  3. Utilisez les règles udev pour marquer les sièges dans ConsoleKit. Suivre les directives udev trouvées ici: http://www.freedesktop.org/wiki/Software/systemd/multiseat

    • Je ne pensais pas que cela fonctionnerait, même s'il était "garanti" de travailler avec quelqu'un dans irc.freenode #pulseaudio

Aucune de ces tentatives n'a donné de succès, c'est pourquoi je m'adresse maintenant à la communauté pour obtenir de l'aide. Il est tout à fait possible que les méthodes suggérées fonctionnent et que je venais d'en bousiller un aspect, idk. Ceci est la dernière pièce du puzzle qui est nécessaire avant que je puisse aller et mettre à jour la page MultiseatX pour inclure des instructions pour Ubuntu 12.04.

Ma compréhension de la situation: L’accès à pulseaudio est limité à la session active indiquée par ConsoleKit (quelque chose au sujet d’une ACL). CK ne peut marquer qu’une session comme active à la fois. Ce simple petit fait de la vie me porte à penser que la solution devrait impliquer que pulseaudio soit exécuté comme une instance à l’échelle du système. Chaque utilisateur doit se connecter au serveur Pulse et se limiter à un sous-ensemble de tout le matériel. Peut-être que chaque utilisateur se connecte au serveur Pulse via localhost, idk. Je sais que, quels que soient mes tentatives et les résultats qui ont échoué, j'ai toujours été en mesure d'utiliser Sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wav pour lire quelque chose sur n'importe quel matériel.

J'attrape la paille et je suis maintenant tombé sur les derniers cheveux que je peux retirer de ma tête. S'il vous plaît, aidez-moi à comprendre cela afin que nous puissions partager la richesse. Toute information supplémentaire nécessaire sera fournie à votre demande.

12
Anthony

J'ai passé de nombreuses heures à rechercher en ligne, à tester diverses configurations et à parler aux développeurs de Pulseaudio. L’essentiel est que le fait d’exécuter pulseaudio en mode utilisateur normal n’autorisera que la session active, indiquée par ConsoleKit, à accéder au matériel audio. Étant donné que ConsoleKit actuel ne peut marquer qu'une session comme active à la fois, cela signifie que nous devons exécuter une instance de pulseaudio à l'échelle du système. L'avantage: chaque siège peut avoir un son individuel. L'inconvénient: tout le matériel audio est disponible pour tout utilisateur et peut être manipulé AT WILL. Ce n'est pas une situation idéale pour un café Internet ou tout autre lieu public où la sécurité est une préoccupation réelle. Gardez cela à l'esprit lors de la création de la politique de sécurité de votre site. Il serait peut-être prudent de limiter l'exécution de pavucontrol aux seuls administrateurs.

Comme toujours, faites une sauvegarde de tous vos fichiers de configuration par défaut. Si vous avez bricolé vos configurations sans sauvegarder, vous pouvez récupérer le paquet pulseaudio avec apt-get -d install pulseaudio. Cela téléchargera le paquet (dans/var/cache/archives/apt) uniquement et vous pourrez extraire le contenu pour récupérer les configurations par défaut. Sachez que client.conf n’est pas inclus ici.

Pour exécuter pulseaudio en tant que démon à l’échelle du système, nous devons éditer quelques fichiers.

1.) / etc/default/pulseaudio

    PULSEAUDIO_SYSTEM_START=1

2.) / etc/Pulse/daemon.conf - Voir man Pulse-daemon.conf pour plus d'informations.

    daemonize = yes
    local-server-type = system

3.) / etc/Pulse/client.conf

    autospawn = no

Nous devons également ajouter des utilisateurs au groupe d'accès par impulsion.

Sudo usermod -a -G Pulse-access <username>

Maintenant que tous les utilisateurs peuvent accéder au matériel audio, nous devons sélectionner le matériel que chaque utilisateur utilisera. Cela peut être fait en utilisant pavucontrol. Veuillez noter que les paramètres sont stockés PAR UTILISATEUR et ne suivront pas le siège. Si les utilisateurs changent de siège, vous devrez sélectionner à nouveau le matériel audio souhaité.

Commentaires supplémentaires sur Pulseaudio

J'avais espéré qu'il y aurait une solution plus élégante pour faire fonctionner l'audio par siège. L'utilisation d'un système Pulseaudio multiseat dans l'ensemble du système présente de nombreux inconvénients et n'est pas entièrement stable entre les redémarrages. J'avais tenté de démarrer une instance système et de faire en sorte que des instances utilisateur s'y connectent en tant que serveur via localhost. Cela ne semble pas fonctionner depuis que pulseaudio --start est lancé il sources daemon.conf.

concernant ConsolKit

Le problème que nous voyons lors de l’exécution d’un pulseaudio normal par utilisateur est qu’un siège a accès au matériel et que tous les autres ont une sortie factice. Cela est dû au fait que ConsoleKit n’est pas entièrement au courant. CK considère toutes nos places comme des sessions de seat1 et ne peut marquer qu'une session comme active. Ce fait peut être vu en exécutant getfacl/dev/snd/*. Je me suis dit que nous pourrions peut-être modifier les fichiers/dev/snd/appropriés en fonction de la variable $ DISPLAY utilisée par un utilisateur donné. C'est une option que je n'ai pas explorée. Pensez à contribuer à la cause des tâches multiples en explorant cette hypothèse et en modifiant le document avec vos conclusions.

Il existe des branches multiseat pour ConsoleKit , GDM-2. et GDM-3.x , qui devraient fournir une fonctionnalité multiseat automatique.

Notes complémentaires

1.) Il serait également sage d’interdire aux utilisateurs de charger les modules DISALLOW_MODULE_LOADING = 1.

2.) autospawn = no n'est pas entièrement nécessaire, comme indiqué dans mon fichier d'exemple. Cela ne cause aucun problème.

7
Anthony

Ma compréhension de la situation: L’accès à pulseaudio est limité à la session active indiquée par ConsoleKit (quelque chose au sujet d’une ACL). CK ne peut marquer qu’une session comme active à la fois.

Il existe un correctif pour ConsoleKit pour ajouter un support multiseat; cela lui permettra de signaler que tous les sièges actifs sont actifs. Cela réglera peut-être votre problème. Cela nécessite une coopération avec le gestionnaire d’affichage, et il existe un correctif pour les anciennes versions de GDM qui ajoute ce support.

Plusieurs fois, je travaillais dans Natty (11.04) en utilisant les packages ConsoleKit et GDM modifiés à partir de PPA . Je n'ai pas encore mis à niveau Natty - il m'a fallu beaucoup de temps pour comprendre comment le faire fonctionner et je crains que LightDM ne fonctionne pas avec le kit de mise à jour correctif ConsoleKit.

EDIT: Je dois noter que Fedora 17 possède d’impressionnantes fonctionnalités multiseat, dont certaines en Quantal. Ils ont un page wiki décrivant leur approche . Ubuntu ne peut pas simplement copier l'approche de Fedora car cela nécessiterait des changements significatifs. Fedora utilise systemd et GDM, tandis qu'Ubuntu utilise upstart et LightDM.

1
Richard Hansen