如何让VirtualBox中运行的Ubuntu 22虚拟机访问Windows 10主机的NVIDIA GPU?
如何让VirtualBox中运行的Ubuntu 22虚拟机访问Windows 10主机的NVIDIA GPU?
兄弟,我明白你现在的困扰——光把VirtualBox加到NVIDIA控制面板的程序列表里肯定不够,VirtualBox的GPU虚拟化机制和你想的不一样。下面我给你一步步梳理可行的方案,注意有些步骤需要硬件和BIOS支持,耐心跟着来:
一、先确认硬件和BIOS的基础支持
VirtualBox要实现GPU直通,首先得你的主机硬件允许:
- 重启你的HP ZBook 17 G6,进入BIOS(一般按F10或者Esc,看开机提示),找到VT-d(Intel的IOMMU技术)选项,把它开启。这个是PCIe直通的核心前提,没开的话后面全白搭。
- 同时确认BIOS里的Secure Boot是关闭的,不然Ubuntu安装NVIDIA驱动可能会出权限问题。
二、VirtualBox虚拟机的基础配置调整
先把虚拟机关掉,做这些基础设置:
- 打开虚拟机设置 → 系统 → 处理器:勾选「启用PAE/NX」,如果有「启用嵌套VT-x/AMD-V」也勾上,这能提升虚拟化的兼容性。
- 切换到显示 → 显卡控制器:选择「VMSVGA」(Ubuntu 22推荐这个,比VBoxSVGA更适配),然后把显存拉到至少256MB(如果主机内存够,拉到512MB更好),最后勾选「启用3D加速」。
三、尝试PCIe直通(最直接的方案,但有局限性)
这是让虚拟机直接接管NVIDIA GPU的方法,但要注意:一旦直通成功,主机就没法用这个GPU了,只能二选一。步骤如下:
- 主机端解绑NVIDIA GPU:
- 打开Windows的「设备管理器」,找到「显示适配器」里的NVIDIA Quadro T1000,右键选择「卸载设备」,一定要勾选「删除此设备的驱动程序软件」,然后点击确定。
- 卸载完后,右键这个设备(如果还在列表里),选择「禁用设备」,确保主机不再占用它。
- VirtualBox添加PCI直通设备:
- 回到VirtualBox,选中你的Ubuntu虚拟机,点击「设置」→ PCI直通:
- 点击右侧的「添加」按钮,在列表里找到NVIDIA Quadro T1000的设备(一般会显示设备名称),选中添加。
- 如果找不到,可在Windows管理员命令提示符里运行
pnputil /enum-devices /class Display,找到对应设备的「InstanceId」后手动添加(不过一般列表里能直接看到)。
- 回到VirtualBox,选中你的Ubuntu虚拟机,点击「设置」→ PCI直通:
- 虚拟机内安装NVIDIA驱动:
- 启动Ubuntu虚拟机,打开终端,先更新系统:
sudo apt update && sudo apt upgrade -y - 然后安装适配Ubuntu 22的NVIDIA稳定版驱动:
sudo apt install nvidia-driver-535 - 安装完成后重启虚拟机,重启后打开终端输入
nvidia-smi,如果能显示GPU的详细信息,说明成功了!
- 启动Ubuntu虚拟机,打开终端,先更新系统:
四、如果直通失败(NVIDIA反虚拟化检测)怎么办?
NVIDIA的专业卡(比如你的T1000)一般比消费级显卡宽松,但偶尔还是会检测到虚拟化环境拒绝安装驱动。这时候可以试试修改虚拟机配置绕过检测:
- 关闭虚拟机,找到虚拟机的配置文件(一般在
C:\Users\你的用户名\VirtualBox VMs\Ubuntu虚拟机名称目录下的.vbox文件),用记事本打开它。 - 在
<Machine>标签的末尾,添加这段XML代码:<ExtraData> <ExtraDataItem name="VBoxInternal/Devices/pci/0/Config/VirtualizedPCI" value="0"/> </ExtraData> - 保存后重启虚拟机,再尝试安装NVIDIA驱动。
五、替代方案:如果直通不可行
要是以上方法都不行,还有个折中方案——用远程桌面把主机GPU的计算结果传到虚拟机:
- 在Windows主机上确保NVIDIA驱动正常,程序能调用GPU运行。
- 在Ubuntu虚拟机里安装RDP客户端(比如
remmina),连接到主机桌面,然后在主机上运行需要GPU的程序,虚拟机里就能看到实时结果。虽然不是虚拟机直接访问GPU,但能满足不少需求。
备注:内容来源于stack exchange,提问作者I Z




