Mac电脑自动化Usbmux不可用解决方案

        当Mac电脑升级最新版本后,使用Adb或其他连接软件因为涉及到Usbmux插件时;

可能会遇到“usbmuxd服务不可用,在linux和mac下usbmuxd路径必须为/var/run/usbmuxd”问题

当遇到这种问题时,代表当前电脑的Usbmuxd不知道为什么不可用了,这个时候可以优先检查自己的Usbmuxd服务;

通过

ps aux | grep usbmuxd

对自己当前服务进行检查是否存在,如果存在还为不可用时;可以采用如下方案

方案一:重置和重新启动 usbmuxd 服务

在 macOS 中,usbmuxd 的启动和管理是通过 launchctl 来控制的。可以尝试先卸载并重新加载该服务:

卸载 usbmuxd 服务:

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.usbmuxd.plist

重新加载 usbmuxd 服务:

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.usbmuxd.plist

确认 usbmuxd 已启动:

sudo launchctl list | grep usbmuxd

如果该命令有输出表示 usbmuxd 已启动,状态应该为 0(表示正常运行)

方案二:使用 Homebrew 安装 usbmuxd(替代系统版本)

该方案需要考虑自己当前电脑的系统与Xocde版本;用我自己电脑举例,在安装libimobiledevice过程中系统就提示我Xcode版本过低;需要进行升级;

macOS 系统自带的 usbmuxd 服务有时可能出现兼容性问题,可以考虑使用 Homebrew 安装一个独立版本,避免与系统版本冲突:

安装 libimobiledeviceusbmuxd

这两个包包含独立的 usbmuxd 版本,并且会以独立进程运行,不依赖系统自带的守护进程。

brew install --HEAD usbmuxd
brew install --HEAD libimobiledevice

启动 Homebrew 版本的 usbmuxd

brew services start usbmuxd

检查服务状态:

brew services list

确认 usbmuxdstarted 状态运行。

使用 Homebrew 的 usbmuxd 调试:

尝试使用 libimobiledevice 工具测试连接:

idevice_id -l

如果可以正确识别连接的设备,表示 Homebrew 版本的 usbmuxd 正常工作

方案三:获取当前电脑usbmuxd安装目录;创建软连接进行指向

查找 usbmuxd 可执行文件:

使用 find 命令从根目录开始查找所有名为 usbmuxd 的文件或可执行文件:

sudo find / -name "usbmuxd" 2>/dev/null

/:表示从根目录开始查找。

-name "usbmuxd":表示查找文件名为 usbmuxd 的文件。

2>/dev/null:表示忽略查找过程中的错误信息(如权限不足)。

运行这条命令后,系统会返回所有名为 usbmuxd 的文件路径。可能的路径包括:

/usr/local/bin/usbmuxd

/opt/homebrew/bin/usbmuxd

/usr/libexec/usbmuxd

/var/lib/usbmuxd

如果路径被找到:

记录找到的完整路径(例如 /usr/libexec/usbmuxd),后续可以使用该路径进行软链接设置。

不同电脑查出来的目录不一样我们的目的主要是为了找到可以挂载软连接的目录如我的为

/Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd /System/Library/Templates/Data/Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd /System/Volumes/Data/Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd /System/Volumes/Data/System/Library/Templates/Data/Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd /System/Volumes/Data/private/var/run/usbmuxd /private/var/run/usbmuxd

确认 usbmuxd 服务的实际路径

要确认哪一个路径是系统当前运行的 usbmuxd 服务使用的,可以检查现有的 /var/run/usbmuxd 的链接指向:

ls -l /var/run/usbmuxd

输出类似于:

lrwxr-xr-x  1 root  wheel  23 Sep 26 11:30 /var/run/usbmuxd -> /private/var/run/usbmuxd

删除现有的 /var/run/usbmuxd(如果确定不再使用)

首先,停止 usbmuxd 服务:

sudo launchctl stop com.apple.usbmuxd

然后删除现有的 /var/run/usbmuxd

sudo rm -f /var/run/usbmuxd
创建软链接指向 usbmuxd 可执行文件路径(如 /Library/.../usbmuxd

假设找到的 usbmuxd 可执行文件路径为 /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd,则创建软链接:

sudo ln -s /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd /var/run/usbmuxd

启动 usbmuxd 服务

创建链接后,重新启动 usbmuxd 服务:

sudo launchctl start com.apple.usbmuxd

检查 /var/run/usbmuxd 的权限问题(如果软链接无效)

如果 /var/run/usbmuxd 的权限不正确(如 socket 文件无法被其他进程访问),可能会导致服务不可用。可以尝试修改 /var/run/usbmuxd 的权限:

sudo chmod 777 /var/run/usbmuxd

777 权限表示所有用户(所有者、组、其他用户)都有读、写、执行的权限。

这种权限较为宽松,但在某些调试场景下有助于排查权限问题。

五一放假,出门在外,有时候没有WiFi,没法通过无线ssh到iOS中调程序,怎么办呢?好在大神Nikias Bassen(即@pimskeks5)写了一个可以把本地OSX/Windows端口转发到远程iOS端口的工具usbmuxd16,使我们能够通过USB连接线ssh到iOS中,大大增加了ssh连接的速度,也方便了那些没有WiFi的朋友。下面我们就简单介绍一下怎么使用神器usbmuxd。(注:以下操作在OSX中进行,Windows用户请自行安装python环境) 下载usbmuxd 从这里下载usbmuxd(http://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz),解压到本地。我们要用到的只有python-client目录下的tcprelay.py和usbmux.py两个文件,把它们放到同一个目录下,如笔者的 /Users/snakeninny/Code/USBSSH/ 使用usbmuxd usbmuxd的用法比较简单,在Terminal中输入 /Users/snakeninny/Code/USBSSH/tcprelay.py -t 远程iOS上的端口:本地OSX/Windows上的端口 即可把本地OSX/Windows上的端口转发到远程iOS上的端口,如 /Users/snakeninny/Code/USBSSH/tcprelay.py -t 22:2222 可把本地的2222端口转发到iOS上的22端口,那么直接 ssh root@localhost -p 2222 即可ssh到iOS中。 使用场景举例 完全脱离WiFi,使用USB连接到iOS,用lldb调试SpringBoard。 i) 把本地2222端口转发到iOS的22端口 /Users/snakeninny/Code/USBSSH/tcprelay.py -t 22:2222 ii) ssh过去并用debugserver attach到SpringBoard ssh root@localhost -p 2222 debugserver *:1234 -a "SpringBoard" iii) 把本地1234端口转发到iOS的1234端口 /Users/snakeninny/Code/USBSSH/tcprelay.py -t 1234:1234 iv) 用lldb开始调试 lldb process connect connect://localhost:1234
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值