我想将 audiodev 传递给虚拟机,但 libvirt 退出并出现此错误
error: internal error: process exited while connecting to monitor: 2024-03-17T23:29:37.725695Z qemu-system-x86_64: XDG_RUNTIME_DIR not set
这些是 vm 的行
<qemu:arg value="-device"/>
<qemu:arg value="usb-audio,audiodev=my_audiodev"/>
<qemu:arg value="-audiodev"/>
<qemu:arg value="pa,id=my_audiodev"/>
我知道可以直接在 xml 中插入声卡,但我想知道为什么会出现此错误,还要尝试“virtio-sound”然后
<qemu:arg value="-device"/>
<qemu:arg value="virtio-sound,audiodev=my_audiodev"/>
<qemu:arg value="-audiodev"/>
<qemu:arg value="pa,id=my_audiodev"/>
当然,如果没有这些行,虚拟机就会运行
qemu-版本是8.2.2 libvirt版本是10.0.0 系统是Slackware 15
该错误来自使用pulseaudio的qemu
qemu-system-x86_64 -audiodev pa,id=hda,out.mixing-engine=off -audiodev pa,id=usb,out.mixing-engine=off
qemu-system-x86_64: XDG_RUNTIME_DIR not set
尝试设置 xdg-runtime-dir..
export XDG_RUNTIME_DIR=$TMPDIR
qemu-system-x86_64 -device usb-audio -audiodev alsa,id=hda,out.mixing-engine=off -audiodev pa,id=usb,out.mixing-engine=off
qemu-system-x86_64: could not stat pidfile /pulse/pid: No such file or directory
答案1
已找到解决方案,适用于 qemu
与 XDG_RUNTIME_DIR
mkdir /tmp/pulse
XDG_RUNTIME_DIR=/tmp/pulse pulseaudio -D
qemu-system-x86_64 -device usb-audio -audiodev pa,id=hda,out.mixing-engine=off -audiodev pa,id=usb,out.mixing-engine=off
没有 XDG_RUNTIME_DIR
qemu-system-x86_64 -device usb-audio -audiodev pa,id=hda,out.mixing-engine=off -audiodev pa,id=usb,server=unix:/tmp/pulse-socket
对于 libvirt 的另一个问题(使用 xdg_runtime_dir),它以不同的用户(qemu)运行,所以我必须找到一种与 qemu 用户共享声音的方法
error: internal error: process exited while connecting to monitor: 2024-03-17T23:56:30.886989Z qemu-system-x86_64: could not stat pidfile /tmp/pulse/pulse/pid: Permission denied
也为 libvirt 找到了解决方案(在这种情况下 xdg_runtime 没有用)
<qemu:arg value="-device"/>
<qemu:arg value="usb-audio,audiodev=my_audiodev"/>
<qemu:arg value="-audiodev"/>
<qemu:arg value="pa,id=my_audiodev,server=unix:/tmp/pulse-socket"/>
在default_pa中
vim $HOME/.config/pulse/default_pa
load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socket
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.2;192.168.0.10
通过此配置,您允许其他用户使用(并听到)您的声音,无需身份验证,使用基于 IP 的 ACL(不是 100% 安全,但对于家庭来说是可以的)