ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux 定时壁纸从零到一:dynamic-wallpaper 安装、自动切换与避坑全指南

2026/8/15 17:46:37 拓冰建站 浏览量
Linux 定时壁纸从零到一:dynamic-wallpaper 安装、自动切换与避坑全指南

Linux 定时壁纸从零到一: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就是这样一个轻量级工具——它用纯 bash 脚本配合 cron 任务调度器,根据当前时间自动更换壁纸,全程不占资源、不装图形界面,非常适合 Linux 新手快速体验"随时间呼吸的桌面"。这篇文章会带你从零走完整个流程:装依赖、跑起来、配置自动切换,再把新手最容易踩的坑一次讲透。

一个脚本如何读懂时间:dwall 的工作原理

先别急着敲命令,花 30 秒搞清楚它"为什么能自动换壁纸",后面排错会省很多事。

dwall 的核心逻辑其实非常简单:

  • 项目里的每一套壁纸风格都按0 到 23 编号,正好对应一天 24 个小时;
  • 运行脚本时,它执行date +%k拿到当前小时数,比如现在是下午 3 点就得到15
  • 接着去/usr/share/dynamic-wallpaper/images/<风格>/15.jpg找到对应图片并设置到桌面;
  • 但脚本只在你运行它的那一刻生效,所以需要一个"定时闹钟"来反复叫醒它——这就是 cron 的职责。

一句话总结:dwall 负责"选对图",cron 负责"到点执行",两者缺一不可。这也解释了为什么文章后面你会反复看到这两个词同时出现。

同样是 aurora 风格,深夜时桌面会切换到这张紫绿交织的极光画面,随真实时间流动

安装前先补齐三件套:feh、xrandr 与 cron

dwall 启动时会在后台做一次"体检",检查fehxrandrcrontab三个命令是否可用,缺任何一个都会直接报错退出。所以最稳妥的顺序是:先把依赖装齐,再装脚本本身。

# 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

为什么是这三个?feh负责在窗口管理器下真正把图片"铺"到桌面;xrandr用于多显示器场景下定位屏幕(XFCE 桌面尤其依赖它);cron则是定时任务的执行引擎。

装完之后,把仓库克隆到本地并运行安装脚本:

git clone https://gitcode.com/gh_mirrors/dy/dynamic-wallpaper cd dynamic-wallpaper chmod +x install.sh ./install.sh

安装脚本会做两件事:把images目录和dwall.sh复制到/usr/share/dynamic-wallpaper,同时在/usr/bin下创建名为dwall的软链接。所以装好后你可以在任何位置直接敲dwall命令。

提示:想先"试穿"再决定买不买?仓库里的test.sh可以直接在当前目录运行,效果和正式版完全一致,适合装之前先看看各风格长什么样。

第一次运行:从二十多套风格里挑一个

安装完成后,先看看这个工具能做什么:

dwall -h

输出里会列出全部可用风格:aurorabeachbitdaychihuahuancliffscolonydesertearthexodusfactoryfirewatchforestgradienthomeislandlakelakesidemarketmojavemoonmountainsroomsaharastreettokyo……既有 5K 超清实拍,也有像素风和极简渐变,风格跨度很大。

选定之后,用-s参数套用:

dwall -s beach # 切换到海滩风格 dwall -s mojave # 切换到极简沙漠风格

如果风格名拼写有误,脚本会提示Invalid style name并退出——这也是一种"防呆"设计,避免你误操作改坏壁纸。

beach 风格白天的画面:金黄沙滩配碧蓝海水,下午的桌面就是这种明快的夏日感

顺便提一句,如果你装了 pywal 并希望壁纸配色同步影响终端、状态栏等其他应用,可以加-p参数:

dwall -p -s sahara

让壁纸按时切换:cron 定时任务配置详解

手动运行只能换一次,真正的"动态"要靠 cron 撑起来。配置分三步:

第一步,确认 cron 服务活着。不同发行版服务名略有差异,Arch 系是cronie

systemctl status cronie

如果没在运行,启动并设置开机自启:

sudo systemctl enable cronie --now

第二步,打开当前用户的定时任务表:

export EDITOR=vim crontab -e

第三步,追加一行"每小时整点执行一次"的任务:

0 * * * * /usr/bin/dwall -s firewatch

