在 QEMU 中的 Windows 10 客户虚拟机中启用 OpenGL

在 QEMU 中的 Windows 10 客户虚拟机中启用 OpenGL

我正在尝试在 Windows 10 VM(Ubuntu 18.04,QEMU 3.1.0)上安装 Sketchup 2019,但 Sketchup 需要 OpenGL 3.1 或更高版本才能运行。我之前问过类似的问题,希望通过启用 Virgl 的 3D 加速可以实现,但是即使我能够在主机上启用 Virgl 并选择使用 Virtio 进行 3D 加速,OpenGL 仍然不在我的 Windows VM 上。然后我通过了 MSI GeForce GT 710 Nvidia GPU,它可以工作并显示在 VM 上,但是 OpenGL 仍然不存在,Sketchup 无法运行。

似乎 Windows 客户驱动程序根本不存在,几年前我曾听说 Nathan Gauër 正在为此开发驱动程序,但不确定这是否能实现,或者是否有其他方法让 OpenGL 在 QEMU KVM 中的 Windows VM 上运行。如果有人知道是否有任何可运行的 Windows 客户驱动程序,或者是否有方法让 OpenGL 运行,或者是否有任何其他方法让 Sketchup 在这种环境中运行,我将非常乐意听取您的见解!

我之前关于启用 Virgl 的帖子 在 18.04 上的 qemu 2.11 中为 Windows 10 VM 启用硬件加速

维基百科对显然不起作用的 Windows 客户驱动程序提供最少的信息。

答案1

全部归功于此邮政作者:Thomas Schwery。您可以按照那里的说明操作,但我将在下面进行总结。这应该会让您获得在 Windows 10 Guest VM 上运行的较新版本的 OpenGL(对我来说是 3.1)。OpenGL 1.1 实际上已经在运行,但由于它太旧了,我尝试运行的应用程序无法识别它。

对于我的设置,我使用 libvirt/KMV/QEMU 在 Gentoo Linux Host 上运行 Windows 10 客户机。以下是我让它工作的步骤:

你应该看到类似这样的内容:

-------------------------------------
Mesa3D system-wide deployment utility
-------------------------------------
Please make a deployment choice:
1. Core desktop OpenGL drivers
2. Core desktop OpenGL drivers + Intel swr
3. Install DirectX IL for redistribution only
4. Microsoft OpenGL over D3D12 driver only (replaces Mesa core desktop OpenGL drivers)
5. Mesa3D off-screen render driver gallium version (osmesa gallium)
7. Mesa3D graw test framework
8. Update system-wide deployment
9. Remove system-wide deployments (uninstall)
10. Exit
Enter choice:
  • 选择第一个选项1. Core desktop OpenGL drivers

就是这样。

您可以GPU Caps Viewer使用这里确认。 在此处输入图片描述

答案2

目前,Qemu 中的 Windows 客户机中没有 OpenGL 之类的东西。相反的谣言通常源于QXL配置中忘记了,再加上绩效安慰剂效应1. OpenGL 确实作为 菜单项出现virt-manager,但它仅适用于virtio-gpuLinux 客户机中的驱动程序。

KVM、Qemu 并virt-manager没有能够为 Windows 10 客户机提供 OpenGL 的功能。GPUvirtio无法在 Windows 上正常工作,并且似乎仅限于向后兼容的 VGA 模式,帧速率约为 2 fps,分辨率为 800×600。

QXL另一方面,虽然没有 3D 加速,但运行得相当好,并且提供自动分辨率更改,具有足够的视频 RAM,还有 HighDPI 分辨率。)

本 ArchWiki 部分包含当前状态的摘要以及实现实验性 Windows virtioGPU 驱动程序的项目链接。不幸的是,这些项目要么被放弃,要么处于早期研究阶段

话虽如此,唯一可行的建议是等待或为正在进行的项目之一做出贡献。

1用户有时可能会认为观察到了实际上并不存在软件属性(通常与性能有关)。这是一种已知现象,甚至有过“成功”安慰剂软件在过去。

答案3

感谢 Christian 的反馈。我确实尝试过将 spice 与 GL 一起使用,但在尝试启动启用了它的 VM 时一直出现错误,因此还没有进入那个兔子洞。我已将该 GPU 传递到我的 VM,无论我尝试做什么,更新 Windows 或驱动程序,尝试通过 virt-manager 删除其他显示器和视频(似乎无法全部删除),OpenGL 都没有显示为已安装。也许如果我从 virsh xml 文件中删除了显示器和视频,它就会起作用,但我决定从头开始并最终让它工作,所以如果将来其他人遇到这种情况,以下是我采取的步骤。

先决条件

Ubuntu 18.04 带有 QEMU(我有 3.1.0,可能与 2.11 或其他类似)。Nvidia 卡需要几个步骤,不确定 AMD 卡需要什么。 本指南是我主要模仿以使一切正常运行,包括以下步骤。 是另一个具有有关 Nvidia 卡设置的类似信息的网站。

需要注意的是,当我第一次物理添加 GPU 时,我无法再通过网络访问我的机器(无头),因为添加 GPU 会改变网络接口,从而破坏我的 netplan。本来可以连接显示器,但我的 MB 上有一个 IPMI 端口,因此以这种方式连接并获得新的网络接口来更新 netplan。

然后

在 virt-manager 中创建 Windows 10 VM - 最后选择高级选项

在选项中 - 使用 OVMF bios 和 Q35 芯片组。SeaBIOS 不起作用,不得不“sudo apt install ovmf”。OVMF 无法使用 IDE 驱动器,因此改为 SATA 启动(SCSI 也不起作用),后来制作了 Virtio。

在选项中-删除所有显示和视频设备

在选项中 - 通过 GPU 视频的 PCI 设备(将显示器直接连接到 Nvidia 显卡)和音频(仅视频失败)

在选项中 - 通过 USB 键盘/鼠标(因为删除了所有显示和视频选项以确保安全,所以无法远程交互)

启动 VM 并加载 Windows 10 - 第一次启动时,它直接将我带到 UEFI shell,我必须退出该 shell,然后进入 BIOS,在那里我可以进入启动菜单并选择我已通过 SATA 附加为 CD 的 Win10 iso 进行启动。

在 Windows 加载后,我关闭了 VM,然后根据上述指南编辑了 XML,以确保 GPU 没有出现 Code 43 错误(特别是在标记的位置添加了 3 行 - “vendor_id state='on' value='1234567890ab'/”、“hidden state='on'/”和“ioapic driver='kvm'/”)。

加载维蒂奥驱动程序和实用程序

加载最新的 Nvidia 驱动程序

检查OpenGL它终于到了。

安装了 Sketchup 并且运行良好。

我通常使用远程桌面来连接 Windows VM,但我仍然想尝试从 virt-manager 进行连接,因此在一切正常后,我确实返回并向 VM 添加了 VNC 显示器和 Virtio 视频,以便我可以通过 virt-manager 或类似程序进行连接和交互。这似乎只有在 Nvidia 显示器物理断开连接的情况下才有效,否则我会收到“客户机尚未初始化显示器(尚未)”的消息,我相信肯定有解决方案,但我无论如何也不打算连接显示器,所以我没有调查这个问题。

感谢您在这里和我之前的帖子 Christian 的意见,我将在旧帖子中添加一条简短的注释并在这里添加链接,因为它们是相关的。

相关内容