如何在 qemu 中启用声音?

如何在 qemu 中启用声音?

我正在开发一个 plosia(用于工业应用的持久自由操作系统),它独立于高速 USB 微型拇指驱动器上。我希望使用 QEMU 来录制系统的整个设置和使用阶段。就这个问题而言,主机和客户机在布局上都是相同的系统,它们都基于 Ubuntu-Mate。出于测试和演示目的,我想录制设置过程和其他任务以进行展示。此 qemu 命令允许我启动到我的 USB 驱动器,并给我带来极快的速度和视频性能:

BOOT_USB="/dev/sdf";sudo qemu-system-x86_64 -machine accel=kvm:tcg -m 4096 -bios /usr/share/ovmf/OVMF.fd -smp 16 -vga virtio -display gtk,gl=on -hda $BOOT_USB

视频快速流畅,处理速度可以接受。我只缺少一个我需要的东西,那就是声音。我希望既能听到 vm,又能用 obs 在屏幕录制实用程序的其余部分录制它。

谷歌搜索这个:

qemu-system-x86_64 启用声音

引导我到第一个链接 https://techpiezo.com/linux/enable-audio-in-qemu-virtual-machine/

说明看起来很简单。我尝试了这个命令

qemu-system-x86_64 -soundhw 帮助

其中一个选项是 sb16,这是朋友推荐的,对他很有用。

因此我按照说明修改了命令行:

BOOT_USB="/dev/sdf";sudo qemu-system-x86_64 -soundhw sb16 -machine accel=kvm:tcg -m 4096 -bios /usr/share/ovmf/OVMF.fd -smp 16 -vga virtio -display gtk,gl=on -hda $BOOT_USB

这并没有引发任何特殊的声音错误。但是声音面板仍然显示假输出,主机扬声器没有发出声音。

我似乎对声音如何通过 qemu 和主机扬声器进行传输存在根本性理解问题。任何帮助或建议都将不胜感激。

我正在使用 Ubuntu-Mate 20.04。根据 lspci,我的声卡是这样的:

09:00.3 音频设备:Advanced Micro Devices, Inc. [AMD] 系列 17h (型号 00h-0fh) 高清音频控制器

答案1

N0rbert 的实用程序并没有完全按照我的要求执行,但是通过检查源代码,我能够使我的命令行像这样工作:

BOOT_USB="/dev/sdb"
sudo cp ~/.config/pulse/cookie /root/.config/pulse/cookie
sudo qemu-system-x86_64 -machine accel=kvm:tcg -m 4096 -bios /usr/share/ovmf/OVMF.fd -audiodev pa,id=pa,server=unix:${XDG_RUNTIME_DIR}/pulse/native,out.stream-name=foobar,in.stream-name=foobar -device intel-hda -device hda-duplex,audiodev=pa,mixer=off -rtc base=localtime,clock=host -smp 16 -vga virtio -display gtk,gl=on -drive file=$BOOT_USB,format=raw,index=0,media=disk

我认为我无法解释其工作原理的所有细节,但我会将解决方案留给其他人。开头的命令是针对脉冲音频的修复。有时它有效,有时无效,但使用 cp 命令,它可以相当稳定地工作。找到解决方案几天后,我发现了处理磁盘格式的另一个问题。新命令更安全,没有警告或错误。该命令将使用我的 rEFInd 副本启动启用 uefi 的 USB 驱动器。它应用加速图形和音频。您可以使用此选项将数据驱动器添加到此命令行

-drive file=/dev/sdc,format=raw,if=virtio

OBS 捕捉的镜头在虚拟机中看起来非常清晰流畅。甚至可以播放全高清 60fps 的 YouTube 视频。

答案2

使用 Pipewire,即使-audiodev pa使用插件也无法工作pipewire-pulse。为了解决这个问题,libvirt 有时(通常?)会添加以下内容:

-device ich9-intel-hda,id=sound0,bus=pcie.0,addr=0x1b -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \
    -global ICH9-LPC.disable_s3=1 -global ICH9-LPC.disable_s4=1

对我来说很有用,希望它对那些正在放弃 Pulseaudio 并开始使用 Pipewire 的人也有用。

您还可以完全在用户空间中运行它,因此无需复制神奇的 cookie 和东西。

答案3

为了简化 QEMU 设置过程,您可以使用快捷EMU

sudo apt-get install git
git clone https://github.com/wimpysworld/quickemu.git

sudo apt-get install snapd
snap install qemu-virgil --edge
snap connect qemu-virgil:audio-record
snap connect qemu-virgil:kvm
snap connect qemu-virgil:raw-usb
snap connect qemu-virgil:removable-media

cat << EOF > ~/vm.conf
boot="legacy"
guest_os="linux"
iso="/path/to/file.iso"
disk_img="/home/$USER/path/to/disk.qcow2"
disk=16G
EOF

然后运行它

./quickemu --vm ~/vm.conf

生成的虚拟机将具有声音、SMB、SSH、USB、良好的视频性能和其他功能。


注意:QuickEMU 在后台设置-audiodev选项对应参数

相关内容