¿Cómo configuro el sonido con PulseAudio y Multiseat?


12

En el espíritu de la divulgación completa, acabo de publicar esta pregunta en los foros de ubuntu, pero creo que más cabezas trabajando en eso no podrían doler.

Tengo una configuración de varios asientos que funciona bastante bien. Los dispositivos de entrada de conexión en caliente funcionan como se espera y tal. El único problema que aún no puedo resolver es obtener el audio para cada asiento.

Aquí hay un resumen de mis intentos de hacer que el audio funcione:

  1. Haga ~ / .pulse / default.pa configurado dinámicamente en función de $ DISPLAY en el que el usuario inicia sesión.

  2. Cargue pulseaudio como una instancia de todo el sistema.

    • No se pudo lograr que esto funcione. Ninguno de los equipos de audio era accesible para los usuarios.
  3. Use las reglas de udev para marcar asientos en ConsoleKit. Siguiendo las pautas de udev que se encuentran aquí: http://www.freedesktop.org/wiki/Software/systemd/multiseat

    • No pensé que esto funcionaría, aunque estaba "garantizado" para trabajar en irc.freenode #pulseaudio

Ninguno de esos intentos tuvo éxito, por eso ahora recurro a la comunidad en busca de ayuda. Es muy posible que los métodos sugeridos funcionen y simplemente estropeé algún aspecto, idk. Esta es la última pieza del rompecabezas que se necesita antes de que pueda ir y actualizar la página MultiseatX para incluir instrucciones para Ubuntu 12.04.

Comprendo la situación: el acceso a pulseaudio está restringido a la sesión activa marcada por ConsoleKit (algo sobre una ACL). CK solo puede marcar una sesión como activa a la vez. Este simple hecho de la vida me lleva a creer que la solución debería implicar que pulseaudio se ejecute como una instancia de todo el sistema. Cada usuario debe conectarse al servidor de impulsos y limitarse a un subconjunto de todo el hardware. Tal vez cada usuario se conecta al servidor de impulsos a través de localhost, idk. Sé que, independientemente de mis intentos y sus resultados fallidos, siempre pude usar sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wavpara reproducir algo en cualquier hardware.

Me aferro a las pajitas y ahora estoy en los últimos pelos que puedo sacar de mi cabeza. Por favor, ayúdame a resolver esto para que podamos compartir la riqueza. Cualquier información adicional necesaria se proporcionará a su solicitud.


¿Entendí correctamente: son 2 asientos 2 tarjetas de sonido? ¿ Reemplazas default.pa con los pequeños archivos personalizados o agregaste las líneas personalizadas a default.pa?
Takkat

Desearía haber notado el comentario aquí ... Entonces sí, son 2 tarjetas de sonido. Uno es el audio integrado, el otro es el audio del HDMI en la gpu. Los pequeños archivos personalizados están en ~ / .pulse pero /etc/pulse/default.pa está intacto. Entonces, en ese caso, por lo que entiendo, el ~ / .pulse / default.pa no reemplazará /etc/pulse/default.pa, sino que se fusionará con él.
Anthony

Pruebe con dos archivos .pa personalizados con contenido completo de default.pa donde se agrega la sección de dispositivo diferente como en los dos archivos existentes (en caso de que no se fusionen).
Takkat

Además, el default.pa leído por pulseaudio ejecutado en modo de todo el sistema debe estar en /etc/pulse, no en INICIO.
Takkat

Lo tengo principalmente trabajando en cajeros automáticos. Informaré cuando tenga todo resuelto.
Anthony

Respuestas:


7

He pasado muchas horas investigando en línea, probando varias configuraciones y hablando con los desarrolladores de Pulseaudio. La conclusión es que ejecutar pulseaudio en modo de usuario normal permitirá que solo la sesión activa marcada por ConsoleKit acceda al hardware de audio. Dado que ConsoleKit actual solo puede marcar una sesión como activa a la vez, esto significa que debemos ejecutar una instancia de pulseaudio en todo el sistema. La ventaja: cada asiento puede tener audio individual. La desventaja: TODO el hardware de audio está disponible para cualquier usuario y puede manipularse A TU VOLUNTAD. Esta no es una situación ideal para un cibercafé u otro entorno público donde la seguridad es una preocupación real. Tenga esto en cuenta al crear la política de seguridad de su sitio. Puede ser prudente restringir la ejecución de pavucontrol solo a administradores.

Como siempre, haga una copia de seguridad de todos sus archivos de configuración predeterminados. Si ha manipulado sus configuraciones sin hacer una copia de seguridad, puede recuperar el paquete pulseaudio con apt-get -d install pulseaudio. Esto descargará el paquete (a / var / cache / archives / apt) solamente y puede extraer el contenido para recuperar las configuraciones predeterminadas. Tenga en cuenta que client.conf no está incluido allí.

Para ejecutar pulseaudio como un demonio en todo el sistema, necesitamos editar algunos archivos.

1.) / etc / default / pulseaudio

    PULSEAUDIO_SYSTEM_START=1

2.) /etc/pulse/daemon.conf - Vea man pulse-daemon.conf para más información.

    daemonize = yes
    local-server-type = system

3.) /etc/pulse/client.conf

    autospawn = no

