macOS 提供了许多精美的壁纸,但是看久了总会腻。找了很多 macOS 上的壁纸软件,用起来不是很顺手,因此自己写了一份脚本,从 Unsplash API 获取随机图片作为壁纸,自动刷新。爱折腾的小伙伴可以试试。

步骤一:申请 Unsplash API

Unsplash API 申请地址

(1) 首先,创建一个新的应用

(2) 其次,同意协议

(3) 接着,填写 App 名称和描述

(4) 最后,往下拉找到 Access Key


步骤二:编写 Python 脚本

python3 脚本我已经放到 Github

要注意文件中提示的应该修改的部分,一个是 TOKEN,另一个是 PROXIES 代理。


步骤三:编写启动脚本

(1) 创建一个文件夹名为 Wallpapers 用于放置脚本, 将 python 脚本(random_pic.py)放在这个文件夹

我把创建的文件夹放在了 /Users/{用户名}/Pictures 下

如果你不是放在这里,后面几个脚本的对应路径需要知道如何修改

(2) 安装 virtualenv,并创建虚拟环境文件夹

都在上述文件夹 Wallpapers 下进行,需要先安装 Python3,建议使用 brew

brew install python3
pip3 install virtualenv
virtualenv env
source env/bin/activate
pip install requests

(3) 新建并编写 macOS 下自动任务脚本,命名为 com.unsplash.plist

注意下面注释里要求更改的部分

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <!-- Label 制定自动脚本的名称 -->
 <key>Label</key>
 <string>com.unsplash.plist</string>
 <!-- 指定要运行的脚本 -->
 <key>ProgramArguments</key>
 <array>
   <!-- 请将 {你的用户名} 更改为自己的用户名,以下同样要改 -->
   <string>/Users/{你的用户名}/Pictures/Wallpapers/wallpaper.sh</string>
 </array>
 <!-- 指定要运行的时间间隔,以秒为单位 -->
 <key>StartInterval</key>
 <integer>600</integer>
 <!-- 标准输出文件 -->
 <key>StandardOutPath</key>
 <string>/Users/{你的用户名}/Pictures/Wallpapers/run.log</string>
 <!-- 标准错误输出文件,错误日志 -->
 <key>StandardErrorPath</key>
 <string>/Users/{你的用户名}/Pictures/Wallpapers/log.err</string>
</dict>
</plist>

(4) 新建并编写 wallpaper.sh

如果你不清楚下面脚本语句的作用,最好不要修改

#!/bin/sh
cd /Users/$USER/Pictures/Wallpapers
# 获取图片的文件名
title=$(/Users/$USER/Pictures/Wallpapers/env/bin/python /Users/$USER/Pictures/Wallpapers/random_pic.py)
echo $title
# 暂停5秒等待图片缓存写入文件
sleep 5
# 图片地址
localpath="/Users/$USER/Pictures/Wallpapers/images/$title.jpg"
osascript -e "tell application \"Finder\" to set desktop picture to POSIX file \"$localpath\""
# 提示壁纸更换完成
osascript -e "display notification \"壁纸更换成功\" with title \"壁纸更换脚本\""

(5) 设置自动刷新

  • 进入到  /Users/{你的用户名}/Library/LaunchAgents  文件夹中
cd ~/Library/LaunchAgents
  • 将上述(3)中的 com.unsplash.plist 放在这里
  • 加载并启用:
launchctl load -w 'com.unsplash.plist'
launchctl start 'com.unsplash.plist'
  • 如果需要修改该文件夹,需要重新加载该文件
launchctl unload -w 'com.unsplash.plist'
launchctl load -w 'com.unsplash.plist'

(6) 此时

/Users/{你的用户名}/Pictures/Wallpapers 下应有两个文件为 random_pic.pywallpaper.sh

/Users/{你的用户名}/Library/LaunchAgents/ 下应该有 com.unsplash.plist


结束

大功告成,此时,你的壁纸应该会每隔十分钟自动刷新!


Q/A:

  • 一定要使用 virtualenv 创建的虚拟环境中的 python3 吗?
    • 不一定,可以直接使用电脑上安装的 python3,但不建议
  • 可以加快壁纸更换频率吗?
    • 可以,请在 com.unsplash.plist 文件中修改
    • Unsplash 创建的 App 还只是 Demo 时每小时不能超过 50 次请求,而根据我的经历,这类 App 无法申请转为 Product
  • 我的壁纸为啥没有自动刷新?
    • 请检查上述步骤,如仍无法刷新,请在评论里描述问题。