ESXI 主机显卡和USB设备直通

ESXI GPU and USB device passthrough

Posted by alovn on March 26, 2023

对于一台ESXI上的虚拟机,如果想要直接通过显示器输出、连接USB键盘鼠标或蓝牙使用其它外设,那么可以通过设备直通实现。

显卡直通

显卡直通的配置比较简单,步骤如下:

  1. 在设备管理里找到显卡,点击【切换为直通】,然后需要重启ESXI主机。
  2. 在虚拟机配置里添加PCI设备,并选择你要直通的显卡。
  3. 在虚拟机高级选项中配置参数 hypervisor.cpuid.v0 = FALSE,该参数是为了欺骗虚拟机系统,使其认为不是运行在虚拟机中。
  4. 启动并进入虚拟机内安装对应的显卡驱动(Windows设备会自动安装对应的驱动)。

完成以上的操作后,就可以直接将显示器的连接线(HDMI或DP)连接到对应的显卡上。

USB设备直通

首先需要通过ssh连接到ESXI主机,执行 lsusb 命令查看USB设备信息,并记录下对应的厂商和产品编号, 例如:1a2c:2d23。

/etc/vmware/config 文件中添加要直通的USB设备信息,例如:

1
2
3
usb.quirks.device0 = "0x1a2c:0x2d23 allow"
usb.quirks.device1 = "0x046d:0xc05a allow"
usb.quirks.device2 = "0x0a12:0x0001 allow"

注意需要在lsusb命令获取的厂商和产品编号前加上0x前缀,多个设备的话 usb.quirks.device0 后面的编号递增就可以了。

以上的设置后,下次若再重新启动ESXI时, ESXI kernel还是会获取设备的控制权,这就需要在ESXI启动引导中禁用ESXI kernel对以上设备的获取控制权。修改 /bootbank/boot.cfg 在启动参数 kernelopt 后面加上以下参数:

1
CONFIG./USB/quirks=0x1a2c:0x2d23::0xffff:UQ_KBD_IGNORE:0x046d:0xc05a::0xffff:UQ_KBD_IGNORE:0x0a12:0x0001::0xffff:UQ_KBD_IGNORE

注意上面参数中的USB设备厂商和产品编号需要替换为自己的,保存后重新启动ESXI主机。

然后在对应虚拟机的高级选项中添加配置参数

1
2
3
4
usb.generic.allowHID = TRUE
usb.quirks.device0 = 0x1a2c:0x2d23 allow
usb.quirks.device1 = 0x046d:0xc05a allow
usb.quirks.device2 = 0x0a12:0x0001 allow

接着配置虚拟机:添加其它设备 -> 选择USB设备,选择对应的USB设备就可以启动虚拟机了。

完成以上的配置后,就可以直接把显示器的输出给虚拟机使用了,并且可以通过键盘鼠标控制虚拟机,这样虚拟机就和一台真实的机器没什么区别了。

建议可以直接直通一个USB的蓝牙适配器,这样就可以直接通过蓝牙连接多种外设了。