MAC USB联ipone 接触不良,反复跳

问题原因

出现反复重连的本质原因:USB供电不足!

MacBook 15年的笔记本,无论是AIr还是Pro,又或者是后续几年的产品,USB这里都存在设计缺陷导致左侧usb供电不足。

你问客服她就会让你换原装线,重置NVRAM、重置SMC之类的,没用的,就算暂时没问题,后面还是会出现问题。

解决方法

插上手机噔噔响的时候,运行一下这个命令就好了(无论是不是15年的MacBook Pro,都可以试试)。

sudo killall -STOP -c usbd

该命令是强制关闭usbd进程,但事实上,因为它是守护进程,由launcd管理,你强制关闭它,它还是会自动启动(在“活动监视器”里可以搜索usb,就能找到它),但是这样做却可以解决重连问题!

注意,该方法在重启电脑后会失效,但没关系,每次在出现这个问题时,再运行一次这个命令就好了。

方法二:建立一个双击可执行的脚本文件


上面的一行代码确实很解决问题,但是在日常使用中发现每隔几天(隔三差五,随机发生)就会出现断断续续无法充电的情况,每次都要找到终端然后找到要输入的指令,回车运行然后输入密码,太麻烦了。
下面教读者一种直接双击运行,无须输入重复程序,无须输入密码的操作。

第一步: 找一个位置新建一个脚本文件

我选择的是桌面,名字可以随便取,后缀名为.command,我创建的是usb.command
在这里插入图片描述
打开方式先暂时选用文本编辑打开,输入下面两行内容,并保存。

#!/bin/bash
sudo killall -STOP -c usbd
osascript -e 'tell application "Terminal" to quit' &
exit

shell脚本的第一行中,必须写#!/bin/bash
第二行为主要命令
最后两行为的是脚本运行完窗口可以自动关闭。可有可无,看喜好

第二步让这个文件可运行

输入代码
chmod +x 【路径】
这里路径可以直接将桌面上那个command文件拖过来。演示如下:
在这里插入图片描述
此时双击发现改脚本会跳转,自动运行,但还是要输入密码,因为sudo命令下的killall要密码。
下面解决输入密码问题。

第三步:解决运行sudo killall要输入密码问题

  1. whereis killall查到了该命令的存放路径是/usr/bin/killall
    在这里插入图片描述
  2. 复制该完整路径,然后使用下面的命令来编辑 sudoers 文件:sudo visudo
  3. 进入该文件后,按键盘上的i即进入文件编辑模式,进行编辑(insert)。
  4. 找到文件的最下面,加一行代码来开放killall的无需密码权限。代码如下:
    [用户名] ALL=NOPASSWD:/usr/bin/killall
    用户名就是读者电脑的用户名,演示如下:
    在这里插入图片描述
  5. 输入完这一行后,按esc退出编辑模式。然后按住shift打出冒号(:)再输入wq,之后回车,表示保存并退出当前文件编辑。演示如下:在这里插入图片描述

最后:双击运行那个文件即可

再也不要反反复复输入命令,然后反反复复输密码了。运行情况(如果不加自动关闭,则可以看到运行过程)如下:

不建议在脚本中直接添加用户名和密码来绕过sudo密码输入,因为这会带来严重的安全风险,比如他人可以轻易获取到你的敏感信息,导致系统被非法访问。不过,你可以通过配置sudoers文件来让特定命令无需输入密码执行,这在你之前提供的步骤中已经有提及,下面为你详细解释和说明具体做法。

配置 sudoers 文件实现无密码执行命令


visudo 是专门用来编辑 /etc/sudoers 文件的命令,它能确保文件格式正确,避免因错误编辑导致系统无法使用 sudo 命令。


  1. 获取 killall 命令路径:在终端中执行以下命令,获取 killall 命令的完整路径:


收起
bash
whereis killall


一般情况下,输出结果会是 /usr/bin/killall


  1. 编辑 sudoers 文件:在终端中执行以下命令,以安全的方式编辑 sudoers 文件:


