libvirt: Configure o convidado para compartilhar o áudio do host

3

Nos últimos dias, tentei obter um áudio da VM x64 para Windows 8.1 misturado ao áudio do host com um bom resultado.

A solução que funciona para mim agora é usar o Spice para áudio, e o ICH6 como configuração para a placa de som, mas por causa de um bug conhecido no Spice que eu só encontrei relatado para Fedora e Red Hat , o áudio é muito ruim e a única solução parcial é colocar <playback compression='off'/> em minha configuração de domínio da VM. O que quero dizer com parcial é que a qualidade do som se torna um pouco utilizável, mas ainda há falhas no áudio, como alguns usuários também apontaram nos relatórios de bugs acima.

Eu também tentei usar VNC em vez de Spice, mas o cliente não vem com suporte a som. Seguindo este relatório de bugs, eu entendi que o áudio pode ser enviado através dos back-ends regulares se o VNC o cliente não suporta isso alterando o usuário e o grupo que a VM executa para o meu usuário atual e adicionando uma configuração VNC no /etc/libvirt/qemu.conf da seguinte forma:

vnc_allow_host_audio = 1
user = "yourusernamehere"
group = "yourusernamehere"

mas também tornando meu usuário parte do kvm & amp; libvirtd groups e além disso adicionando esta linha em /etc/default/libvirt-bin :

export QEMU_AUDIO_DRV=pa

Isso me deu o efeito desejado e o áudio do convidado seria executado sem problemas, mas o áudio do host não funcionaria até que eu fechasse o convidado. Observando os processos do host, notei que a libvirt gerou outra instância do Pulseaudio sob o meu usuário atual (efetivamente tendo 2 instâncias do Pulseaudio) em vez de usar a instância que já estava disponível.

Depois de pesquisar um pouco mais, achei que o pulseaudio pode compartilhar seu áudio com outros usuários, se o module-native-protocol-tcp estiver ativado. Infelizmente, foi aí que parei de encontrar informações úteis. Todos os artigos que encontrei explicando como ativar isso sugerem a execução do Pulseaudio no modo de sistema que, obviamente, é um problema de segurança, mas também faria com que meus widgets de áudio de pulso no Plasma5 não funcionassem como esperado. Eu consegui rastrear este artigo para o Fedora 12 explicando que é possível executar o Pulseaudio como um usuário não privilegiado (também conhecido como meu usuário atual), mas não entendo como posso compartilhar áudio comigo mesmo.

Alguém sabe como posso usar o Pulse para que eu possa compartilhar áudio com minha VM ou fornecer outra solução para misturar sons do convidado e do host sem áudio problemático?

    
por DarthRevan13 11.01.2016 / 15:11

1 resposta

2

Ok, depois de muita tentativa e erro, finalmente consegui fazê-lo funcionar como deveria, sem nenhum soluço.

Algumas das etapas a seguir podem não ser necessárias para que funcione, mas funcionou para mim depois de criá-las. Se alguém quiser modificar a resposta e se livrar das etapas desnecessárias, faça isso.

Além do que eu disse acima ao usar o VNC (alterando as configurações no qemu.conf & amp; libvirt-bin e certificando-se de que meu usuário fazia parte dos grupos necessários), também certifiquei-me de que meu usuário fazia parte do pulse & amp; ; pulse-access groups.

copiei tudo de / etc / pulse in .pulse meu diretório pessoal:

cd ~
mkdir .pulse
cp /etc/pulse/* .pulse/

Em ~/.pulse/client.conf , comentei / modifiquei as seguintes linhas:

enable-shm = yes
auto-connect-localhost = yes
auto-connect-display = yes

Em ~/.pulse/daemon.conf

daemonize = yes
allow-module-loading = yes
use-pid-file = yes
enable-shm = yes

Também instalei paprefs ( apt-get install paprefs ) e verifiquei:

  • Disponibilizar dispositivos de som de rede PulseAudio detectáveis localmente
  • Ativar o acesso à rede para dispositivos de som locais
  • Não requerer authnetication
  • Ativar receptor de multicast / RTP
  • Adicionar dispositivo de saída virtual para saída simultânea em todas as placas de som locais

Depois de fazer todas as alterações, você pode reinicializar seu computador ou simplesmente efetuar logout / login e reiniciar o libvirt-bin e tudo deverá funcionar perfeitamente quando você iniciar uma VM.

PS: Se o áudio da VM estiver falhando, verifique se a VM tem a mesma taxa de amostragem e profundidade de bits que o host e isso deve funcionar.

Atualização: ficou claro para mim que o áudio ainda pode ter problemas no convidado (carckling sound) porque libvirt pode não ser capaz de carregar a configuração de pulso, pelo que vi no arquivo de log do domínio (/ var / log / libvirt / qemu / yourdomain.log). Você pode desativar o perfil temporariamente ou apenas adicionar:

@{HOME}/.pulse/** rw,

em /etc/apparmor.d/abstractions/libvirt-qemu e recarregue os perfis do apparmor com:

sudo invoke-rc.d apparmor reload

Nota: Eu configurei o libvirt para ser executado como meu usuário atual em /etc/libvirt/qemu.conf por motivos de segurança.

    
por DarthRevan13 31.01.2016 / 09:06