前期基于sonic部署搭建了在线云真机系统,基于成本考虑,想通过linux系统承载ios手机,也就是ios手机需要挂载在linux上,并通信,那需要用到usbmuxd,这是USB协议上实现多路TCP连接,将USB通信抽象为TCP通信媒介。
系统:ubuntu20.04LTS、iPhone11
思路:确保宿主机中usbmuxd运行,并通过容器映射后获取信息,然后通过苹果电脑安装在iPhone上的wda操作(iPhone装完wda后就可以脱机了)
1、安装所需环境:确保宿主机安装好usbmuxd,并确认usbmuxd运行
先安装
如果安装后ps -ef | grep usbmuxd无法获取到运行情况,可以usbmuxd运行或直接重启sudo reboot,一般重启后就能发现服务已启动,见下
2、接入苹果手机:通过数据线接入苹果手机(linux–usb集线器–数据线–苹果手机),
过程可能手机会弹出是否信任窗口,点击信任即可
3、确认是否接入成功:以上操作后,可以发现拔插苹果手机,linux系统已经有显示挂载后的图标,见下则挂载进去了
思路:确保agent节点ios配置开启,WDA_BUNDLE_ID对应手机wda
系统相关:
sonic:1.5.0-release,docker部署
启动节点后观察节点上手机情况:
检测agent日志中ios启动情况:
此时进入容器,可以发现
如果usbmuxd配置有问题,则会显示
可以在确保宿主机运行usbmuxd情况下,重启agent即可,如果重启存在问题,可以参考以下解决:
可能会冲突的问题:
1、如果一直运行着的容器中是已经映射了usbmuxd,会引发以下挂载冲突的映射问题
可以先vim docker-compose.yml,先把usbmuxd映射相关的注释后,启动sonic-agent_sonic-agent_1,确认容器启动正常后,查看日志无误,再次加上usbmuxd映射后启动
2、苹果连接上了,但是投屏只转圈,然后日志显示WDA_BUNDLE_ID not in your devices,这个标识wda的标识配置有误,核对后修改agent中的WDA_BUNDLE_ID后重启即可
3、有个奇怪的现象,就是usbmuxd这个当一台苹果手机都没连接时,容器中默认无法读取到拔插后的苹果设备。
当确保ps -ef | grep usbmuxd进程存在时,可以发现,只有一台苹果接入时,拔插后,设备变成不在线,必须要至少保证拔插后存在一台设备是连接中的状态(即至少2台苹果接入)才能使得拔插后,usbmuxd不会挂掉!!!