尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从壁纸纹丝不动到每小时自动换景:dynamic-wallpaper 定时任务实战与避坑记录

从壁纸纹丝不动到每小时自动换景: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-wallpaperdynamic-wallpaper 是一个用 bash 编写的轻量级动态壁纸工具它依靠 cron 定时任务调度器根据当前时间自动更换桌面壁纸内置二十多套按小时编排的壁纸主题。这篇文章不打算罗列常见错误清单而是想带你完整走一遍安装→配置定时任务→日常使用→排查故障的真实路径把最容易绊倒新手的坑埋在你第一次动手的每一步里。一个清晨的壁纸事故想象这样一个早晨你掀开电脑期待看到清晨的阳光洒在桌面上结果屏幕还停留在昨晚那张深蓝色的极光——壁纸纹丝不动。于是你打开搜索框输入Linux 动态壁纸自动更换最终找到了 dynamic-wallpaper一个把壁纸按小时编排好、交给 cron 定时任务去执行的 bash 小工具。它的想法很简单每个壁纸主题里都有 24 张图分别对应一天中的 0 点到 23 点cron 每到整点调用一次dwall桌面就跟着时间换装。听起来不复杂但真正动手时你可能会在依赖、cron 环境变量、Wayland 兼容这些环节上各摔一跤。别急我们一步步来。装好工具前的三件套准备在安装之前先说说 dynamic-wallpaper 依赖什么以及为什么需要它们feh负责把壁纸真正铺到屏幕上这是它在窗口管理器下的主力工具cron定时任务调度器相当于给 dwall 上了发条的闹钟没有它壁纸就不会自动换xrandr查询显示器信息XFCE 桌面环境切换壁纸时会用到它。先补齐这三样免得安装后一运行就报找不到依赖# Debian / Ubuntu 系 sudo apt install feh x11-xserver-utils cron # Arch 系 sudo pacman -S feh xorg-xrandr cronie小提示如果你只想先体验一下效果仓库里自带了test.sh它可以在不安装的情况下直接在当前目录跑适合先看再买。安装与第一次运行看清0-23的换图逻辑克隆仓库并预演一遍git clone https://gitcode.com/gh_mirrors/dy/dynamic-wallpaper cd dynamic-wallpaper chmod x test.sh install.sh # 先试跑 beach 风格确认当前时刻应该显示哪张图 ./test.sh -s beach觉得不错再正式安装./install.sh安装脚本做的事很朴素把images目录和dwall.sh复制到/usr/share/dynamic-wallpaper然后在/usr/bin下建立dwall软链接。所以安装完成后你可以在任何目录直接执行dwall -s firewatch如果屏幕上的壁纸立刻变成了火警瞭望塔的风景说明工具本身工作正常。此时它的工作流程是脚本读取当前小时数比如下午 3 点去firewatch目录里找3.jpg或3.png再用对应的桌面环境命令把它设成壁纸。你甚至可以看一眼缓存文件确认它选了哪张cat ~/.cache/dwall_current这就是按小时换图的全部秘密没有复杂的算法只有一张时间表——而那张时间表正是接下来要配置的 cron 定时任务。让定时任务真正跑起来cron 配置的完整链路很多用户卡在最后一步手动执行dwall -s xxx一切正常但桌面就是不自动换。问题几乎都出在同一个地方——cron 运行时的环境和你终端里的环境不一样。为什么 cron 看不见你的显示器cron 守护进程由系统启动它不知道你在哪个桌面会话登录也不知道你的DISPLAY变量是什么。而壁纸工具恰恰需要这些信息才能找到屏幕。你可以先把自己当前的环境变量抄下来echo $SHELL | $PATH | $DISPLAY | $DESKTOP_SESSION | $DBUS_SESSION_BUS_ADDRESS | $XDG_RUNTIME_DIR把输出里的值记好稍后写 cron 任务时要原样搬进去。写一条每小时换一次的 cron 任务用crontab -e打开编辑首次会提示选择编辑器选 vim 或 nano 都行加入这样一行0 * * * * env PATH/usr/local/bin:/usr/bin DISPLAY:0 DESKTOP_SESSIONgnome DBUS_SESSION_BUS_ADDRESSunix:path/run/user/1000/bus /usr/bin/dwall -s firewatch逐段拆解一下这行命令你就不会再怕它了0 * * * *每小时的第 0 分钟执行一次也就是整点换壁纸env ...cron 的快递专线把终端里才有的环境变量显式传给dwall其中DISPLAY:0最关键/usr/bin/dwall -s firewatch真正干活的命令风格名可以换成任何你喜欢的主题。如何确认定时任务真的在跑配置完成后做两个体检# 看任务是否写入成功 crontab -l | grep dwall # 看 cron 服务本身是否在运行Arch 上是 cronie.service systemctl status cron如果服务没启动先拉起来再设开机自启sudo systemctl start cron sudo systemctl enable cron到这里你的壁纸已经进入了每小时自动换装的节奏。接下来是一些让体验更顺手的小技巧。日常进阶从能换到好用快速查看与切换风格。想换主题先dwall -h它会把所有可用风格列出来——aurora、beach、bitday、firewatch、mojave、tokyo 等二十多套。找到心仪的名字改一行 cron 任务里的风格名即可无需重装。让终端配色跟着壁纸走。如果安装了 pywal可以用-p参数让桌面配色方案随壁纸联动dwall -p -s sahara终端、polybar、rofi 等支持 pywal 的应用会自动切换到与当前壁纸匹配的色板视觉上会非常统一。塞进你自己的壁纸包。官方壁纸看腻了也没关系dwall 支持自定义主题。规则很简单把图片命名为0.jpg或.png到23.jpg放到/usr/share/dynamic-wallpaper/images/你的风格名/目录下即可。图片不够 24 张也没关系可以用符号链接凑数缺图的位置会自动跳过。sudo mkdir -p /usr/share/dynamic-wallpaper/images/my-style sudo cp ~/下载/我的壁纸/*.jpg /usr/share/dynamic-wallpaper/images/my-style/ # 把文件重命名为 0.jpg ~ 23.jpg 后即可使用 dwall -s my-style开机自动恢复壁纸。登录系统后壁纸不会自己回来把dwall -s 风格名 写进~/.bashrc或者加一条reboot的 cron 任务开机时就会自动设定当前时段该有的壁纸。异常自查清单一张表排查大部分故障遇到问题先别慌也别急着卸载重装。把下面这张表当体检单过一遍八成的情况一分钟内就能定位你看到的现象最可能的原因值得一试的检查壁纸一直不换cron 任务没配上或服务未运行crontab -l看任务在不在systemctl status cron看服务活没活手动执行正常、定时任务没反应cron 环境缺 DISPLAY 等变量给 cron 行加上env DISPLAY:0 ...前缀报错 Invalid style name风格名拼错或目录不存在dwall -h对照可用列表ls /usr/share/dynamic-wallpaper/images报错找不到 feh / crontab依赖未安装按文中命令安装feh、cron、xrandrWayland 会话下不生效oguri 守护进程没启动安装并运行ogurictl startsway 用户先pkill swaybgXFCE 下换壁纸没反应显示器编号与脚本默认值不一致用xfconf-query -c xfce4-desktop -m观察实际 screen/monitor 编号其中最容易迷惑人的是手动正常、定时失败这一条请记住cron 不等于你的终端它没有你登录会话里的环境信息所有相关变量都得在命令里显式声明。遇到多显示器或远程登录的情况DISPLAY的值可能不是:0用echo $DISPLAY确认后再改。写在最后让壁纸自己会过日子从最初那个清晨壁纸纹丝不动的小事故到装好工具、配好 cron、甚至换上自己的壁纸包你其实已经摸清了这类定时任务驱动型工具的全套玩法工具本身往往很简单真正的门槛在于让定时任务继承你桌面会话的环境。理解了这一层往后无论遇到什么类似脚本你都能举一反三。dynamic-wallpaper 的核心逻辑都在dwall.sh这一个文件里想看实现细节可以直接翻源码想深入了解某个风格的来源每个主题目录里通常也有 README 标注图片来源。如果排查一圈仍然无解带着echo $DESKTOP_SESSION和echo $XDG_SESSION_TYPE的输出去项目里提交 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),仅供参考
返回列表