También necesitamos agregar usuarios al grupo de acceso por pulsos.

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

Ahora que todos los usuarios pueden acceder al hardware de audio, debemos seleccionar el hardware que usará cada usuario. Esto se puede hacer usando pavucontrol. Tenga en cuenta que la configuración se almacena POR USUARIO y no seguirá el asiento. Si los usuarios cambian de asiento, deberá volver a seleccionar el hardware de audio deseado.

Comentarios adicionales sobre Pulseaudio

Esperaba que hubiera una solución más elegante para que el audio por asiento funcionara. El uso de Pulseaudio en todo el sistema en varios asientos tiene muchos inconvenientes y no es completamente estable entre reinicios. Intenté iniciar una instancia de todo el sistema y hacer que las instancias de usuario se conectaran a ella como un servidor a través de localhost. Eso no parece funcionar, ya que cuando pulseaudio --start se ejecuta, genera daemon.conf.

Sobre ConsolKit

El problema que vemos al ejecutar un pulseaudio normal por usuario es que un asiento tiene acceso al hardware y todos los demás tienen salida ficticia. Esto se debe a que ConsoleKit no es completamente consciente del asiento. CK considera todos nuestros asientos como sesiones de seat1 y solo puede marcar una sesión como activa. Este hecho se puede ver ejecutando getfacl / dev / snd / *. Se me ocurrió pensar que podríamos editar el archivo acl de los archivos / dev / snd / apropiados en función de qué $ DISPLAY está utilizando un usuario en particular. Esta es una opción que no he explorado. Considere contribuir a la causa de los múltiples asientos explorando esta hipótesis y editando el documento con sus hallazgos.

Existen ramificaciones de asientos múltiples para ConsoleKit , GDM-2.3 y GDM-3.x que deberían proporcionar la funcionalidad automática de asientos múltiples .

Notas adicionales

1.) Sería conveniente no permitir que los usuarios carguen módulos DISALLOW_MODULE_LOADING = 1.

2.) autospawn = no no es completamente necesario como se ve en mi archivo de ejemplo. No causa problemas.


1
Anthony, gracias por tu publicación, ¡fue útil! Enfrenté el mismo problema y descubrí cómo lograr el resultado deseado sin ejecutar Pulseaudio en Modo Sistema. Echa un vistazo: unix.stackexchange.com/a/104344/34581 . Espero que te sea útil.
Ilia Rostovtsev

1

Comprendo la situación: el acceso a pulseaudio está restringido a la sesión activa marcada por ConsoleKit (algo sobre una ACL). CK solo puede marcar una sesión como activa a la vez.

Hay un parche en ConsoleKit para agregar soporte multiseat; esto le permitirá informar todos los asientos activos como activos. Quizás esto solucione su problema. Necesita cooperación con el administrador de pantalla, y hay un parche para versiones antiguas de GDM que agrega este soporte.

Obtuve varios asientos trabajando en Natty (11.04) usando paquetes modificados ConsoleKit y GDM de un PPA . Todavía no me he actualizado de Natty: me llevó mucho tiempo descubrir cómo hacerlo funcionar, y me preocupa que LightDM no funcione con el Kit de consola parcheado.

EDITAR: Debo señalar que Fedora 17 tiene algunas características impresionantes de varios asientos, algunas de las cuales estarán en Quantal. Tienen una página wiki que describe su enfoque . Ubuntu no puede simplemente copiar el enfoque de Fedora porque requeriría cambios significativos; Fedora usa systemd y GDM, mientras que Ubuntu usa upstart y LightDM.


Jajaja Conozco las sucursales de múltiples asientos ConsoleKit y GDM. Notarás que he vinculado a ellos en la página Ubuntu MultiseatX que estoy en proceso de actualización. En realidad, la rama ck depende de la rama gdm. Son mantenidos por la misma persona de Oracle. El PPA al que hace referencia también es algo que conozco y no es para 12.04. Estoy tratando de hacerlo de una manera que no implique salir de los repositorios estándar. Con respecto a Fedora y systemd ... el enfoque systemd multiseat NO funcionará con el binario nvidia.
Anthony

0

Recientemente estuve tratando de resolver el problema con PulseAudio y Multiseat. Al ver que no había una solución elegante, mi solución era usar la red.

Esta solución se adapta a mi situación porque soy el usuario que con mayor frecuencia está en la máquina y mi asiento se conecta con mayor frecuencia. Y mi asiento está configurado para zurdos y nadie más lo usa.

En mi ~/.config/pulse/default.pacopié la configuración del sistema /etc/pulse/default.pay agregué la siguiente línea:

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

En la configuración de pulseaudio de otros usuarios, agregue un túnel, o varios, si eso es lo que necesita, con algo junto:

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

Cambie el nombre del fregadero para que coincida con el de su máquina. Puede decidir configurar un nombre más amigable, lo que significa que debe configurarlo en su archivo de configuración de pulseaudio, pero acabo de usar el nombre dado al mirarlo pacmd list-sinks.

No es una solución elegante, probablemente intentaré usar una configuración de todo el sistema como lo sugirió @Anthony en mi próximo equipo, pero si tienes muchas tarjetas y solo quieres compartir una o pocas sumidero / fuente, esta es una más solución "quirúrgica".

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.