我今天遇到了你的问题,我自己也在寻找解决方案。我发现了一些似乎有效的东西。不完全优雅,但它是我发现的最好的。这是我所拥有的:
系统:主机上带有 qemu 5.1 的 Manjaro
对我来说关键是修改/etc/pulse/default.pa并添加(在底部):
load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socket
然后运行:pulseaudio --kill
(应该自行重启,pulseaudio --start 如果没有)
此时,/tmp/pulse-socket应该存在。
我最初阅读的 Arch/Manjaro 文档中没有看到这一步。所以这是我的症结所在。
除此之外,它归结为 Arch wiki 中的步骤:
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Passing_VM_audio_to_host_via_PulseAudio
具体来说,我的virsh edit <vm-name> 在底部看起来像这样(不要忘记对顶部的domain 行也进行了更改):
<qemu:commandline>
<qemu:arg value='-object'/>
<qemu:arg value='input-linux,id=mouse1,evdev=/dev/input/by-id/usb-1bcf_USB_Optical_Mouse-event-mouse'/>
<qemu:arg value='-object'/>
<qemu:arg value='input-linux,id=kbd1,evdev=/dev/input/by-id/usb-0c45_USB_Keyboard-event-kbd,grab_all=on,repeat=on'/>
<qemu:arg value='-device'/>
<qemu:arg value='ich9-intel-hda,bus=pcie.0,addr=0x1b'/>
<qemu:arg value='-device'/>
<qemu:arg value='hda-micro,audiodev=hda'/>
<qemu:arg value='-audiodev'/>
<qemu:arg value='pa,id=hda,server=unix:/tmp/pulse-socket,out.buffer-length=512,timer-period=1000'/>
</qemu:commandline>
evdev 行与声音无关,但我将它们放在上下文中(假设您使用 evdev 共享键盘和鼠标)。
请注意,我不必对/etc/libvirt/qemu.conf 进行任何更改以使声音正常工作(尽管我使用键盘/鼠标为 evdev 做了任何更改)。我也不必设置/root/.config/pulse 目录,因为我使用的是匿名套接字。