web-dev-qa-db-fra.com

libvirt: Configure l'invité pour partager l'audio de l'hôte

Ces derniers jours, j'ai essayé de combiner l'audio d'une machine virtuelle Windows 8.1 x 64 avec l'audio de l'hôte avec un succès mitigé.

La solution qui fonctionne le mieux pour moi actuellement consiste à utiliser Spice pour l'audio et l'ICH6 comme paramètre pour la carte son, mais à cause d'un bogue connu dans Spice que je n'ai pu trouver que rapporté pour Fedora et Red Hat , l'audio est plutôt mauvais et la seule solution partielle consiste à mettre <playback compression='off'/> dans ma configuration de domaine VM. Ce que je veux dire par partie c'est que la qualité sonore devient un peu utilisable mais il y a toujours des problèmes dans l'audio comme certains utilisateurs l'ont également souligné dans les rapports de bogues ci-dessus.

J'ai également essayé d'utiliser VNC au lieu de Spice, mais le client ne prend pas en charge le son. Suite à this rapport de bogue J'ai compris que l'audio peut être envoyé via les moteurs de traitement classiques si le client VNC ne le prend pas en charge en modifiant l'utilisateur et le groupe sous lequel VM s'exécute sous mon utilisateur actuel. et en ajoutant un paramètre VNC dans le /etc/libvirt/qemu.conf comme ceci:

vnc_allow_Host_audio = 1
user = "yourusernamehere"
group = "yourusernamehere"

mais en intégrant également mon utilisateur dans les groupes kvm & libvirtd et en ajoutant cette ligne dans /etc/default/libvirt-bin:

export QEMU_AUDIO_DRV=pa

Cela m'a permis d'obtenir l'effet souhaité et l'audio de l'invité se déroulerait sans heurt, mais l'audio de l'hôte ne fonctionnerait pas tant que je n'aurais pas fermé l'invité. En regardant les processus de l'hôte, j'ai remarqué que libvirt avait généré une autre instance Pulseaudio sous mon utilisateur actuel (ayant effectivement 2 instances Pulseaudio) au lieu d'utiliser l'instance déjà disponible.

Après un peu plus de recherches sur Google, j'ai constaté que pulseaudio peut partager son contenu audio avec d'autres utilisateurs si le module-native-protocol-tcp était activé. Malheureusement, c'est là que j'ai arrêté de trouver des informations utiles. Tous les articles que j'ai trouvés expliquant comment activer cela suggèrent d'exécuter Pulseaudio en mode système, ce qui est évidemment un problème de sécurité, mais ferait également en sorte que mes widgets audio Pulse dans Plasma5 ne fonctionnent pas comme prévu. J'ai réussi à localiser this article pour Fedora 12 expliquant qu'il est possible de faire fonctionner Pulseaudio en tant qu'utilisateur non privilégié (c'est-à-dire mon utilisateur actuel) mais je ne comprends pas comment partager de l'audio avec moi-même. .

Est-ce que quelqu'un sait comment utiliser Pulse pour pouvoir partager l'audio avec ma VM ou fournit une autre solution permettant de mélanger le son de l'invité et de l'hôte sans audio glitch?

3
DarthRevan13

D'accord, après beaucoup d'essais et d'erreurs, j'ai finalement réussi à le faire fonctionner comme il se doit, sans aucun hoquet.

Certaines des étapes suivantes peuvent ne pas être nécessaires pour que cela fonctionne, mais cela a fonctionné pour moi après les avoir effectuées. Si quelqu'un veut modifier la réponse et se débarrasser des étapes inutiles, veuillez le faire.

Outre ce que j'ai dit ci-dessus lors de l'utilisation de VNC (modification des paramètres de qemu.conf & libvirt-bin et vérification que mon utilisateur faisait partie des groupes requis), je me suis également assuré que mon utilisateur faisait partie des groupes Pulse & Pulse-access.

J'ai tout copié de/etc/Pulse dans .Pulse mon répertoire personnel:

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

Dans ~/.Pulse/client.conf j'ai commenté/modifié les lignes suivantes:

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

Dans ~/.Pulse/daemon.conf

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

Aussi, j'ai installé paprefs (apt-get install paprefs) et vérifié:

  • Rendre les périphériques audio réseau PulseAudio découvrables disponibles localement
  • Activer l'accès réseau aux périphériques audio locaux
  • Ne nécessite pas d'authentification
  • Activer le récepteur Multicast/RTP
  • Ajouter un périphérique de sortie virtuel pour une sortie simultanée sur toutes les cartes son locales

Après avoir apporté toutes les modifications, vous pouvez redémarrer votre ordinateur ou simplement vous déconnecter/vous connecter et redémarrer libvirt-bin. Tout devrait fonctionner parfaitement lorsque vous démarrez une machine virtuelle.

PS: Si l’audio de la VM crépite, assurez-vous que la VM a la même fréquence d’échantillonnage et la même profondeur de bits que l’hôte et devrait fonctionner.

Mise à jour: Il est devenu évident pour moi que l'audio peut toujours avoir des problèmes avec l'invité (son de chantage) car libvirt risque de ne pas pouvoir charger la configuration Pulse, d'après ce que j'ai vu dans le fichier journal du domaine (/ var/log/libvirt/qemu). /votredomaine.log). Vous pouvez désactiver le profil temporairement ou simplement ajouter:

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

dans /etc/apparmor.d/abstractions/libvirt-qemu et rechargez les profils apparmor avec:

Sudo invoke-rc.d apparmor reload

Remarque: J'ai configuré libvirt pour qu'il s'exécute en tant qu'utilisateur actuel dans /etc/libvirt/qemu.conf pour des raisons de sécurité.

2
DarthRevan13