编辑:赫尔曼的解决方案使用 QXL 是可以接受的。
我自己编译了 QEMU,并从命令行运行它。这是因为打了补丁,并且拥有最新的 QEMU 版本。
目标是使用 Ubuntu 16.04 x86/64 主机运行具有 FHD(1920x1080)分辨率的通用 Windows(7+)客户机,而不使用远程桌面(因此直接在 QEMU 窗口中)。
当我使用以下命令配置编译器时:
./configure --target-list=x86_64-softmmu --enable-debug --enable-gtk # and other parameters
并使用以下命令运行 QEMU:
$QEMU_BINARY \
-drive if=pflash,format=raw,readonly,file=$OVMF_20160813_BIN \
-drive if=pflash,format=raw,file=$OVMF_20160813_VARS_TMP \
-enable-kvm \
-machine q35,accel=kvm,mem-merge=off \
-cpu host \
-vga std \
# and other parameters
Windows 将分辨率限制为 800x600。
我该如何配置/执行 QEMU 以获得预期的分辨率?
当我执行使用时-vga vmware
,我得到Guest has not initialized the display (yet).
,我不确定这是否是一个错误或者我没有正确配置我的系统或 QEMU。
如果解决方案需要安装驱动程序,这是可以接受的,但我倾向于不从远程桌面连接执行 QEMU。如果无法轻松达到 FHD,那么即使是较低的分辨率也可以(除了 800x600 之外的任何分辨率!)。
答案1
我曾经这样做过,但当我从 Windows XP 切换到 Windows 10 时,它就崩溃了。现在我也面临同样的问题。据我研究,由于 OVMF EFI 和 Windows 的不幸组合,这根本是不可能的。
可用分辨率列表在虚拟“std”显卡 BIOS 中生成。官方分辨率列表已修复(请参阅 qemu bug 498421),但如果您自行编译,则可以更改(请参阅https://www.tablix.org/~avian/blog/archives/2013/05/custom_display_resolutions_in_qemu/)。
这仅适用于旧版 BIOS 启动过程。一旦我将 EFI 启动样式与 OVMF 结合使用,Windows 就会选择完全依赖显示器提供的 EDID。不幸的是,qemu 不会模拟虚拟显示器。Windows 10 不会接收 EDID,因此会回退到 800x600。这种行为硬编码且無法改變。
理论上,你可以破解微软的“基本显示驱动程序”,就像在https://github.com/ywjheart/basic_adapter_driver_modification,但由于鼓励进行驱动程序签名检查,因此这对于 Windows 7 或更高版本将会失败。
在客户机中,您可以手动安装具有所需分辨率的显示器,但 Windows 仍会等待 EDID。
我求助于远程桌面。使用-vga qxl
适当的客户驱动程序是一种替代方法,但就我个人而言,我发现这并没有什么好处。
更新: qemu v4.0.0出局(见于克拉克塞尔)。它现在生成 EDID 信息!我用
./configure --target-list=x86_64-softmmu --enable-sdl --enable-opengl
,运行
qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -drive if=virtio,format=raw,file=windows10 -display sdl,gl=on -device qemu-xhci,id=usb-bus -device usb-tablet -device VGA,edid=on,xres=1920,yres=1080
瞧瞧:Windows 10 客户机内全分辨率!SDL UI 响应非常灵敏。