applescript 可通过调用 system_profiler、defaults 和 displayplacer 等工具控制 macos 显示设置,如切换镜像/扩展模式、调整多屏布局,但无法直接修改 dpi 或刷新率,需配合权限配置与稳定性处理。

AppleScript 可以用来控制 macOS 系统的显示设置,比如切换显示器排列、启用/禁用外接屏、调整分辨率或旋转方向。但需注意:AppleScript 本身无法直接修改底层显示参数(如 DPI 或刷新率),它主要通过调用系统内置工具(如 system preferences、defaults 命令)或调用 shell 脚本间接实现控制,部分操作还需配合 displayplacer 这类第三方命令行工具才能稳定生效。
基础显示状态查询与切换
可通过 AppleScript 获取当前活跃显示器数量及主屏标识,并触发“镜像显示”或“扩展桌面”切换:
- 使用
do shell script "system_profiler SPDisplaysDataType | grep Resolution"快速查看分辨率信息 - 用
do shell script "defaults read /Library/Preferences/com.apple.windowserver.plist"查看系统级显示配置(需管理员权限) - 切换镜像模式可调用:
do shell script "sudo defaults write /Library/Preferences/com.apple.windowserver.plist DisplaySettings -dict-add 'MirrorMode' -bool YES",之后重启窗口服务(sudo killall -HUP WindowServer)
借助 displayplacer 实现精准多屏控制
displayplacer 是一个开源命令行工具,能精确设置每块显示器的位置、缩放、旋转和主屏状态,AppleScript 可调用它完成复杂布局切换:
Apple Silicon AI — 在 Mac Studio、Mac Mini、MacBook Pro 和 Mac Pro 上运行大语言模型(LLM)、图像生成、语音转文字及嵌入(embeddings)。将您的 Apple Silicon 设备…
- 先通过
brew install displayplacer安装(需 Homebrew) - 运行
displayplacer list获取当前显示器唯一 ID(如id:9F123456-7890-ABCD-EF12-34567890ABCD) - 保存常用布局为脚本变量,例如:
set layoutCmd to "displayplacer 'id:9F123456... res:1920x1080 hz:60 color_depth:8 scaling:on origin:(0,0) degree:0' 'id:A1B2C3D4... res:3840x2160 hz:60 origin:(1920,0) degree:0'" - 执行:
do shell script layoutCmd
自动化触发场景示例
可将显示控制脚本绑定到特定事件,提升工作流效率:
- 连接/断开某型号 HDMI 显示器时,自动加载对应布局(配合
launchd监听 I/O 注册表变化,或用USBMap类工具触发) - 在 Alfred 或 Keyboard Maestro 中设置快捷键,一键切换“会议模式”(仅内建屏 + 关闭所有外接屏)或“设计模式”(双 4K 屏横向扩展)
- 结合日历事件,在每日 9:00 自动启用主办公屏布局,18:00 恢复便携模式(需启用全盘访问权限并允许 AppleScript 控制系统)
权限与稳定性注意事项
macOS 对显示设置的自动化限制较严,尤其在 Monterey 及更新版本中:
- 必须在“系统设置 > 隐私与安全性 > 自动化”中授予对应脚本或终端工具“控制显示器”的权限
- 部分操作(如修改主屏)需重启 Dock 或 WindowServer,建议加
delay 0.5避免指令冲突 - 避免在睡眠/唤醒瞬间执行,可加入简单判断:
if (do shell script "pmset -g | grep 'Sleep Now'") is "" then ... - 推荐将核心逻辑封装为独立 shell 脚本,AppleScript 仅负责调用和错误提示,便于调试和复用










