applescript可通过system events更换macos桌面背景,但需授权辅助功能与完全磁盘访问权限;支持单图设置、填充模式控制(fill/fit/stretch/center/tile)及多图随机轮换,路径须为绝对路径且避开中文字符。

AppleScript 可以直接调用 macOS 系统的偏好设置来更换桌面背景,但需注意:从 macOS Catalina(10.15)起,系统加强了自动化权限管控,脚本首次运行时会弹出“允许辅助功能”或“完全磁盘访问”提示,必须手动授权才能生效。
获取并设置单张图片为桌面背景
以下脚本将指定路径的图片设为当前桌面壁纸(适用于单显示器,且不更改填充方式):
set theImage to "/Users/yourusername/Pictures/wallpaper.jpg"
tell application "System Events"
tell every desktop
set picture to theImage
end tell
end tell说明:
• 路径必须是完整绝对路径(不能用 ~ 或相对路径)
• 图片格式需为 macOS 支持的类型(如 JPG、PNG、HEIC)
• 若路径含空格或特殊字符,AppleScript 通常能自动处理,但建议避免使用中文路径以防潜在编码问题
切换多张壁纸并设置填充方式
若想控制缩放模式(如“填充屏幕”“适应屏幕”“拉伸”),需配合 desktop picture fill 属性:
Apple Silicon AI — 在 Mac Studio、Mac Mini、MacBook Pro 和 Mac Pro 上运行大语言模型(LLM)、图像生成、语音转文字及嵌入(embeddings)。将您的 Apple Silicon 设备…
set theImage to "/Users/yourusername/Pictures/photo.png"
tell application "System Events"
tell current desktop
set picture to theImage
set desktop picture fill to "fill" -- 可选值:"fill", "fit", "stretch", "center", "tile"
end tell
end tell常见填充值含义:
• fill:等比放大至填满,可能裁剪边缘
• fit:等比缩小至全部可见,留黑边
• stretch:强制拉伸填充,可能变形
• center:居中显示,不缩放
• tile:平铺重复
批量轮换壁纸(定时+随机)
AppleScript 本身不支持定时任务,需结合 macOS 的 launchd 或终端 cron 触发。更实用的做法是:用 AppleScript 生成一个“轮换函数”,再通过快捷键或 Automator 快速执行。
例如,把多张图路径存入列表,随机选取一张:
set imageList to {"/Users/yourusername/Pictures/1.jpg", "/Users/yourusername/Pictures/2.png", "/Users/yourusername/Pictures/3.heic"}
set randomImage to item (random number from 1 to (count of imageList)) of imageList
<p>tell application "System Events"
tell current desktop
set picture to randomImage
set desktop picture fill to "fill"
end tell
end tell</p>使用建议:
• 将该脚本保存为 .scpt 文件,双击运行即可切换
• 可拖入 Dock 或绑定到快捷键(通过“快捷键”→“服务”或第三方工具如 FastScripts)
• 若需真正自动轮换(如每30分钟一次),推荐用 Automator 创建“日常任务”工作流,再用 launchd 启动
权限与兼容性注意事项
macOS 10.14+ 默认阻止 AppleScript 修改系统设置,必须提前开启权限:
- 前往「系统设置」→「隐私与安全性」→「辅助功能」,勾选 Script Editor 和你运行脚本的环境(如 Terminal、Automator)
- 如仍失败,还需在「完全磁盘访问」中添加对应应用
- AppleScript 对多显示器支持有限:上述脚本默认作用于“当前桌面”,若需指定某显示器,需用
desktop 1、desktop 2等索引(顺序按系统设置中排列) - macOS Ventura 及更新版本中,部分旧式 System Events 命令可能响应变慢,建议脚本开头加
delay 0.1避免偶发失败