收起
bash
sudo visudo


  1. 添加无密码执行规则:进入 visudo 编辑界面后,按 i 键进入插入模式,在文件末尾添加如下内容:


收起
plaintext
your_username ALL=NOPASSWD:/usr/bin/killall


这里的 your_username 要替换为你实际的用户名。添加这行规则后,系统会允许你使用 sudo 执行 killall 命令时无需输入密码。


  1. 保存并退出:添加完成后,按 Esc 键退出插入模式,然后输入 :wq 并回车,保存并退出 visudo 编辑界面。


完成上述配置后,当你运行脚本时,执行 sudo killall -STOP -c usbd 就不会再提示输入密码了。

示例脚本运行测试


完成配置后,你可以运行之前的脚本进行测试:


收起
bash
#!/bin/bash
sudo killall -STOP -c usbd
osascript -e 'tell application "Terminal" to quit' &
exit


将脚本保存为可执行文件(例如 usb_fix.command),并赋予执行权限:


收起
bash
chmod +x usb_fix.command


之后直接双击该脚本文件,就可以自动执行命令且无需输入密码。
#!/bin/bash sudo killall -STOP -c usbd osascript -e 'tell application "Terminal" to quit' & exit
将这个脚本加入mac自启动
要将你提供的脚本设置为 Mac 自启动,可以通过以下两种常见方法实现:

方法一:使用 “登录项”(适合简单脚本)


这种方法简单直观,适合不涉及复杂权限或系统级操作的脚本。


  1. 确保脚本可执行:打开终端,使用 chmod 命令为脚本添加可执行权限。假设脚本文件名为 usb_fix.command 且位于桌面上,执行以下命令:


收起
bash
chmod +x ~/Desktop/usb_fix.command


  1. 添加到登录项
    • 点击屏幕左上角的苹果菜单,选择 “系统偏好设置”。
    • 在系统偏好设置中,点击 “用户与群组”。
    • 选择当前使用的用户账户,然后点击 “登录项” 标签。
    • 点击登录项窗口左下角的 “+” 按钮,在弹出的文件选择窗口中找到并选中你的脚本文件(如 usb_fix.command),然后点击 “添加”。
  2. 调整启动设置(可选):你可以在登录项列表中勾选或取消勾选 “隐藏” 选项,以决定脚本启动时是否在后台运行。

方法二:使用 LaunchAgents(适合需要更复杂控制的脚本)


LaunchAgents 是 macOS 中用于管理用户级守护进程和启动项的机制,适合需要更复杂控制或权限设置的脚本。


  1. 创建一个 LaunchAgent 配置文件:打开终端,使用以下命令创建并编辑一个 .plist 文件。假设脚本名为 usb_fix.command 且位于桌面上,执行以下命令创建并编辑配置文件:


收起
bash
nano ~/Library/LaunchAgents/com.yourname.usb_fix.plist


在打开的文本编辑器中,输入以下内容:


收起
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.yourname.usb_fix</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>/Users/yourusername/Desktop/usb_fix.command</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>


注意:将 yourname 替换为你自定义的名称,yourusername 替换为你的实际用户名。
2. 保存并加载配置文件


  • 按 Ctrl + X,然后按 Y 确认保存,最后按 Enter 退出编辑器。
  • 在终端中执行以下命令加载配置文件:


收起
bash
launchctl load ~/Library/LaunchAgents/com.yourname.usb_fix.plist


完成上述操作后,脚本就会在 Mac 启动时自动运行。如果之后你想停止自动运行,可以通过以下方式操作:


  • 对于使用 “登录项” 的方法,在 “用户与群组” 的 “登录项” 中取消选中相应的脚本。
  • 对于使用 LaunchAgents 的方法,在终端中执行以下命令卸载配置文件:


收起
bash
launchctl unload ~/Library/LaunchAgents/com.yourname.usb_fix.plist

除了这两种方法,还有其他将脚本加入 Mac 自启动的方式吗?
如何在 LaunchAgents 中设置脚本的运行时间和条件?
如何查看 Mac 自启动项目列表?