如何在qemu中启用声音?

Ohi*_*ovr 6 sound 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

视频快速流畅,处理速度尚可。我只缺少一件事,那就是声音。我希望既能听到虚拟机的声音,又能在屏幕录制实用程序的其余部分中使用 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] Family 17h(型号 00h-0fh)HD 音频控制器

Ohi*_*ovr 3

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
Run Code Online (Sandbox Code Playgroud)

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

-drive file=/dev/sdc,format=raw,if=virtio
Run Code Online (Sandbox Code Playgroud)

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


N0r*_*ert 1

为了简化 QEMU 设置过程,您可以使用QuickEMU

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
Run Code Online (Sandbox Code Playgroud)

然后运行它

./quickemu --vm ~/vm.conf
Run Code Online (Sandbox Code Playgroud)

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


注意:QuickEMU 在引擎盖下设置-audiodev具有相应参数的选项。