kvm / qemu - Audio von Windows-Gast ohne Gewürz zu hosten

7681
michaelschufi

Ich versuche, meine Windows 10-Domäne unter Verwendung von virt-manager mit qemu zum Laufen zu bringen.

Alles scheint gut zu funktionieren (GPU Passthrough, CPU), außer wenn ich die Gewürzkonsole betreibe, um den Ton zu hören. Das Geräusch knistert und während der Verwendung der grafischen Konsole bleibt die Maus zurück (und die CPU-Auslastung steigt um 10-15%) und ich habe scheinbar gerahmte Tropfen.

Ich verwende jetzt Synergy, daher muss ich die Spice-Grafikkonsole nicht verwenden. Die Maus funktioniert jetzt einwandfrei. Obwohl ich die Gewürzkonsole nicht verwende, habe ich keinen Ton.

Also habe ich den Audiotreiber in ac97 geändert (mit den Windows Vista / 7-Treibern von Realtek), was das Knistern etwas löst, aber ich habe immer noch Frames, weil ich Spice verwende.

Ich habe online gelesen, es sollte einen Weg geben, damit es mit ALSA oder Pulseaudio funktioniert und ohne eine Grafikkonsole wie Spice. Also habe ich die Datei geändert /etc/libvirt/qemu.conf, um vnc_allow_host_audio/ zu aktivieren nographics_allow_host_audiound die Domäne jetzt mit der Umgebungsvariablen QEMU_AUDIO_DRV=alsaoder auszuführen QEMU_AUDIO_DRV=pa.

Dies führt zu den Fehlern, die im angehängten Protokoll ( /var/log/libvirt/qemu/win10-gaming.log) angezeigt werden .

Wie kann ich es mit ALSA / Pulseaudio oder vor allem ohne Spice funktionieren lassen?

Aktualisieren

In den letzten Tagen habe ich ein paar Dinge ausprobiert, die jetzt folgende Fehler erzeugen:

2017-02-24 01:40:15.016+0000: starting up libvirt version: 1.3.1, package: 1ubuntu10.8 (Christian Ehrhardt <christian.ehrhardt@canonical.com> Mon, 06 Feb 2017 14:30:46 +0100), qemu version: 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.8), hostname: lindesktop LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin QEMU_AUDIO_DRV=pa /usr/bin/kvm-spice -name win10-gaming -S -machine pc-i440fx-xenial,accel=kvm,usb=off -cpu host,kvm=off -drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on -drive file=/var/lib/libvirt/qemu/nvram/win10-gaming_VARS.fd,if=pflash,format=raw,unit=1 -m 8192 -mem-prealloc -mem-path /dev/hugepages/libvirt/qemu -realtime mlock=off -smp 6,sockets=1,cores=2,threads=3 -uuid eb48ea95-aa76-4dad-80c9-1902547899b0 -nographic -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-win10-gaming/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot menu=on,strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x6.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x6 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x6.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x6.0x2 -device ahci,id=sata0,bus=pci.0,addr=0x5 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x7 -drive file=/home/michael/Downloads/virtio-win-0.1.126.iso,format=raw,if=none,media=cdrom,id=drive-sata0-0-0,readonly=on -device ide-cd,bus=sata0.0,drive=drive-sata0-0-0,id=sata0-0-0 -drive file=/home/michael/Downloads/Windows.iso,format=raw,if=none,media=cdrom,id=drive-sata0-0-1,readonly=on -device ide-cd,bus=sata0.1,drive=drive-sata0-0-1,id=sata0-0-1,bootindex=2 -drive file=/media/michael/0f5fc26f-460c-4aba-9b08-975fbb63b955/win10-gaming.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x8,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=27,id=hostnet0,vhost=on,vhostfd=29 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:50:bc:b9,bus=pci.0,addr=0x3 -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,vgamem_mb=16,bus=pci.0,addr=0x2 -device AC97,id=sound0,bus=pci.0,addr=0x4 -device vfio-pci,host=01:00.0,id=hostdev0,bus=pci.0,addr=0xa -device vfio-pci,host=01:00.1,id=hostdev1,bus=pci.0,addr=0xb -device usb-host,hostbus=1,hostaddr=3,id=hostdev2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x9 -msg timestamp=on Domain id=4 is tainted: custom-argv Domain id=4 is tainted: host-cpu shm_open() failed: Permission denied pulseaudio: pa_context_connect() failed pulseaudio: Reason: Connection refused pulseaudio: Failed to initialize PA contextaudio: Could not init `pa' audio driver shm_open() failed: Permission denied pulseaudio: pa_context_connect() failed pulseaudio: Reason: Connection refused pulseaudio: Failed to initialize PA contextaudio: Could not init `pa' audio driver shm_open() failed: Permission denied Failed to create secure directory (/home/michael/.pulse): Permission denied 

