当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 安装一个独立版本,避免与系统版本冲突:
安装 libimobiledevice
和 usbmuxd
:
这两个包包含独立的 usbmuxd
版本,并且会以独立进程运行,不依赖系统自带的守护进程。
brew install --HEAD usbmuxd
brew install --HEAD libimobiledevice
启动 Homebrew 版本的 usbmuxd
:
brew services start usbmuxd
检查服务状态:
brew services list
确认 usbmuxd
以 started
状态运行。
使用 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
权限表示所有用户(所有者、组、其他用户)都有读、写、执行的权限。
这种权限较为宽松,但在某些调试场景下有助于排查权限问题。