为什么 qemu 不接受音频的 xml 配置?

为什么 qemu 不接受音频的 xml 配置?

我想将 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% 安全,但对于家庭来说是可以的)

相关内容