我正在使用带有 KVM(基于内核的虚拟化)的 QEMU,并且我想将我的虚拟机连接到我的物理 KVM(键盘、视频和鼠标)交换机。
GPU 直通会是一个选择,但我的服务器机箱中没有足够的空间 + 主板上也没有足够的 PCIe 插槽来做到这一点。
我的想法是通过使用 USB<>VGA 转换器(PCIe 直通 + USB PCIe 卡)来解决这个问题。
但是,据我所知,BIOS 无法使用这样的适配器,因为 BIOS 缺少所需的驱动程序。
好的,那么有没有办法解决这个限制并以某种方式告诉 QEMU 它应该为 VM 提供一个 USB<>VGA 适配器作为“原生”VGA 设备?
我唯一想实现的就是能够使用物理 KVM 切换器“切换”到虚拟机。我并不真正关心如何实现这一点。
答案1
我很高兴地告诉大家我找到了解决方案那 似乎上班。
这是我所做的:
1.) 找到一个适用于 Linux 的 USB<>VGA 适配器。这些适配器很难买到,而且有些非常昂贵(+60 美元)。不过,我找到了一个便宜的,虽然有点慢,但似乎可以用:USB转VGA来自 i-tech。
2.) 进行初步测试时,我使用 USB-passthrough 而不是 PCIe-passthrough,而且似乎运行良好:
在主机上,识别 USB<>VGA 适配器连接到的端口:
$ lsusb -tv
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
ID 1d6b:0003 Linux Foundation 3.0 root hub
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 480M
ID 1d6b:0002 Linux Foundation 2.0 root hub
|__ Port 3: Dev 4, If 0, Class=Human Interface Device, Driver=usbfs, 1.5M
ID c0f4:01b0
|__ Port 3: Dev 4, If 1, Class=Human Interface Device, Driver=usbfs, 1.5M
ID c0f4:01b0
|__ Port 5: Dev 3, If 0, Class=Vendor Specific Class, Driver=usbfs, 480M
ID 17e9:02ee DisplayLink
这里我们可以看到适配器位于总线 1、端口 5 上。
使用这些数字来指示 QEMU 将它们传递:
qemu-system-x86_64 \
-enable-kvm \
-cpu host \
[... more config ...] \
-usb \
-device usb-host,hostbus=1,hostport=5
重要的部分是-usb
和-device
。
最后,(我花了一段时间才找到这个)为了使其工作,将 VM 内的 Linux 参数更改为:
nomodeset fbcon=map:1 vt.default_utf8=0
(来源)
/etc/default/grub
如果您使用 grub,您可以更改里面的 linux 内核参数。
vt.default_utf8=0
在写作时我不完全确定它的用途,也许可以省略。
但是,如果没有这些内核参数,它将无法与 Ubuntu Server(已测试 22.04.01 LTS)一起使用。