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,并且有可用的包管理器

动手之前,先把几个必要的依赖补齐。脚本启动时会逐一检查fehxrandrcrontab是否存在于系统路径中,缺一就会直接报错退出,所以提前装好能省去后面的排错环节。

依赖作用
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?"

  • 原因:脚本开头的依赖预检没有通过。它要求fehxrandrcrontab三个命令同时在系统中可用,缺失任意一个都会以同样的句式报错,只是报错名称不同。
  • 对策:缺哪个就装哪个,对照上文表格里的发行版命令补齐即可。装完再跑一次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.jpg1.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 运行在独立的精简环境中,不会继承你桌面会话里的环境变量——DISPLAYXAUTHORITY这类图形环境必需的变量在 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下新建风格目录,把图片命名为023(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),仅供参考