macOS 必应每日壁纸自动设置工具 (多屏幕兼容)
技术 随笔 6

🖼 macOS 必应每日壁纸自动设置工具 (多屏幕兼容)

macOS-Bing-Wallpaper-Setter 是一个轻量级的 Shell 脚本,用于自动下载每日最新的 Bing 壁纸,并将其设置为 macOS 桌面背景。它特别优化了在多显示器 (Multi-Screen)多桌面空间 (Multiple Spaces) 环境下的兼容性。

✨ 特性

  • 多屏兼容: 使用 osascript 循环遍历所有桌面实例 (repeat with theDesktop in every desktop),确保在多个显示器和所有桌面空间上都能成功设置壁纸。
  • 全自动下载: 通过 Bing 官方 API 获取最新的壁纸 URL,并优先下载 UHD (超高清) 版本。
  • 去重机制: 如果当日壁纸已下载,则跳过下载,直接应用,节省时间和带宽。
  • Shell 原生实现: 仅依赖 macOS 自带的 curlosascript,无需安装 Python 或其他第三方依赖(如 requestsjq)。

🚀 使用方法

在终端中复制并回车

curl -fsSL https://raw.githubusercontent.com/ssesweb/macOS-Bing-Wallpaper-Setter/main/bing_wallpaper_setter.sh | bash

此命令将直接执行来自 GitHub 的脚本,运行意味着您信任此来源,我们无法为可能存在的风险负责。

效果为

123@localhost ~ % curl -fsSL https://raw.githubusercontent.com/ssesweb/macOS-Bing-Wallpaper-Setter/main/bing_wallpaper_setter.sh | bash
⏳ 正在获取今日 Bing 壁纸信息...
📌 今日壁纸:让树叶诉说历史
🔗 下载 URL:https://www.bing.com/th?id=OHR.OliveGrove_ZH-CN7054006944_UHD.jpg&rf=LaDigue_1920x1080.jpg&pid=hp
🖼 壁纸已存在:20251125_让树叶诉说历史.jpg
🔄 正在设置壁纸...
✅ 壁纸已成功应用到所有屏幕。
123@localhost ~ %

⚙️ 设置自动化 (推荐: 使用“快捷指令”)

为了实现您设定的“连接到指定 Wi-Fi 触发”功能,您可以使用 macOS 的 “快捷指令” (Shortcuts) 应用。

步骤:

  1. 打开 macOS 上的 “快捷指令” 应用。

  2. 切换到顶部的 “自动化” (Automation) 标签页。

  3. 点击 “新建自动化” (New Automation) 或右上角的 +

  4. 在触发器列表中,选择 “Wi-Fi”

  5. 配置触发器:

    • 何时: 选择 “连接时” (When connected)
    • 网络: 选择您指定的 Wi-Fi 名称(例如您的家庭或办公室 Wi-Fi)。
  6. 在动作 (Actions) 编辑区:

    • 搜索 “终端 动作并添加。
    • 在脚本框中,输入

curl -fsSL https://raw.githubusercontent.com/ssesweb/macOS-Bing-Wallpaper-Setter/main/bing_wallpaper_setter.sh | bash
  1. 确保底部的 “运行时询问” (Ask Before Running) 选项被 关闭 ,以实现完全自动化。
  2. 保存自动化。

这样,每当您的 Mac 连接到指定的 Wi-Fi 网络时,系统将自动运行脚本,更新您的多屏幕桌面壁纸。

📄 脚本依赖

  • macOS (原生支持 osascript)
  • curl (用于下载壁纸和获取 JSON 数据)
#!/bin/zsh

# --- 配置 ---
BING_JSON_URL="https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN"
BING_BASE_URL="https://www.bing.com"
WALLPAPER_DIR="$HOME/Pictures/BingWallpapers"
# --------------------

# 创建保存目录
mkdir -p "$WALLPAPER_DIR"

echo "⏳ 正在获取今日 Bing 壁纸信息..."

# 1. 获取 JSON 数据
JSON_DATA=$(curl -s "$BING_JSON_URL")

if [ $? -ne 0 ] || [ -z "$JSON_DATA" ]; then
    echo "❌ 获取壁纸 JSON 失败,请检查网络连接。"
    exit 1
fi

# 2. 解析 JSON 数据 (使用 sed 进行简单解析,如果系统安装了 jq 会更可靠)
# 提取 url 和 startdate,并进行 URL 转换 (UHD)
IMAGE_URL_PATH=$(echo "$JSON_DATA" | sed -E 's/.*"url":"([^"]+)".*/\1/' | sed 's/1920x1080/UHD/')
START_DATE=$(echo "$JSON_DATA" | sed -E 's/.*"startdate":"([^"]+)".*/\1/')
IMAGE_TITLE=$(echo "$JSON_DATA" | sed -E 's/.*"title":"([^"]+)".*/\1/' | sed 's/[/:\\]/_/g') # 清理标题中的斜杠和冒号

FULL_IMAGE_URL="${BING_BASE_URL}${IMAGE_URL_PATH}"
FILE_NAME="${START_DATE}_${IMAGE_TITLE}.jpg"
FILE_PATH="${WALLPAPER_DIR}/${FILE_NAME}"

echo "📌 今日壁纸:${IMAGE_TITLE}"
echo "🔗 下载 URL:${FULL_IMAGE_URL}"

# 3. 下载壁纸
if [ -f "$FILE_PATH" ]; then
    echo "🖼 壁纸已存在:${FILE_NAME}"
else
    echo "⬇️ 正在下载壁纸..."
    curl -s -L -o "$FILE_PATH" "$FULL_IMAGE_URL"

    if [ $? -ne 0 ]; then
        echo "❌ 下载壁纸失败。"
        exit 1
    fi
    echo "📁 保存到:${FILE_PATH}"
fi

# 4. 设置为 macOS 壁纸 (使用您验证可行的 System Events 循环)
echo "🔄 正在设置壁纸..."

# AppleScript 变量需要处理路径中的引号,虽然 bing 标题通常不会有,但预防性处理
ESCAPED_PATH=$(echo "$FILE_PATH" | sed 's/"/\\"/g')

osascript -e "set picturePath to POSIX file \"$ESCAPED_PATH\"" \
          -e 'tell application "System Events"' \
          -e 'repeat with theDesktop in every desktop' \
          -e 'set picture of theDesktop to picturePath' \
          -e 'end repeat' \
          -e 'end tell'

if [ $? -eq 0 ]; then
    echo "✅ 壁纸已成功应用到所有屏幕。"
else
    echo "❌ 设置壁纸失败。"
fi

# --------------------

exit 0```

macOS 必应每日壁纸自动设置工具 (多屏幕兼容)
https://www.quietphoenix.top/archives/macos-bi-ying-mei-ri-bi-zhi-zi-dong-she-zhi-gong-ju-duo-ping-mu-jian-rong
作者
QuietPhoenix
发布于
更新于
许可