macos原生不支持空闲自动关机,需用automator+launchd实现:每30秒检测用户活动,超时300秒无操作即关机;pmset仅能禁用睡眠,无法设置空闲关机。

你想让Mac在闲置一段时间后自动关机,避免忘记手动关机导致整夜耗电或发热,又不想依赖第三方工具——macOS原生支持基于空闲时长的自动关机,但需通过终端命令精确配置,图形界面不提供该选项。
用pmset设置空闲后自动关机
这一步必须用终端执行,系统设置里找不到“闲置关机”开关。空闲时间以秒为单位,最小值为60秒,低于此值系统会拒绝设置。
打开“终端”(Command + 空格,输入“终端”,回车)。
输入命令:sudo pmset sleep 0 → 回车 → 输入管理员密码(输入时屏幕无任何显示,正常输完按回车)。
这行命令先禁用系统默认的睡眠行为,否则空闲关机会被睡眠打断;sleep 0 表示彻底关闭自动睡眠,不是设为0秒。
接着输入:sudo pmset disablesleep 1 → 回车 → 再次输入密码。
这步强制禁用所有形式的睡眠(包括盖盖睡眠、菜单栏睡眠),确保后续关机逻辑不被干扰。
最后设置真正的空闲关机:输入 sudo pmset powerbutton 0 不起作用,正确命令是使用自定义脚本+launchd,但pmset本身不支持空闲关机——【pmset没有idle shutdown参数,所谓“空闲后关机”必须靠外部脚本实现】。
用Automator+launchd实现真·空闲倒计时关机
这是唯一可靠的方法,原理是每30秒检测一次用户活动状态(鼠标移动、键盘敲击),连续N秒无活动则触发关机。你需要创建两个文件:一个检测脚本,一个后台服务。
第一步:新建文本文件,粘贴以下内容:
#!/bin/bash
last_input=$(ioreg -c IOHIDSystem | awk '/TimeSinceLastInput/{print $NF; exit}')
if [[ $(echo "$last_input > 300" | bc -l) -eq 1 ]]; then
osascript -e 'tell app "System Events" to shut down'
fi
第二步:把文件保存为 ~/idle-shutdown.sh,然后在终端运行:chmod +x ~/idle-shutdown.sh。
第三步:创建plist服务文件,路径为 ~/Library/LaunchAgents/local.idle-shutdown.plist,内容如下:
第四步:把上面代码里的“你的用户名”替换成你Mac的实际用户名(终端输 whoami 可查),保存后执行:launchctl load ~/Library/LaunchAgents/local.idle-shutdown.plist。
快捷指令临时应急方案
如果你只需要今晚或某次会议后启用,不用长期运行,快捷指令更轻量。
方法一:打开“快捷指令”应用 → 点击右上角“+” → 选择“自动化” → “创建个人自动化” → 搜索并选择“App” → 选“任意App” → 触发条件选“退出” → 下一步 → 添加操作“等待”(设300秒)→ 再加操作“关机” → 关闭“运行前询问” → 完成。
方法二:搜索“快捷指令”内建动作“运行shell脚本”,直接粘贴检测命令,但该动作无法后台常驻,仅适合手动触发。
注意:快捷指令无法持续监听空闲状态,它只能响应App退出、时间点、位置等离散事件,【不能替代launchd做实时空闲检测】。











