AppleScript 无法直接触发 macOS 立即锁定屏幕,但可通过调用 /System/Library/CoreServices/CGSession -suspend 实现最可靠锁定;若不可用,则退而启动带密码保护的屏幕保护程序,并可封装为 lockScreen() 函数用于自动化场景。

AppleScript 本身无法直接触发 macOS 的“立即锁定屏幕”操作(比如像快捷键 Control + Command + Q 那样),但它可以通过调用系统命令或 AppleScript 底层接口间接实现。最可靠、兼容性最好的方式是使用 pmset 命令配合屏幕保护程序启动,或直接调用 CGSession —— 这是苹果官方支持的锁定会话工具。
使用 CGSession 锁定当前用户会话
CGSession 是 macOS 内置的私有命令行工具(位于 /System/Library/CoreServices/),专用于控制用户会话,包括锁定。它不依赖图形界面状态,响应快且稳定,适用于自动化脚本。
- 在 AppleScript 中执行:
do shell script "/System/Library/CoreServices/CGSession -suspend" - 注意:该命令需要当前用户有执行权限(通常默认满足),无需 sudo;但 macOS Ventura 及更新版本中,部分安全策略可能限制其调用,建议在「系统设置 → 隐私与安全性 → 完全磁盘访问」中为脚本运行环境(如 Script Editor 或自动化的启动项)授权
通过启动屏幕保护并启用密码保护来模拟锁定
若 CGSession 不可用(如某些受管设备禁用了该工具),可退而求其次:强制激活已启用密码保护的屏幕保护程序。前提是已在「系统设置 → 桌面与屏幕保护程序 → 屏幕保护程序」中开启「开始前需输入密码」。
使用 inotes CLI 从终端管理 Apple Notes。当需要在 macOS 的 Notes.app 中列出、读取、创建、编辑、删除或搜索备忘录时使用。
- AppleScript 示例:
do shell script "open /System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app" - 此方法依赖屏幕保护配置,延迟略高(约1–2秒),且若未开启密码保护则无法真正“锁定”,仅黑屏
- 可配合
defaults write提前确保设置(适合部署场景),例如:
do shell script "defaults -currentHost write com.apple.screensaver askForPassword -int 1"
封装为可重复调用的 AppleScript 函数
把锁定逻辑封装成 handler,方便在定时任务、热键触发或条件判断中复用:
- 示例代码:
on lockScreen()
try
do shell script "/System/Library/CoreServices/CGSession -suspend"
on error
-- 回退方案:启动屏幕保护
do shell script "open /System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app"
end try
end lockScreen
lockScreen() -- 调用即执行 - 保存为 .scpt 文件后,可通过 Automator、快捷键工具(如 FastScripts)、或 shell 命令
osascript /path/to/script.scpt触发
配合触发条件实现自动锁定
单独锁定没意义,关键在于“何时锁”。常见自动化场景:
-
闲置超时锁定:用
idle time获取当前闲置秒数(需 Accessibility 权限),结合 repeat 循环检测,达到阈值后调用 lockScreen() -
Wi-Fi 断开时锁定:用
do shell script "networksetup -getinfo Wi-Fi | grep 'IP address'"判断连接状态,断开即锁 -
特定应用退出后锁定:监听进程变化(如 Zoom 结束会议后),用
do shell script "pgrep -x 'zoom.us' > /dev/null"检查

















