Dynamic Wallpaper 如何定时自动换壁纸?一份从安装到排错的完整指南
Dynamic Wallpaper 如何定时自动换壁纸?一份从安装到排错的完整指南
【免费下载链接】dynamic-wallpaperA simple bash script to set wallpapers according to current time, using cron job scheduler.项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-wallpaper
Dynamic Wallpaper 是一款借助 cron 任务调度器、按当前时间自动切换壁纸的轻量级 bash 脚本工具:它会读取系统的小时数,从 24 张同风格图片中挑出对应的那一张铺满桌面,让你从清晨到深夜始终置身于应景的画面中。这篇文章按照"准备 → 运行 → 定时 → 排错 → 进阶 → 卸载"的完整旅程,把 Dynamic Wallpaper 从安装到日常维护的所有要点一次讲透。
开箱上手:Dynamic Wallpaper 安装前的系统准备
Dynamic Wallpaper 的定位是"轻量":核心就是一个 bash 脚本,没有常驻进程,也不依赖任何重型框架。它兼容主流的桌面环境(GNOME、KDE、XFCE、Cinnamon、MATE 等)和窗口管理器,前提是你的系统满足两点:运行 Linux,并且有可用的包管理器。
动手之前,先把几个必要的依赖补齐。脚本启动时会逐一检查feh、xrandr、crontab是否存在于系统路径中,缺一就会直接报错退出,所以提前装好能省去后面的排错环节。
| 依赖 | 作用 |
|---|---|
feh | 在窗口管理器下设置壁纸的核心工具 |
xrandr | 多显示器 / XFCE 桌面环境下定位屏幕和输出 |
cron/cronie | 提供定时任务调度能力 |
pywal(可选) | 根据壁纸自动提取配色,联动终端等应用 |
不同发行版的安装命令略有差异,按你所在的系统选择一条执行即可:
# Debian / Ubuntu sudo apt install feh x11-xserver-utils cron # Fedora / RHEL sudo dnf install feh xorg-x11-server-utils cronie # Arch Linux sudo pacman -S feh xorg-xrandr cronie依赖就绪后,获取代码并安装:
git clone https://gitcode.com/gh_mirrors/dy/dynamic-wallpaper cd dynamic-wallpaper ./install.sh安装脚本做的事很简单:把images目录和dwall.sh复制到/usr/share/dynamic-wallpaper,并在/usr/bin下创建名为dwall的软链接。装完敲一句dwall,看到彩色 Banner 和风格列表,就说明一切正常了。
初次运行:认识风格参数与壁纸资源
安装完成后,第一个动作是查看帮助信息,确认哪些风格可用:
dwall -h输出末尾的 "Available styles" 部分会列出仓库里所有已内置的壁纸集合,共 25 套左右,覆盖了从自然风光到城市夜景的各种口味:
| 风格 | 主题 | 风格 | 主题 |
|---|---|---|---|
aurora | 极光之夜 | beach | 海滩光影 |
bitday | 像素风昼夜 | chihuahuan | 奇瓦瓦沙漠 |
cliffs | 海岸悬崖 | colony | 概念艺术城 |
desert | 荒漠丘陵 | earth | 地景俯瞰 |
exodus | 沙漠山野 | factory | 工业厂区 |
firewatch | 游戏同款山色 | forest | 林间晨昏 |
gradient | 极简渐变 | home | 温馨居所 |
island | 海岛风情 | lake | 湖光潋滟 |
lakeside | 湖畔小屋 | market | 街市烟火 |
mojave | 莫哈韦沙丘 | moon | 低多边形月夜 |
mountains | 群山星空 | room | 室内一隅 |
sahara | 撒哈拉沙海 | street | 城市街角 |
tokyo | 东京夜景 |
选中心仪的风格,用-s参数应用:
dwall -s beach你会看到类似[*] Using style : beach的提示,桌面立即切换为当前小时对应的那张图片。这套机制的理解要点在于:每个风格目录下都存放了编号 0 到 23 的图片,脚本通过date +%k拿到当前小时,再据此选取同名文件——这就是 Dynamic Wallpaper 能"跟着时间走"的根本原因。
如果你对某种风格拿不定主意,也不用急着安装,仓库里附带了一个test.sh,它使用当前目录下的图片运行,效果与安装版完全一致:
./test.sh -s tokyo自动化进阶:Dynamic Wallpaper 定时换壁纸的 cron 配置
手动运行只是开胃菜,Dynamic Wallpaper 的设计初衷就是配合 cron 这类定时调度器使用——让它每个整点悄悄换一张壁纸,你几乎感觉不到它的存在。
第一步:确保 cron 服务在运行
不同发行版的服务名不同,先启动并设为开机自启:
# Debian / Ubuntu sudo systemctl enable --now cron # Arch Linux sudo systemctl enable --now cronie启动后检查服务状态,确认处于active (running):
systemctl status cron第二步:写入每小时执行一次的定时任务
编辑当前用户的 crontab:
crontab -e在文件末尾追加一行,让每个整点执行一次壁纸切换(把风格换成你喜欢的):
0 * * * * /usr/bin/dwall -s beach保存退出后,用下面的命令确认任务已经落盘:
crontab -l | grep dwall看到与刚才一致的那一行,就说明定时换壁纸已经生效。从下一个整点开始,桌面会每过一个小时自动更新一次。
第三步:灵活调整切换频率与风格
cron 表达式的自由度很高,你可以把壁纸当作幻灯片来用:
| 需求 | crontab 表达式 |
|---|---|
| 每小时整点切换 | 0 * * * * /usr/bin/dwall -s beach |
| 每 15 分钟切换 | */15 * * * * /usr/bin/dwall -s beach |
| 只在白天切换 | 0 7-19 * * * /usr/bin/dwall -s firewatch |
| 开机时恢复当前时间壁纸 | @reboot /usr/bin/dwall -s beach |
想换风格时,重新执行crontab -e,把那行里的风格名改掉即可,无需重装任何东西。
排错时刻:Dynamic Wallpaper 报错解决的"症状—原因—对策"流程
再顺滑的工具也难免磕绊。下面把新手最常遇到的几种情况,统一放进"症状 → 原因 → 对策"的诊断框架里,遇到问题按这个顺序自查即可。
症状一:手动运行一切正常,壁纸却从不自动更换
原因:绝大多数时候不是脚本坏了,而是定时任务根本没配好——要么 crontab 里没有任务,要么 cron 服务没有启动。这两种情况的表现都是"手动能用、自动失效"。
对策:先查任务是否存在:
crontab -l | grep dwall若无输出,回到上一节补上任务行;若任务存在但仍不生效,再查服务状态:
systemctl status cron服务不在运行状态就执行
sudo systemctl enable --now cron(Arch 系把服务名换成cronie)重新拉起。
症状二:运行时报 "ERROR: Could not find 'feh',is it installed?"
- 原因:脚本开头的依赖预检没有通过。它要求
feh、xrandr、crontab三个命令同时在系统中可用,缺失任意一个都会以同样的句式报错,只是报错名称不同。 - 对策:缺哪个就装哪个,对照上文表格里的发行版命令补齐即可。装完再跑一次
dwall -s beach,预检通过后就会正常进入壁纸设置环节。
症状三:报 "Invalid style name",风格始终应用不上
原因:传给
-s的参数与内置风格列表对不上。常见诱因是拼写错误(比如把mojave写成mojava)、大小写不符,或者安装目录里的图片被改动过。对策:先执行
dwall -h,从 "Available styles" 部分原样复制一个风格名再试;同时确认安装目录完好:ls /usr/share/dynamic-wallpaper/images只要目录结构正常,风格名与列表一致,这条报错就会消失。
症状四:偶发 "Invalid image file" 提示
- 原因:脚本在风格目录里找不到与当前小时编号匹配的图片文件。通常是自定义壁纸时图片格式不是 jpg/png,或文件名没有按 0-23 编号导致。
- 对策:检查对应风格目录下的文件命名与扩展名,把图片整理成
0.jpg、1.jpg这样的规范格式后重试。
高手之路:Dynamic Wallpaper Wayland 配置与环境变量包装脚本
X11 时代装完就能用,但在 Wayland 合成器(如 sway、hyprland、GNOME Wayland)下,事情会变得微妙一些——传统 X11 工具无法直接操作 Wayland 的壁纸层,需要额外的桥接方案。
Wayland 会话的适配思路
脚本会读取XDG_SESSION_TYPE环境变量:检测到wayland时,不再调用 feh,而是改用ogurictl守护进程来设置壁纸。因此 Wayland 用户需要额外安装 oguri(Arch 可通过 AUR 安装oguri-git),并保证它在后台运行:
ogurictl start如果用了 sway,建议先停掉默认的swaybg再启动 oguri,避免两个进程抢着画壁纸:
pkill swaybg完成后,Wayland 会话下的 cron 任务可以这样写,让定时换壁纸照常运转:
0 * * * * eval ogurictl output '*' --image $(dwall -s beach | grep image | cut -d' ' -f3)为什么 cron 里的 dwall 总是静默失败
不少用户会遇到一个诡异现象:手动执行dwall一切顺利,放进 crontab 后却毫无反应。原因是 cron 运行在独立的精简环境中,不会继承你桌面会话里的环境变量——DISPLAY、XAUTHORITY这类图形环境必需的变量在 cron 里默认是空的,脚本自然找不到显示器。
解决办法是写一个包装脚本,把关键变量在脚本内补全。新建/usr/local/bin/dwall-wrapper.sh:
#!/bin/bash export DISPLAY=:0 export XAUTHORITY=$HOME/.Xauthority export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus export XDG_RUNTIME_DIR=/run/user/$(id -u) dwall -s beach赋予执行权限:
chmod +x /usr/local/bin/dwall-wrapper.sh然后把 crontab 里的任务行替换为包装脚本路径:
0 * * * * /usr/local/bin/dwall-wrapper.sh如果不想新建脚本,也可以在 crontab 行内用env前缀一次性注入变量:
0 * * * * env DISPLAY=:0 XAUTHORITY=/home/你的用户名/.Xauthority /usr/bin/dwall -s beach需要确认自己会话的实际值,随时可以用echo $DISPLAY查看;多显示器环境下 DISPLAY 可能不是:0,以实际输出为准。
善后收尾:干净卸载与后续资源指引
如果你尝试了以上所有方案仍然不顺,或者想换一台机器重来,Dynamic Wallpaper 的卸载同样干脆。回到仓库目录执行:
./uninstall.sh脚本会删除/usr/share/dynamic-wallpaper目录和/usr/bin/dwall软链接。别忘了顺手清理定时任务:
crontab -e删除与 dwall 相关的任务行(或直接crontab -r清空全部任务),卸载才算真正干净。
如果你打算长期使用,还有几个小技巧值得收藏:
- 自定义壁纸:在
/usr/share/dynamic-wallpaper/images下新建风格目录,把图片命名为0到23(jpg 或 png),重启桌面即出现在风格列表中,相当于把 Dynamic Wallpaper 当成每小时轮播个人照片的幻灯片。 - 配色联动:配合
-p参数可以让 pywal 从壁纸提取色板,终端、状态栏随之变色,桌面整体感会强很多。 - 开机恢复:在 autostart 或
@reboot任务里加入dwall -s 你的风格,每次登录后壁纸都会回到与当前时间匹配的画面。
至此,从安装、选风格、配定时,到排查报错、适配 Wayland 与补齐环境变量,你已经掌握了 Dynamic Wallpaper 的全部核心用法。下一步,建议花几分钟通读项目 README 中关于自定义壁纸与 HEIC 图片转换的章节,了解更多扩展可能;遇到文档没有覆盖的问题,带上echo $DESKTOP_SESSION的输出去提交 issue,开发者通常很快就能定位。祝你每天开机,都能撞见恰好属于这一刻的风景。
【免费下载链接】dynamic-wallpaperA simple bash script to set wallpapers according to current time, using cron job scheduler.项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-wallpaper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考