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에서

정력 $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% 안전하지는 않지만 가정용으로는 괜찮습니다).

관련 정보