AppleScript 无法直接设置 macOS 壁纸,但可通过调用 shell 命令写入 defaults 并重启 Dock 实现单显示器静态壁纸设置,需满足本地路径、支持格式、用户解锁等前提,不支持动态壁纸或多显示器独立设置。
applescript 本身不能直接设置系统壁纸(macos 壁纸由 system preferences / system settings 管理,底层调用的是 nsuserdefaults 和 nsworkspace),但可通过 applescript 调用 shell 命令或结合少量 swift/objective-c 工具实现。最稳定、无需额外编译的方式是使用 applescript + defaults + killall dock 配合图片路径写入偏好设置 —— 仅适用于“桌面图片”模式(非动态壁纸、非 icloud 同步壁纸、非多显示器独立设置)。
✅ 前提条件与限制
确保:
- 图片为本地路径(如 /Users/you/Pictures/wallpaper.jpg)
- 图片格式为 macOS 支持的类型(JPG、PNG、HEIC 等)
- 当前用户已解锁(脚本无法绕过权限)
- 不支持为不同显示器单独设图(需额外处理)
- 动态壁纸(.heic 含多帧)、iCloud 同步壁纸、相册幻灯片等无法通过此法设置
✅ 基础 AppleScript(单显示器静态壁纸)
以下脚本将指定图片设为当前用户的桌面壁纸:
set wallpaperPath to "/Users/yourname/Pictures/wallpaper.jpg"
<p>-- 将路径转为 POSIX 格式(确保 AppleScript 正确识别)
set posixPath to quoted form of POSIX path of wallpaperPath</p><p>-- 写入 NSGlobalDomain 的 DesktopPicture 拓展偏好
do shell script "defaults write com.apple.desktop Background '{default = {ImageFilePath = " & posixPath & "; };}'"</p><p>-- 重启 Dock 以刷新桌面
do shell script "killall Dock"注意:
- 替换 yourname 为你的实际用户名
- 路径中含空格无需额外处理(quoted form of 已包裹)
- 执行后 Dock 会短暂重启,属正常现象
✅ 进阶:自动选图 + 随机切换(每日/每次登录)
若想让壁纸自动更换,可搭配文件夹和随机逻辑:
- 把壁纸统一放在一个文件夹(如
~/Pictures/Wallpapers/) - 用 AppleScript 列出 JPG/PNG 文件,随机选取一个
- 再调用上述设图逻辑
示例片段(接在上一段之后):
-- 指定壁纸文件夹
set wallDir to (path to pictures folder as text) & "Wallpapers:"
<p>-- 获取所有 JPG/PNG 文件
set imageFiles to (files of folder wallDir whose name extension is in {"jpg", "jpeg", "png", "heic"})</p><p>-- 随机选一个
set randomIndex to random number from 1 to (count imageFiles)
set selectedFile to item randomIndex of imageFiles</p><p>-- 转为 POSIX 路径并设壁纸
set posixPath to quoted form of POSIX path of (selectedFile as text)</p><p>do shell script "defaults write com.apple.desktop Background '{default = {ImageFilePath = " & posixPath & "; };}'"
do shell script "killall Dock"⚠️ 注意事项与常见失败原因
- 权限拒绝:首次运行可能被系统阻止,需前往「系统设置 → 隐私与安全性 → 自动化」中为 Script Editor 或终端启用「控制电脑」权限
-
路径错误:用
path to pictures folder等 AppleScript 内置路径常量更可靠,避免硬编码 -
未生效?:检查图片是否存在、是否被其他应用(如 Wallpaper Engine、Dynamic Wallpaper 设置)覆盖;也可手动执行
defaults read com.apple.desktop查看当前值 -
多显示器:macOS 12+ 支持 per-display 设置,需改写为
Background -dict-add "Display Name" '{ImageFilePath = "...";}',但显示器名称需精确匹配(可用system_profiler SPDisplaysDataType查询)


















