Como configuro o som com o PulseAudio e o Multiseat?

12

No espírito da divulgação completa, eu acabei de postar esta pergunta nos fóruns do ubuntu, mas conheço mais cabeças trabalhando nisso não poderiam doer.

Eu tenho uma configuração de vários lugares funcionando muito bem. Hot plugging dispositivos de entrada funciona como esperado e tal. O único problema que ainda não consegui resolver é obter o áudio de cada lugar.

Aqui está um resumo das minhas tentativas de fazer o áudio funcionar:

  1. Faça o ~ / .pulse / default.pa configurado dinamicamente com base em que $ DISPLAY o usuário efetua login.

  2. Carrega pulseaudio como uma instância de todo o sistema.

    • Não foi possível fazer isso funcionar. Nenhum hardware de áudio era acessível para os usuários.
  3. Use as regras do udev para marcar assentos no ConsoleKit. Seguindo as diretrizes do udev encontradas aqui: link

    • Eu não achei que isso funcionaria, embora tenha sido "garantido" trabalhar por alguém em irc.freenode #pulseaudio
Nenhuma dessas tentativas gerou sucesso, e é por isso que eu agora me volto para a comunidade em busca de ajuda. É bem possível que os métodos sugeridos funcionem e eu apenas estraguei alguns aspectos, idk. Esta é a última peça do quebra-cabeça que é necessária antes que eu possa ir e atualizar a página do MultiseatX para incluir instruções para o Ubuntu 12.04.

Meus entendimentos sobre a situação: O acesso ao pulseaudio é restrito à sessão ativa marcada pelo ConsoleKit (algo sobre uma ACL). CK só pode marcar uma sessão como ativa de cada vez. Esse simples fato da vida me leva a acreditar que a solução deve envolver o pulseaudio sendo executado como uma instância de todo o sistema. Cada usuário deve se conectar ao servidor de pulso e ser limitado a um subconjunto de todo o hardware. Talvez cada usuário se conecte ao servidor de pulso via localhost, idk. Eu sei que, independentemente das minhas tentativas e dos resultados fracassados, sempre consegui usar sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wav para tocar algo em qualquer hardware.

Estou me agarrando aos canudos e agora estou nos últimos cabelos que posso arrancar da minha cabeça. Por favor, ajude-me a descobrir isso para que possamos compartilhar a riqueza. Qualquer informação adicional necessária será fornecida a seu pedido.

    
por Anthony 24.09.2012 / 19:22

2 respostas

7

Eu passei muitas horas pesquisando on-line, testando várias configurações e conversando com os desenvolvedores do Pulseaudio. A linha inferior de tudo é que a execução de pulseaudio no modo de usuário normal permitirá que somente a sessão ativa marcada pelo ConsoleKit acesse o hardware de áudio. Como o ConsoleKit atual só pode marcar uma sessão como ativa por vez, isso significa que devemos executar uma instância de pulseaudio em todo o sistema. O lado positivo: cada assento pode ter áudio individual. A desvantagem: TODO o hardware de áudio está disponível para qualquer usuário e pode ser manipulado AT WILL. Esta não é uma situação ideal para um cibercafé ou outro ambiente público em que a segurança é uma preocupação real. Tenha isso em mente ao criar sua política de segurança do site. Pode ser prudente restringir a execução do pavucontrol apenas aos administradores.

Como sempre, faça um backup de todos os seus arquivos de configuração padrão. Se você tiver consertado suas configurações sem fazer backup, poderá recuperar o pacote pulseaudio com o apt-get -d install pulseaudio. Isso fará o download do pacote (para / var / cache / archives / apt) e você poderá extrair o conteúdo para recuperar as configurações padrão. Esteja ciente de que client.conf não está incluído lá.

Para executar o pulseaudio como um daemon do sistema, precisamos editar alguns arquivos.

1.) / etc / default / pulseaudio

    PULSEAUDIO_SYSTEM_START=1

2.) /etc/pulse/daemon.conf - Veja man pulse-daemon.conf para mais     informação.

    daemonize = yes
    local-server-type = system

3.) /etc/pulse/client.conf

    autospawn = no

Também precisamos adicionar usuários ao grupo de acesso por pulsos.

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

Agora que todos os usuários podem acessar o hardware de áudio, precisamos selecionar o hardware que cada usuário usará. Isso pode ser feito usando o pavucontrol. Por favor, esteja ciente de que as configurações são armazenadas por usuário e não seguirá o assento. Se os usuários trocarem de lugar, você precisará selecionar novamente o hardware de áudio desejado.

Comentários adicionais sobre o Pulseaudio

Eu esperava que houvesse uma solução mais elegante para obter o trabalho de áudio por estação. Usar um Pulseaudio em todo o sistema em multiterminal tem muitas desvantagens e não é totalmente estável entre as reinicializações. Eu tinha tentado iniciar uma instância de todo o sistema e ter instâncias de usuário conectadas a ele como um servidor via host local. Isso parece não funcionar desde quando o pulseaudio --start é executado pelo daemon.conf.

Sobre o ConsolKit

O problema que vemos quando executamos um pulseaudio normal por usuário é que um assento tem acesso ao hardware e todos os outros têm Saída Fictícia. Isso ocorre porque o ConsoleKit não está totalmente ciente do banco. O CK considera todas as nossas cadeiras como sessões do assento1 e só pode marcar uma sessão como ativa. Este fato pode ser visto executando-se getfacl / dev / snd / *. Ocorreu-me o pensamento de que poderíamos editar a acl dos arquivos / dev / snd / apropriados com base em qual $ DISPLAY um usuário específico está usando. Esta é uma opção que eu não explorei. Por favor, considere contribuir para a causa multiterminal, explorando esta hipótese e editando o documento com suas descobertas.

Filiais Multiterminal para ConsoleKit , GDM-2.3 e GDM-3.x existe, o qual deve prover a funcionalidade de multiterminal automática.

Notas adicionais

1.) Seria sensato também impedir que os usuários carreguem os módulos DISALLOW_MODULE_LOADING = 1.

2.) autospawn = no não é totalmente necessário, como visto no meu arquivo de exemplo. Isso não causa problemas.

    
por Anthony 02.10.2012 / 17:39
1
  

Meus entendimentos sobre a situação: O acesso ao pulseaudio é restrito à sessão ativa marcada pelo ConsoleKit (algo sobre uma ACL). CK só pode marcar uma sessão como ativa por vez.

Existe um patch no ConsoleKit para adicionar suporte a vários itens; Isso permitirá que ele informe todos os lugares ativos como ativos. Talvez isso conserte seu problema. Ele precisa de cooperação com o gerenciador de exibição, e há um patch em versões antigas do GDM que adiciona esse suporte .

Eu fiz multiseat trabalhando em Natty (11.04) usando pacotes do ConsoleKit e GDM modificados de um PPA . Ainda não fiz upgrade do Natty - demorei muito para descobrir como fazer isso funcionar, e estou preocupado que o LightDM não funcione com o ConsoleKit corrigido.

EDIT: Devo observar que o Fedora 17 possui alguns recursos impressionantes de vários itens, alguns dos quais estarão em Quantal. Eles têm uma página wiki descrevendo sua abordagem . O Ubuntu não pode simplesmente copiar a abordagem do Fedora porque isso exigiria mudanças significativas; O Fedora usa o systemd e o GDM enquanto o Ubuntu usa o upstart e o LightDM.

    
por Richard Hansen 01.10.2012 / 01:46