为什么是0 * * * *?这五个字段从左到右分别是"分钟、小时、日、月、周",所以它表示"每个小时的整点"都跑一次 dwall,恰好和壁纸按小时编号的设计对应。

写完保存后,用crontab -l检查任务是否写入成功。想要换风格也很简单,删除旧行再写新行即可。

定时任务明明存在,壁纸却纹丝不动?先查环境变量

这是最典型的"手动正常、自动失效"场景:你在终端里敲dwall -s xxx一切正常,可 cron 一到点就静默失败。原因在于cron 运行在完全独立的环境中,它不认识你的显示器、也不知道该把画面送到哪。

打个比方:dwall 就像一位外卖骑手,需要"收货地址"才能把餐送到。你在图形会话里登录时,系统已经悄悄把地址(DISPLAYXAUTHORITYDBUS_SESSION_BUS_ADDRESS等)塞给了终端;而 cron 是后台调度员,什么都没给骑手。

解决方案有两种,任选其一:

方案 A:把环境变量写进 cron 任务行。先用echo $DISPLAY查看当前显示编号(通常为:0),再补全任务:

0 * * * * env DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" /usr/bin/dwall -s beach

方案 B:做一个包装脚本,把地址"预装"好。创建/usr/local/bin/dwall-wrapper.sh

#!/bin/bash export DISPLAY=:0 export XAUTHORITY=$HOME/.Xauthority dwall -s beach

给脚本加执行权限后,cron 任务就只写一句:

0 * * * * /usr/local/bin/dwall-wrapper.sh

注意:DISPLAY在多显示器或远程登录环境下可能不是:0,务必以echo $DISPLAY的实际输出为准,照抄别人的配置往往会踩坑。

Wayland 会话下的特殊处理:靠 oguri 中转

如果你用的是 Wayland 合成器(如 sway、hyprland),情况会更特殊:feh这类基于 X11 的工具在 Wayland 下基本失效。dwall 对此的应对方案是借助oguri这个壁纸守护进程来中转。

安装并启动 oguri(Arch 系可通过 AUR 安装oguri-git):

ogurictl start

然后在 cron 里通过 oguri 的命令行接口设置壁纸。如果你原本用的是 sway,记得先停掉占着壁纸位的swaybg,否则画面会被它盖住:

pkill swaybg

提示:dwall 在 Wayland 下运行时会主动检查 oguri 进程是否存在,如果没启动会直接提示你"daemon is not running",这时候先ogurictl start就对了。

把生活照变成每小时自动切换的私人壁纸

dwall 也完全支持自定义壁纸集,步骤很简单:

  1. 准备一组图片(支持 jpg / png),按0.jpg1.jpg……23.jpg的规则重命名,对应一天 24 个小时;图片不够 24 张时,可以用软链接补齐;
  2. /usr/share/dynamic-wallpaper/images下新建一个目录(比如mypics),把图片放进去;
  3. 运行dwall -s mypics,你的私人动态壁纸就上线了。

如果你手上是.heic格式的壁纸(比如从壁纸社区下载的),需要先转换成 jpg 再使用:

# 先安装转换工具 sudo apt install libheif-examples # Debian/Ubuntu sudo pacman -S libheif # Arch # 批量转换当前目录下的 heic 文件 for file in *.heic; do heif-convert "$file" "${file/%.heic/.jpg}"; done

写在最后:两个让体验更完整的小习惯

最后分享两个锦上添花的用法,都很简单但很实用:

  • 开机自动恢复壁纸:把dwall -s 你的风格 &写进窗口管理器的自启动文件,或追加到~/.bashrc,登录后壁纸立刻回到正确的时段画面;
  • 当成电子相册轮播:如果你不想按时间换图,也可以把 cron 改成每 15 分钟或每小时执行一次,让喜欢的照片轮流登场。

到这里,你已经完整掌握了 dynamic-wallpaper 的安装、自动化与排错三板斧。剩下的乐趣就是慢慢逛那 20 多套风格,挑一套和你的桌面气质最搭的。遇到文中没覆盖的情况,翻翻仓库里的 README 和脚本注释,往往能找到答案——毕竟它本质上就是一个读得懂的 bash 脚本,这也是这类工具最迷人的地方。

【免费下载链接】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),仅供参考