mac无法原生实现“插电即关机”,需通过launchd配合ioreg轮询检测外部电源接入,延时5秒后执行关机;推荐使用后台循环脚本每2秒检测,确认ac连接后触发关机。

你想让Mac在插上充电器的瞬间自动关机,比如防止误触电源适配器导致设备意外唤醒后耗电——这个需求不能靠常规定时关机实现,macOS原生不支持“一插电就关机”的触发逻辑,但可通过终端命令配合电源状态检测变通达成。
用pmset命令监听电源接入并立即关机
这一步直接调用系统底层电源管理工具,当检测到AC电源连接时,强制执行关机指令。它不依赖用户登录,也不需要图形界面,但需提前配置并保持后台运行。
打开“终端”(Command + 空格 → 输入“终端” → 回车)。
输入以下命令启用电源事件响应:【sudo pmset -a acwake 0】。该设置禁止Mac在插电时自动唤醒,为后续关机动作铺路;若已设为1,此步必须执行,否则插电后会先唤醒再关机,造成短暂亮屏。
接着输入命令注册关机动作:【sudo pmset -a powermode 1 shutdown】。注意:此命令在macOS 13及以后版本中已被弃用,实际生效需配合launchd脚本;单纯执行该行不会起作用。
因此必须改用可靠路径:创建一个launchd后台任务,监听IOKit电源变化事件。这需要编写plist文件并加载,操作稍复杂但完全原生、无需第三方工具。
创建launchd服务监听USB-C/电源接入
这是目前唯一稳定实现“插电即关机”的原生方法,适用于M系列和Intel Mac,全程在终端完成,不弹窗、不依赖登录状态。
第一步:用nano创建配置文件,输入:【sudo nano /Library/LaunchDaemons/com.apple.autooff-on-power.plist】。
第二步:粘贴以下内容(注意替换
第三步:保存退出(Ctrl+O → 回车 → Ctrl+X),然后加载服务:【sudo launchctl load /Library/LaunchDaemons/com.apple.autooff-on-power.plist】。
⚠️ 注意:该plist实际监听的是系统挂载事件,不是纯电源信号;要真正捕获“插电”动作,需配合IOKit工具如ioreg轮询,但会导致持续CPU占用。因此更务实的做法是——放弃“插电即刻关机”,改用“插电后5秒内检测并关机”的折中脚本。
执行插电后延时关机的可靠脚本
方法一:使用AppleScript封装检测逻辑,避免权限反复提示
新建文本文件,命名为autooff.scpt,内容为:
tell application "System Events"
if (do shell script "ioreg -rn AppleSmartBattery | grep -q 'ExternalConnected.*Yes' && echo 1 || echo 0") is "1" then
delay 5
shut down
end if
end tell
方法二:将上述脚本转为可执行命令,放入后台循环检测
在终端中运行:【while true; do osascript autooff.scpt > /dev/null 2>&1; sleep 2; done &】。该命令每2秒检查一次是否接入外部电源,一旦确认,5秒后执行关机。
方法三:用launchd实现开机即驻留检测(推荐)
把方法二的循环命令写入shell脚本(如/autooff.sh),赋予执行权限:【sudo chmod +x /autooff.sh】,再用launchd每日启动一次该脚本即可持续监听。











