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から
パワー $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%安全ではありませんが、家庭用には問題ありません)。