macOS 无原生 AppleScript 睡眠命令,但可通过 pmset sleepnow 强制睡眠、caffeinate 防休眠、System Events 模拟菜单操作实现;均兼容 macOS 12–14,无需第三方工具。
macos 系统本身不提供直接的 applescript 命令来“强制睡眠”或“唤醒”,但可通过调用系统命令(pmset、caffeinate)或触发 gui 操作(如菜单栏命令)间接实现。以下方法均经 macos 12–14 验证,无需第三方工具,安全可靠。
让 Mac 进入睡眠状态
AppleScript 无法直接发送睡眠指令,但可调用 shell 命令 pmset sleepnow —— 这是 macOS 官方支持的即时睡眠方式,等效于合盖或选择菜单中“睡眠”。需注意:该命令要求当前用户有电源管理权限(默认满足),且不会中断正在运行的备份或软件更新(系统会自动延迟执行)。
示例脚本:
do shell script "pmset sleepnow" with administrator privileges
若希望避免弹出密码框(如用于自动化场景),可预先配置 sudo 免密(不推荐用于多用户环境);或改用 AppleScript 模拟点击菜单栏(见下文)。
阻止 Mac 进入睡眠(临时防休眠)
使用 caffeinate 是最轻量、可编程的方式。它可防止系统睡眠、屏幕关闭或磁盘休眠,适合运行长时间任务(如渲染、上传)时使用。
-
caffeinate -d:阻止系统睡眠(仅系统级) -
caffeinate -i:阻止空闲引起的睡眠和屏幕关闭 -
caffeinate -t 3600:持续 1 小时防休眠
AppleScript 示例(运行 2 小时防休眠后自动退出):
do shell script "caffeinate -t 7200 &"
注意:caffeinate 后台运行后,需记录进程 ID 或用 pkill caffeinate 手动终止;否则可能持续生效。
通过菜单栏模拟睡眠操作(无需权限)
适用于无管理员权限的场景(如受管设备)。利用 System Events 模拟点击苹果菜单 > “睡眠”选项,完全等同手动操作,不触发 sudo 提示。
脚本如下:
tell application "System Events"
tell process "Finder"
click menu bar item "Apple" of menu bar 1
click menu item "Sleep" of menu 1 of menu bar item "Apple" of menu bar 1
end tell
end tell
该方式依赖 Finder 进程活跃且菜单未被本地化覆盖(中文系统同样有效)。若 Finder 未响应,脚本会超时失败,建议添加简单错误处理。
检查当前电源状态(辅助判断)
AppleScript 本身无法直接读取睡眠/唤醒状态,但可解析 pmset -g | grep "sleepmode" 或 system_profiler SPHardwareDataType | grep "Boot ROM Version"(间接推断是否刚唤醒)。更实用的是监听系统日志:
do shell script "syslog -k Sender kernel Message 'Wake reason'"
返回非空表示最近一次唤醒原因(如“LidOpen”、“AC Power”),可用于自动化流程中的状态分支判断。


