Ich habe hauptsächlich gefolgt, was der Benutzer DarthRevan13 hier ( https://askubuntu.com/a/727840/656766 ) vorschlug und was hier geschrieben wird: https://wiki.archlinux.org/index.php/Libvirt#PulseAudio

So sieht mein XML so aus:

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>win10-gaming</name> <uuid>eb48ea95-aa76-4dad-80c9-1902547899b0</uuid> <memory unit='KiB'>8388608</memory> <currentMemory unit='KiB'>8388608</currentMemory> <memoryBacking> <hugepages/> </memoryBacking> <vcpu placement='static'>6</vcpu> <cputune> <vcpupin vcpu='0' cpuset='1'/> <vcpupin vcpu='1' cpuset='2'/> <vcpupin vcpu='2' cpuset='3'/> <vcpupin vcpu='3' cpuset='5'/> <vcpupin vcpu='4' cpuset='6'/> <vcpupin vcpu='5' cpuset='7'/> </cputune> <os> <type arch='x86_64' machine='pc-i440fx-xenial'>hvm</type> <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader> <nvram>/var/lib/libvirt/qemu/nvram/win10-gaming_VARS.fd</nvram> <bootmenu enable='yes'/> </os> <features> <acpi/> <apic/> <kvm> <hidden state='on'/> </kvm> </features> <cpu mode='host-passthrough'> <topology sockets='1' cores='2' threads='3'/> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/bin/kvm</emulator> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/home/michael/Downloads/virtio-win-0.1.126.iso'/> <target dev='sda' bus='sata'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/home/michael/Downloads/Windows.iso'/> <target dev='sdb' bus='sata'/> <readonly/> <boot order='2'/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/media/michael/0f5fc26f-460c-4aba-9b08-975fbb63b955/win10-gaming.qcow2'/> <target dev='vda' bus='virtio'/> <boot order='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> <controller type='sata' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </controller> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <mac address='52:54:00:50:bc:b9'/> <source bridge='xenbr0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <sound model='ac97'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </source> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </hostdev> <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/> </source> <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/> </hostdev> <hostdev mode='subsystem' type='usb' managed='yes'> <source> <vendor id='0x046d'/> <product id='0xc24e'/> </source> </hostdev> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </memballoon> </devices> <qemu:commandline> <qemu:env name='QEMU_AUDIO_DRV' value='alsa'/> <qemu:env name='QEMU_PA_SERVER' value='/run/user/1000/pulse/native'/> </qemu:commandline> </domain> 

Bemerkenswerte Änderungen sind:

<qemu:commandline> <qemu:env name='QEMU_AUDIO_DRV' value='pa'/> <qemu:env name='QEMU_PA_SERVER' value='/run/user/1000/pulse/native'/> </qemu:commandline> 

und Ändern <emulator>/usr/bin/kvm-spice</emulator>zu <emulator>/usr/bin/kvm</emulator>in der XML - Datei.

Zusätzlich hinzufügen

@/.pulse/** rw, 

in /etc/apparmor.d/abstractions/libvirt-qemuund laden Sie die Apparmor-Profile mit:

sudo invoke-rc.d apparmor reload 

Jetzt kann ich den Ton hören, aber mein Host-Audio funktioniert nicht, wenn die Domäne ausgeführt wird.

2

1 Antwort auf die Frage

0
izzyaxl1

Ich habe das gefunden. Ich werde es heute Abend testen, da das gleiche Problem besteht: Wie installiere ich KVM mit einem funktionierenden Audio (auf Ubuntu)?

Die Dinge, die wir beheben wollen, sind:

  1. Führen Sie KVM als Benutzer ohne Rootberechtigung aus, insbesondere als Ihr Login, damit Ihr ALSA-Audio gemeinsam genutzt werden kann.

  2. Stellen Sie sicher, dass KVM das Audio nicht deaktiviert.

  3. Ersetzen Sie die KVM-Binärdatei durch ein Skript, das die richtige Umgebungsvariable einstellt, sodass KVM und Ihr ALSA-Audiotreiber verwendet werden.

Anweisungen folgen:

cd /usr/bin  sudo mv kvm kvm.bin  sudo touch kvm  sudo chmod +x kvm  

Bearbeiten Sie /usr/bin/kvmdiesen Text und fügen Sie ihn ein:

#!/bin/sh  QEMU_AUDIO_DRV=alsa /usr/bin/kvm.bin $@ 

Bearbeiten Sie /etc/libvirt/qemu.confund suchen Sie nach den folgenden Zeilen (denken Sie daran, dass sich alle diese Zeilen in verschiedenen Abschnitten dieser Datei befinden):

vnc_allow_host_audio = 0 #user = "root" #group = "root" 

und ersetzen Sie root durch Ihren lokalen Benutzernamen, zum Beispiel: vnc_allow_host_audio = 1

user = "gurjeet" group = "gurjeet" 

) Starten Sie nun den KVM-Dienst neu:

sudo service libvirt-bin restart 

Starten Sie jetzt Ihr Gastbetriebssystem und genießen Sie den Sound.

Ich habe dies versucht (durch Ändern meiner XML-Konfiguration) und die `/ etc / libvirt / qemu.conf` wie von Ihnen vorgeschlagen. Ich kann den Ton hören, aber mein Host-Audio funktioniert nicht mehr. Ich werde auch meine Frage aktualisieren. michaelschufi vor 7 Jahren 0