我正在尝试将我的 USB 网络摄像头直通到由 virt-manager 管理的 Windows 7 Enterprise x86-64 QEMU/KVM 客户机中。
首先我查找总线/设备 ID:
$ lsusb
Bus 002 Device 008: ID 046d:0825 Logitech, Inc. Webcam C270
[...]
然后我在 virt-manager 中打开正在运行的客户端,单击Hardware Details > Add Hardware > USB Host Device
并选择正确的设备 ID。这里出现了第一个奇怪之处:virt-manager 没有显示设备名称,只有 ID。
单击“完成”后,Windows 7 立即检测到插入的新设备并为其安装驱动程序。遗憾的是,它将其检测为“NEC USB HUB”,而不是网络摄像头。
我的问题是:
- 如何正确地将设备从 Linux 传递到 Windows,以便它在那里显示为网络摄像头?
主机操作系统是 Ubuntu 14.04 x86-64,客户机操作系统是 Windows 7 Enterprise x86-64,都安装了所有更新。
Ubuntu 运行 Linux 3.13.0-43-generic、virt-manager 0.9.5-1ubuntu3 和 qemu 2.0.0+dfsg-2ubuntu1.9。
在安装 Windows 时,我安装了 Windows virtio 驱动程序版本 0.1-94,并在安装 Windows 后添加了 Windows spice-guest-tools 版本 0.74。客户机显示的另一个奇怪现象是安装 spice-guest-tools 后无法关机。
这Stack Overflow 上已经有人问过同样的问题,这似乎不是提出此类问题的错误地方。
答案1
出现此问题的原因是虚拟 USB 集线器默认为 USB 1.1 - 如果您在启动 VM 之前将其更改为 USB 2,相机应该可以正常显示。但 USB 3+ 设备仍然会导致问题。
答案2
检查此链接:https://bugzilla.redhat.com/show_bug.cgi?id=1135488,引自那里:
USB 设备太多。四个 Spice USB 重定向插槽。一个 USB 平板电脑。只留下一个 USB 端口空闲,qemu 会自动插入 USB 集线器以避免 USB 端口用完。这就是“nec usb hub”的由来。由于模拟的 USB 集线器支持 USB 1.1,因此只有网络摄像头最终位于一个慢速端口上。这就是速度不匹配的来源,这也是网络摄像头未显示在客户机中的根本原因。
解决方案可能是:删除几个 USB 重定向器设备,
答案3
使用 USB 重定向器时,网络摄像头、USB 音频接口等设备通常无法正常工作。将网络摄像头添加为 USB 主机设备也无济于事。在回答这个问题时,我发现的唯一可行的解决方案是使用可以连接网络摄像头的附加 PCIe 设备(PCIe 卡直通解决方案)。也许附加的 PCIe Gen3 x4 USB 3.2 卡必须具有 IOMMU 支持才适合您。当然,很大程度上取决于您的系统架构。
您可能还会遇到客户机冻结的情况。请参阅此处的故障排除指导,即:我的客户机冻结,因此我的 USB 音频接口崩溃(使用额外的 PCIe Gen3 x4 USB 3.2 卡的直通解决方案)。