You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Qemu USB直通iPhone反复断开问题求助

解决iPhone SE直通MacOS Catalina虚拟机的断开问题

我之前帮朋友处理过几乎一模一样的场景,结合你的测试结果(Windows虚拟机正常、iPod能直通Mac),问题应该出在MacOS虚拟机对iPhone的USB握手逻辑和Fedora宿主机的USB管理冲突上,给你几个可以尝试的解决方向:

1. 切换USB控制器为USB2.0(EHCI)

MacOS对USB3.x的虚拟化兼容性有时候会有玄学问题,试试把iPhone插在宿主机的USB2.0端口,或者修改虚拟机的libvirt配置,将USB控制器从XHCI换成EHCI:
打开虚拟机的XML配置文件(可以用virsh edit <虚拟机名称>),找到USB控制器的节点,修改为:

<controller type='usb' index='0' model='ehci'>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</controller>

保存后重启虚拟机再测试。

2. 固定iPhone的USB端口绑定

每次直通时USB端口号递增,说明libvirt在自动分配新端口,这可能导致MacOS识别设备时出错。可以在虚拟机配置里给iPhone指定固定的USB端口:
<devices>节点下添加或修改你的iPhone主机设备配置:

<hostdev mode='subsystem' type='usb' managed='yes'>
  <source>
    <vendor id='0x05ac'/>
    <product id='0x12a8'/>
    <address bus='3' port='1'/> <!-- 这里填你dmesg里看到的初始总线和端口号 -->
  </source>
  <address type='usb' bus='0' port='1'/> <!-- 虚拟机内固定端口 -->
</hostdev>

这样宿主机和虚拟机都会固定使用指定端口,避免自动分配导致的断开。

3. 彻底禁用宿主机的苹果设备管理服务

除了udev规则和gvfs-gphoto2,宿主机的usbmuxd服务是专门管理苹果USB设备的,它会和虚拟机抢设备。执行以下命令停止并禁用该服务:

sudo systemctl stop usbmuxd
sudo systemctl disable usbmuxd
sudo systemctl mask usbmuxd

操作后重新连接iPhone再尝试直通。

4. 检查MacOS虚拟机的USB驱动补丁

如果你的MacOS虚拟机是黑苹果配置,需要确保加载了合适的USB驱动(比如USBInjectAll.kext),并且针对虚拟机的硬件做了端口补丁。可以在MacOS里打开终端,执行:

kextstat | grep -i usb

确认USBInjectAll.kext或对应的端口补丁已经加载,没有冲突的USB驱动。如果没有加载,需要重新配置黑苹果的驱动包。

5. 调整USB直通的延迟参数

有时候MacOS需要更多时间完成设备握手,在libvirt配置里增加USB直通的延迟:
<devices>节点下添加:

<usb>
  <backend mode='usb' delay='1000'/> <!-- 延迟1秒,可根据情况调整 -->
</usb>

保存后重启虚拟机,给MacOS足够的识别时间。

另外,你可以尝试升级Fedora的libvirt和qemu到最新版本(Fedora 31可以通过COPR源获取更新包),新版本通常会修复一些USB直通的兼容性问题。

内容的提问来源于stack exchange,提问作者Martin Edlman

火山引擎 最新活动