1. 项目缘起:当静态壁纸遇上动态脚本
你有没有想过,让电脑桌面壁纸不再是千篇一律的静态图片,而是像一块实时更新的卫星地图,随着时间推移,自动展示地球不同角落的样貌?这个想法听起来像是某个专业桌面美化软件的功能,但今天我要分享的,是如何用最基础的Bash 脚本来实现它。没错,就是那个在终端里敲命令的 Bash。这个项目,我称之为“动画化、自更新的卫星壁纸脚本”。
最初产生这个念头,是因为我对 NASA 的每日一图或者一些气象卫星的实时影像很着迷,但每次手动下载、设置为壁纸太麻烦了。市面上的动态壁纸软件要么功能臃肿,要么不支持我想要的特定数据源。作为一个喜欢折腾命令行的人,我自然而然地想到了用脚本来解决。Bash 脚本的轻量、可定制和强大的调度能力,让它成为实现这个想法的完美工具。通过它,我们可以定期从指定的卫星影像数据源(比如 NASA 的 GIBS、EUMETSAT 等公开 API)抓取最新的全球或区域影像,经过简单的图像处理(如裁剪、调整尺寸以适应屏幕),然后自动设置为系统桌面壁纸。整个过程完全自动化,无需人工干预,你的桌面就成了一扇观察地球动态的窗口。
这个项目的核心价值在于其极致的轻量化和可编程性。它不依赖任何庞大的图形化桌面环境套件,仅仅通过脚本和系统自带的工具(如curl,convert,gsettings等)就能运行。你可以自由定义更新频率、图像源、显示区域(比如专注展示你所在的城市上空云图),甚至叠加其他信息(如温度图层)。对于开发者、气象爱好者或者任何想让桌面“活”起来的技术爱好者来说,这是一个兼具实用性和趣味性的练手项目。接下来,我将详细拆解从原理到实现的每一个步骤,并分享我在搭建过程中踩过的坑和总结的经验。
2. 核心原理与架构设计:脚本如何驱动壁纸更新
要实现一个“动画化、自更新的卫星壁纸”,我们需要将其分解为几个核心的、循环执行的任务。整个系统的运行原理可以看作一个由 Bash 脚本控制的自动化工作流。
2.1 工作流拆解:从数据到桌面的四步曲
整个流程可以清晰地分为四个阶段,形成一个闭环:
数据获取:脚本需要从互联网上的卫星影像服务提供商处获取最新的图像数据。这通常通过调用这些服务提供的公开 API 接口来完成,使用如
curl或wget这样的命令行工具下载图像文件(通常是 PNG、JPEG 或 GeoTIFF 格式)。关键点在于找到稳定、免费且更新频率符合需求的图源。例如,NASA 的全球影像浏览系统(GIBS)提供了近乎实时的全球卫星影像,可以通过构造特定的 WMS(Web Map Service)请求 URL 来获取指定区域和时间的图片。图像处理:下载的原始卫星图像往往尺寸巨大、包含我们不关心的区域(如极地、海洋),或者颜色通道不符合审美。因此,需要对其进行处理。这一步可能包括:
- 裁剪:只保留我们感兴趣的地理区域(例如,东亚地区)。
- 缩放:将图像尺寸调整到与你的桌面分辨率完全一致,避免拉伸失真。
- 格式转换与优化:将图像转换为系统壁纸引擎最兼容的格式(如 JPEG),并可能进行简单的色彩增强。
- 合成:如果你有多个数据源(如可见光云图、红外云图),可能需要将它们以某种方式(如半透明叠加)合成为一张图。 Bash 脚本本身不处理图像,但它可以调用强大的命令行图像处理工具,最常用的就是ImageMagick套件中的
convert命令。几乎所有的图像操作都可以通过convert命令的参数组合来实现。
壁纸设置:将处理好的最终图像设置为当前用户的桌面壁纸。这一步与桌面环境紧密相关。在 GNOME(Ubuntu 默认)或 Unity 环境下,可以使用
gsettings命令;在 KDE Plasma 下,可以使用plasma-apply-wallpaperimage或通过dbus-send命令调用 Plasma 的接口;在 XFCE 下,可以使用xfconf-query。对于 macOS,可以使用osascript调用 AppleScript;对于 Windows(通过 Git Bash 或 WSL),过程会更复杂,可能需要调用 PowerShell 脚本或修改注册表。我们的脚本需要检测当前环境并执行对应的命令。调度与循环:为了让壁纸“动画化”和“自更新”,我们需要让上述流程周期性地自动运行。这可以通过 Linux 系统的cron定时任务来实现。我们可以编写一个 crontab 条目,让系统每隔一段时间(例如每 10 分钟、每小时)就执行一次我们的主脚本。这样,桌面壁纸就会按照设定的频率自动刷新,形成一种平滑的“动画”效果,展示地球天气或地表特征的连续变化。
2.2 技术选型与工具链
基于上述原理,我们确定了核心工具链:
- 脚本语言:Bash。选择它的原因是其几乎在所有类 Unix 系统(包括 Linux 和 macOS)上原生存在,并且特别擅长流程控制和调用系统命令。对于 Windows 用户,可以通过 Git Bash 或 WSL 获得近乎相同的体验。
- 数据获取:
curl。一个功能强大的命令行数据传输工具,支持 HTTP/HTTPS/FTP 等协议,可以方便地添加请求头、处理 cookies,非常适合调用 RESTful API。 - 图像处理:ImageMagick。这是一个开源软件套件,其
convert命令是命令行图像处理的“瑞士军刀”,能够完成裁剪、缩放、格式转换、滤镜、合成等几乎所有操作。 - 壁纸设置:依赖于桌面环境。我们将主要针对GNOME/GDM环境进行讲解,因为它在 Linux 发行版中最为普遍。其他环境的命令会在注意事项中给出。
- 任务调度:
cron。Linux/Unix 系统经典的定时任务守护进程,配置简单,可靠性高。
这个架构的优势在于高度模块化。每个步骤(下载、处理、设置)都可以独立测试和调试。如果未来想更换数据源,只需修改下载部分的 URL 构造逻辑;如果想改变壁纸样式,只需调整convert命令的参数。
3. 实战搭建:一步步构建你的卫星壁纸脚本
理论清晰后,我们开始动手。我将以一个具体的例子来演示:创建一个每小时自动更新,显示东亚地区最新可见光卫星云图的脚本。我们选择 NASA GIBS 作为数据源,因为它免费、公开且数据质量高。
3.1 环境准备与依赖安装
首先,确保你的系统(以 Ubuntu/Debian 为例)已经安装了必要的工具。
# 更新软件包列表 sudo apt update # 安装 curl(如果尚未安装) sudo apt install curl -y # 安装 ImageMagick,它提供了 convert 命令 sudo apt install imagemagick -y # 验证安装 curl --version convert --version对于 macOS 用户,可以通过 Homebrew 安装:
# 安装 Homebrew(如果尚未安装) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 使用 Homebrew 安装 ImageMagick brew install imagemagick对于 Windows 用户,如果你使用 Git Bash,通常curl已经内置。ImageMagick 需要单独下载安装,并确保其convert.exe所在的目录被添加到系统的 PATH 环境变量中。
3.2 编写核心 Bash 脚本
创建一个名为satellite_wallpaper.sh的文件,并赋予其执行权限。
touch satellite_wallpaper.sh chmod +x satellite_wallpaper.sh然后用文本编辑器打开这个文件,我们将分块写入内容。
第一部分:脚本配置与变量定义这是脚本最灵活的部分,你可以在这里定制所有参数。
#!/bin/bash # satellite_wallpaper.sh - 自动下载并设置卫星壁纸 # 配置区域 # 1. 图像保存路径 WALLPAPER_DIR="$HOME/Pictures/satellite_wallpapers" mkdir -p "$WALLPAPER_DIR" # 确保目录存在 OUTPUT_FILE="$WALLPAPER_DIR/current_wallpaper.jpg" # 2. 桌面分辨率(请根据你的屏幕修改) SCREEN_WIDTH=1920 SCREEN_HEIGHT=1080 # 3. 卫星图像参数(以NASA GIBS MODIS Terra Corrected Reflectance为例) # 服务基地址 BASE_URL="https://gibs.earthdata.nasa.gov/wms/epsg4326/best/wms.cgi" # 图层名 LAYER="MODIS_Terra_CorrectedReflectance_TrueColor" # 地图投影和边界框(Bounding Box):定义裁剪区域 [minx, miny, maxx, maxy] # 这里以东亚地区为例:东经70-140度,北纬15-55度 BBOX="70,15,140,55" # 图像尺寸(从服务端请求的原始尺寸,可以稍大一些以便裁剪) IMG_WIDTH=2048 IMG_HEIGHT=1536 # 当前时间(用于获取最新图),GIBS通常支持“最近”的时间 TIME="$(date -u +%Y-%m-%dT%H:%M:%SZ)" # 4. 构造完整的WMS请求URL # WMS GetMap 请求标准参数 REQUEST="GetMap" SRS="EPSG:4326" FORMAT="image/png" WMS_URL="${BASE_URL}?SERVICE=WMS&REQUEST=${REQUEST}&VERSION=1.3.0&LAYERS=${LAYER}&STYLES=&CRS=${SRS}&BBOX=${BBOX}&WIDTH=${IMG_WIDTH}&HEIGHT=${IMG_HEIGHT}&FORMAT=${FORMAT}&TIME=${TIME}" # 5. 临时文件 TEMP_RAW_FILE="$WALLPAPER_DIR/raw_satellite.png"关键点解释:
BBOX参数定义了地理范围。你需要根据你想观察的区域来调整这四个值。你可以使用在线地图工具来获取特定区域的经纬度边界。TIME参数设置为当前 UTC 时间,旨在获取最新的可用图像。但需要注意,卫星数据并非实时推送,可能有数小时的延迟。GIBS 服务会提供它所能处理的最新时间切片。- WMS URL 的构造遵循 OGC 标准,这是与许多地理信息服务交互的通用方式。
第二部分:核心功能函数我们将操作封装成函数,使脚本结构更清晰,便于调试。
# 函数:下载卫星图像 download_image() { echo "正在从NASA GIBS下载卫星图像..." # 使用curl下载,-s静默模式,-f失败时退出,-o输出到文件 if curl -s -f -L -o "$TEMP_RAW_FILE" "$WMS_URL"; then echo "下载成功: $TEMP_RAW_FILE" return 0 else echo "错误:下载卫星图像失败。请检查网络和URL。" return 1 fi } # 函数:处理图像(裁剪、缩放、格式转换) process_image() { echo "正在处理图像..." # 使用ImageMagick的convert命令 # 1. 裁剪掉可能存在的黑边或不需要的部分(根据BBOX和实际需求调整) # 2. 缩放至桌面分辨率 # 3. 转换为JPEG格式并优化质量 if convert "$TEMP_RAW_FILE" \ -trim +repage \ # 自动裁剪边缘空白 -resize "${SCREEN_WIDTH}x${SCREEN_HEIGHT}^" \ # 缩放,^表示保持宽高比,可能会溢出 -gravity center \ # 设置锚点为中央 -extent "${SCREEN_WIDTH}x${SCREEN_HEIGHT}" \ # 确保最终尺寸精确,溢出的部分会被裁剪 -quality 90 \ # JPEG质量 "$OUTPUT_FILE"; then echo "图像处理完成: $OUTPUT_FILE" return 0 else echo "错误:图像处理失败。请检查ImageMagick安装和输入文件。" return 1 fi } # 函数:设置壁纸(针对GNOME桌面) set_wallpaper_gnome() { echo "正在设置GNOME桌面壁纸..." # 使用gsettings修改壁纸设置 # 注意:需要确保路径是file://格式的URI local wallpaper_uri="file://$(readlink -f "$OUTPUT_FILE")" if gsettings set org.gnome.desktop.background picture-uri "$wallpaper_uri"; then gsettings set org.gnome.desktop.background picture-uri-dark "$wallpaper_uri" # 同时设置深色模式壁纸 gsettings set org.gnome.desktop.background picture-options 'zoom' # 缩放适应 echo "壁纸设置成功!" return 0 else echo "警告:设置GNOME壁纸失败。你可能不在GNOME环境下,或需要检查D-Bus。" return 1 fi } # 函数:检测桌面环境并设置壁纸 set_wallpaper() { local desktop_env="${XDG_CURRENT_DESKTOP:-${DESKTOP_SESSION}}" case "$desktop_env" in *GNOME*|*ubuntu*|*Unity*) set_wallpaper_gnome ;; *KDE*|*plasma*) echo "检测到KDE Plasma。请安装`plasma-wallpaper`脚本或使用dbus方法。" # 示例:qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript “...” return 1 ;; *XFCE*) echo “检测到XFCE。使用xfconf-query设置。” # xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image -s "$OUTPUT_FILE" ;; *) echo “无法识别的桌面环境: $desktop_env。请手动设置壁纸。” echo “处理后的图片位于: $OUTPUT_FILE” return 1 ;; esac }第三部分:主执行逻辑与错误处理
# 主脚本逻辑 main() { echo "开始执行卫星壁纸更新任务: $(date)" # 步骤1:下载 if ! download_image; then echo "任务因下载失败而终止。" exit 1 fi # 步骤2:处理 if ! process_image; then echo "任务因图像处理失败而终止。" exit 1 fi # 步骤3:设置 if ! set_wallpaper; then # 设置壁纸失败不一定需要终止脚本,可能只是环境不支持 echo “壁纸设置步骤未完全成功,但图片已生成。” fi # 清理临时文件(可选) # rm -f "$TEMP_RAW_FILE" echo "卫星壁纸更新任务完成: $(date)" } # 执行主函数 main现在,一个功能完整的脚本就写好了。你可以先在终端手动运行它来测试:
./satellite_wallpaper.sh如果一切顺利,你的桌面壁纸应该会变成一张东亚地区的卫星云图。
3.3 配置 Crontab 实现自动更新
手动运行成功只是第一步,我们的目标是“自更新”。这就需要用到cron。
打开当前用户的 crontab 编辑界面:
crontab -e如果是第一次使用,可能会让你选择编辑器,选择你熟悉的(如 nano)。
在文件末尾添加一行,定义定时任务。例如,我们希望每小时的第 5 分钟执行一次脚本(避免整点时的系统繁忙期):
# 分 时 日 月 周 命令 5 * * * * /bin/bash /home/你的用户名/path/to/satellite_wallpaper.sh >> /home/你的用户名/wallpaper_log.txt 2>&15 * * * *表示每小时的第5分钟。/bin/bash指定了执行脚本的解释器,这是一个好习惯。/home/你的用户名/path/to/satellite_wallpaper.sh是脚本的绝对路径,你必须修改成你实际存放脚本的位置。>> /home/你的用户名/wallpaper_log.txt 2>&1将脚本的标准输出和错误输出都重定向到一个日志文件中,方便日后排查问题。2>&1表示将标准错误(文件描述符2)重定向到标准输出(文件描述符1)所在的位置。
保存并退出编辑器(在 nano 中是
Ctrl+X,然后按Y确认,再按回车)。
现在,你的系统就会每小时自动运行一次脚本,更新壁纸。你可以通过查看日志文件wallpaper_log.txt来确认任务是否正常运行。
4. 进阶优化与深度定制
基础功能跑通后,我们可以让这个脚本变得更强大、更智能。
4.1 多数据源与图像合成
单一的卫星图层可能不够看。我们可以同时从多个来源下载图像,然后将它们合成一张。
例如,我们可以同时下载可见光云图和红外云图,然后将红外云图以半透明的方式叠加在可见光图上,突出显示云顶温度信息。
修改脚本思路:
- 定义第二个数据源的 URL 和参数(例如,NASA GIBS 的
MODIS_Terra_Brightness_Temp_Band31图层)。 - 在
download_image函数中并行或顺序下载两个图像到不同的临时文件。 - 创建一个新的
composite_image函数,使用convert的-composite操作符进行叠加。
这条命令将红外图像(composite_image() { convert "$VISIBLE_IMG" \( "$INFRARED_IMG" -alpha set -channel A -evaluate set 50% \) -composite "$OUTPUT_FILE" }$INFRARED_IMG)的透明度设置为50%,然后叠加到可见光图像($VISIBLE_IMG)上。
4.2 智能错误处理与重试机制
网络请求可能失败,API 可能暂时不可用。一个健壮的脚本应该具备错误处理和重试能力。
我们可以在download_image函数中加入重试逻辑:
download_image_with_retry() { local max_retries=3 local retry_delay=10 # 秒 local retry_count=0 while [ $retry_count -lt $max_retries ]; do if curl -s -f -L -o "$TEMP_RAW_FILE" "$WMS_URL"; then echo "下载成功 (尝试 $((retry_count+1)))" return 0 else echo "下载失败 (尝试 $((retry_count+1))/$max_retries),${retry_delay}秒后重试..." ((retry_count++)) sleep $retry_delay fi done echo "错误:达到最大重试次数($max_retries),下载彻底失败。" return 1 }4.3 动态分辨率适配与多显示器支持
之前的脚本硬编码了屏幕分辨率。我们可以让脚本自动检测主显示器的分辨率。
# 获取主显示器分辨率(适用于X11环境,如GNOME on Xorg) get_screen_resolution() { if command -v xrandr &> /dev/null; then # 解析xrandr输出,获取连接中的第一个显示器的当前模式 local resolution resolution=$(xrandr | grep -w connected | head -1 | grep -oP '\d+x\d+') if [[ $resolution ]]; then SCREEN_WIDTH=$(echo $resolution | cut -d'x' -f1) SCREEN_HEIGHT=$(echo $resolution | cut -d'x' -f2) echo "检测到屏幕分辨率: ${SCREEN_WIDTH}x${SCREEN_HEIGHT}" else echo “警告:无法从xrandr解析分辨率,使用默认值。” fi fi } # 在主函数开始处调用 main() { get_screen_resolution # ... 其余代码 }对于多显示器,情况更复杂。一种简单策略是为每个显示器生成一张壁纸,然后使用桌面环境支持多显示器壁纸的命令(如 GNOME 可以通过gsettings设置picture-uri为数组,但更常见的是使用扩展)。更实用的方法是生成一张足够大的图片,能够覆盖所有显示器的虚拟桌面,然后设置为“跨越”所有显示器的单一壁纸。这需要计算所有显示器的总布局。
4.4 添加日期/时间水印或气象信息
为了让壁纸更具信息性,可以在图像上叠加文本,比如图像获取的时间、数据来源等。
add_timestamp() { local timestamp=$(date +"%Y-%m-%d %H:%M UTC") local font_size=20 local text_color="white" local background_color="rgba(0,0,0,0.6)" # 半透明黑色背景 convert "$OUTPUT_FILE" \ -font "DejaVu-Sans" \ # 指定字体,确保系统已安装 -pointsize $font_size \ -fill "$text_color" \ -gravity southeast \ # 定位到右下角 -annotate +10+10 "Source: NASA GIBS | $timestamp" \ "$OUTPUT_FILE" echo “时间戳添加完成。” }在process_image函数之后调用add_timestamp即可。
5. 避坑指南与疑难排错
在实际部署和运行过程中,你几乎一定会遇到一些问题。以下是我踩过的一些坑和解决方案。
5.1 图像下载失败:URL构造与API限制
问题:curl命令返回错误,如403 Forbidden或404 Not Found。
排查思路:
手动测试URL:首先,将脚本中构造的
WMS_URL变量值echo出来,然后复制到浏览器地址栏中尝试访问。如果浏览器能下载图片,说明网络和URL没问题。如果不行,则需检查:- API密钥:有些卫星数据服务需要注册并获取 API 密钥。NASA GIBS 的公开 WMS 接口通常不需要,但如果你使用其他商业或研究机构的服务,很可能需要。查看服务商的文档,将密钥添加到请求参数中(如
&api_key=YOUR_KEY)。 - 时间参数:
TIME参数可能太新,服务器还没有对应时间的数据。尝试将时间设置为几小时前,例如TIME="$(date -u -d '3 hours ago' +%Y-%m-%dT%H:%M:%SZ)"。或者,有些服务支持TIME=latest。 - 图层名:确认
LAYER变量中的图层名称完全正确,区分大小写。查阅服务商的图层列表文档。 - 请求频率限制:免费公开 API 通常有请求频率限制。如果你的脚本通过 cron 运行得太频繁,可能会被暂时屏蔽。增加 cron 的执行间隔(如每 3 小时一次)。
- API密钥:有些卫星数据服务需要注册并获取 API 密钥。NASA GIBS 的公开 WMS 接口通常不需要,但如果你使用其他商业或研究机构的服务,很可能需要。查看服务商的文档,将密钥添加到请求参数中(如
网络问题:确保你的服务器或电脑可以访问目标域名。尝试
ping gibs.earthdata.nasa.gov或使用curl -v查看详细的 HTTP 请求/响应过程。
5.2 ImageMagick转换命令报错
问题:convert命令执行失败,提示诸如unable to open image,no decode delegate for this image format等错误。
排查思路:
- 检查输入文件:确保
$TEMP_RAW_FILE存在且非空。在convert命令前加一行ls -lh "$TEMP_RAW_FILE"查看文件信息。 - 检查文件格式:
convert命令可能不支持下载的原始图像格式(尽管我们请求的是 PNG)。使用file命令检查文件类型:file "$TEMP_RAW_FILE"。有时服务器可能返回错误内容(如 HTML 错误页面)。确保下载到的是有效的图像数据。 - 安装缺失的编解码器:
no decode delegate错误意味着 ImageMagick 缺少处理该图像格式的库。对于 PNG/JPEG 等常见格式,通常已内置。如果使用 GeoTIFF 等专业格式,可能需要安装额外的库。在 Ubuntu 上,可以尝试sudo apt install libtiff5等。 - 命令语法:仔细检查
convert命令的参数顺序和格式。一个常见的错误是忘记在复合操作(如\( ... \))中使用正确的转义或括号。
5.3 壁纸设置命令不生效
问题:脚本运行无报错,日志显示成功,但桌面壁纸没有变化。
排查思路:
- 确认桌面环境:首先,确保
set_wallpaper函数正确识别了你的桌面环境。在终端运行echo $XDG_CURRENT_DESKTOP和echo $DESKTOP_SESSION查看输出,并据此调整脚本中的case判断逻辑。 - 手动执行设置命令:在终端里,手动执行脚本中用于设置壁纸的那条命令(例如
gsettings set org.gnome.desktop.background picture-uri "file:///完整路径/current_wallpaper.jpg")。观察是否有权限错误或 D-Bus 通信错误。 - Cron 环境问题:这是最常见的原因。Cron 任务运行在一个非常精简的环境下,没有完整的用户图形会话所需的环境变量(如
DBUS_SESSION_BUS_ADDRESS)。这会导致gsettings命令无法与当前用户的桌面会话通信。解决方案:在调用gsettings前,手动注入当前用户的 D-Bus 地址。
更可靠的方法是,在 crontab 中直接定义这些变量:# 在set_wallpaper_gnome函数开头添加 export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus" export DISPLAY=:0
注意,# 在crontab文件顶部定义环境变量 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus DISPLAY=:0 # 然后再定义任务 5 * * * * /bin/bash /path/to/satellite_wallpaper.sh >> /path/to/log.txt 2>&1$(id -u)在 crontab 中可能不会展开,最好写成固定的用户 ID 数字,或者将环境变量的定义也放到脚本里,并通过pgrep等方式动态获取。 - 文件路径问题:确保传递给
gsettings的 URI 是绝对路径,并且文件确实存在且可读。使用readlink -f可以解析出绝对路径。
5.4 性能与资源考量
问题:脚本运行占用过多 CPU/内存,或者频繁下载大量数据消耗带宽。
优化建议:
- 调整更新频率:卫星影像的更新频率本身可能就不高(如每 1-3 小时)。将 cron 任务设置为每小时或每两小时运行一次是合理的,没有必要每分钟运行。
- 优化图像尺寸:在下载请求 (
WMS_URL) 中,WIDTH和HEIGHT不要设置得远大于你的屏幕分辨率。这既浪费下载带宽,也增加convert处理的开销。只需略大于屏幕分辨率即可,为裁剪留出余地。 - 缓存与差分更新:如果数据源支持,可以检查服务器上图像是否真的更新了再下载。例如,有些 API 会提供图像的
Last-Modified头或 ETag。你可以先发送一个 HEAD 请求检查,如果图像未改变,则跳过下载和处理步骤,直接使用本地缓存。这需要更复杂的脚本逻辑。 - 清理旧文件:在脚本末尾或定期任务中,清理
$WALLPAPER_DIR目录下过时的图片文件,避免磁盘空间被占满。可以添加如下命令:# 保留最近24小时的图片,删除更早的 find "$WALLPAPER_DIR" -name "*.jpg" -type f -mtime +1 -delete
经过以上步骤,你应该已经拥有了一个完全自动化、可定制且健壮的卫星壁纸脚本。它不仅仅是一个桌面美化工具,更是一个了解 Bash 脚本自动化、网络请求、图像处理和系统集成的绝佳实践项目。你可以在此基础上无限扩展,比如集成天气预警信息、展示太阳活动图,甚至结合 AI 模型对云图进行风格迁移,创造出独一无二的动态桌面。