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.py
和 wallpaper.sh
/Users/{你的用户名}/Library/LaunchAgents/
下应该有 com.unsplash.plist
结束
大功告成,此时,你的壁纸应该会每隔十分钟自动刷新!
Q/A:
- 一定要使用 virtualenv 创建的虚拟环境中的 python3 吗?
- 不一定,可以直接使用电脑上安装的 python3,但不建议
- 可以加快壁纸更换频率吗?
- 可以,请在 com.unsplash.plist 文件中修改
- Unsplash 创建的 App 还只是 Demo 时每小时不能超过 50 次请求,而根据我的经历,这类 App 无法申请转为 Product
- 我的壁纸为啥没有自动刷新?
- 请检查上述步骤,如仍无法刷新,请在评论里描述问题。