直到 qemu 6.1.0(和 6.2.0,qemu.conf 中的capability_filters = [ "device.json" ])此配置对于旧 Windows 2000 计算机上的 gpu passtrough 工作正常。脉冲音频方式,使声音不会不同步。
<qemu:commandline>
<qemu:arg value='-object'/>
<qemu:arg value='input-linux,id=mouse,evdev=//dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse'/>
<qemu:arg value='-object'/>
<qemu:arg value='input-linux,id=kbd,evdev=/dev/input/by-id/usb-_USB_Keyboard-event-kbd,grab_all=on,repeat=on'/>
<qemu:arg value='-set'/>
<qemu:arg value='device.hostdev1.x-vga=on'/>
<qemu:arg value='-device'/>
<qemu:arg value='ac97,audiodev=ac97'/>
<qemu:arg value='-audiodev'/>
<qemu:arg value='pa,id=ac97,server=unix:/tmp/pulse-socket'/>
<qemu:env name='QEMU_AUDIO_DRV' value='pa'/>
<qemu:env name='QEMU_AUDIO_DAC_FIXED_FREQ' value='48000'/>
<qemu:env name='QEMU_AUDIO_DAC_TRY_POLL' value='0'/>
<qemu:env name='QEMU_AUDIO_ADC_FIXED_FREQ' value='48000'/>
<qemu:env name='QEMU_AUDIO_ADC_TRY_POLL' value='0'/>
<qemu:env name='QEMU_AUDIO_TIMER_PERIOD' value='1000'/>
<qemu:env name='QEMU_PA_SERVER' value='/tmp/pulse-socket'/>
</qemu:commandline>
但在 6.2.0 之后此配置不再起作用,返回错误“QEMU:没有定义设备“hostdev1””
新的语法是这样的
<qemu:override>
<qemu:device alias='hostdev1'>
<qemu:frontend>
<qemu:property name='x-vga' type='bool' value='true'/>
</qemu:frontend>
</qemu:device>
</qemu:override>
VGA 工作正常,但 ac97 卡消失了。
我试过这个
<qemu:override>
<qemu:device alias='hostdev1'>
<qemu:frontend>
<qemu:property name='x-vga' type='bool' value='true'/>
</qemu:frontend>
</qemu:device>
<qemu:device alias='ac97'>
<qemu:frontend>
<qemu:property name='audiodev' type='string' value='id=ac97,driver=pa'/>
</qemu:frontend>
</qemu:device>
</qemu:override>
</domain>
但什么也没有,虚拟机在没有声卡的情况下启动,读取日志时缺少“-device ac97,audiodev=ac97”(因此虚拟机上没有声卡)
常问问题:
为什么不使用hdmi 来播放声音?很简单:我的显示器只有一个 vga 端口
为什么不使用 libvirt 中的 ac97?因为我不知道是否可以设置脉冲音频套接字。
答案1
实际上我使用这个解决方法。我在另一个目录(/opt/qemu6)上编译旧的 qemu (6.2)并使用这个二进制文件而不是 /usr 中的新文件(很糟糕......但工作正常)。所以我只能在这个虚拟机上使用旧语法。