Dynamic Wallpaper 新手实战半小时让 Linux 壁纸按时间自动切换【免费下载链接】dynamic-wallpaperA simple bash script to set wallpapers according to current time, using cron job scheduler.项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-wallpaper如果你的 Linux 桌面从早到晚都挂着一张一模一样的壁纸那么 Dynamic Wallpaper 这个轻量级 bash 脚本工具就是为你准备的——它借助 cron 任务调度器让壁纸随当前时间自动流转清晨是晨光午后是晴空入夜是灯火。下面这篇文章会带你走完从拿到安装包到壁纸自动切换的完整流程全程只需要跟着命令行操作不涉及任何编程基础。开场你的桌面凭什么不认识现在几点设想一个常见的场景下午三点阳光正好你的屏幕却还停留在一张深夜的暗色壁纸整个人的工作状态都被拉低了半截而到了晚上加班时屏幕又是刺眼的白昼图。人需要感知时间桌面同样需要。Dynamic Wallpaper 正是为了解决这个桌面与时间脱节的小烦恼而生。它本质上是一个简洁的 shell 脚本内部准备了 24 套风格各异的壁纸集每套按小时拆分为 24 张图编号 0 到 23脚本读取当前小时数挑选对应编号的图片再调用系统工具把这张图设为壁纸。听起来不复杂但配合 cron 定时器后效果就是每小时一次、全天不重样的视觉刷新。从图中可以看到像aurora这样的风格自带浓郁的夜晚氛围极光在山峦与森林上空流动。如果这类画面能按你的作息时间出现在桌面上工作与休息的界限都会清晰很多。接下来我们就从安装开始一步步把它跑起来。上手把工具装进系统看到第一张壁纸动手之前先把三样依赖备齐Dynamic Wallpaper 本身不负责画壁纸它只负责选图和调用工具所以系统里必须先有它依赖的三个组件feh在窗口管理器下设置壁纸、cron提供定时调度能力、xrandr检测显示器XFCE 桌面尤其需要。脚本启动时会先做依赖检查缺了任何一个都会直接报错退出所以提前装好可以省去后面排错的工夫。不同发行版装法略有差异这里给出两个主流分支按你的系统选择一条执行即可# Debian / Ubuntu 系三个组件一条命令装齐 sudo apt install feh x11-xserver-utils cron # Arch Linux 系注意包名是 cronie sudo pacman -S feh xorg-xrandr cronie 小提示如果你不确定自己是什么发行版可以运行cat /etc/os-release查看ID字段再对照上面的命令选择。克隆仓库并执行安装脚本依赖就绪后下一步是获取项目本体。把它克隆到本地进入目录后运行安装脚本。这一步的关键在于理解install.sh做了什么它会把images图片目录和dwall.sh脚本复制到系统目录/usr/share/dynamic-wallpaper并在/usr/bin下创建一个名为dwall的软链接。这意味着安装完成后你在任何目录下敲dwall都能直接调用它。# 克隆项目仓库到当前目录 git clone https://gitcode.com/gh_mirrors/dy/dynamic-wallpaper # 进入项目目录 cd dynamic-wallpaper # 给安装脚本添加执行权限后运行 chmod x install.sh ./install.sh安装脚本执行到最后会打印一行绿色的Installed Successfully看到它说明文件已就位。安装期间需要输入 sudo 密码属于正常现象。验证安装先试跑再正式安装如果担心装坏了系统目录项目还贴心提供了一个test.sh。它在项目目录内直接运行、不写入任何系统路径效果等同于正式版非常适合用来先尝后买。建议按这个顺序走先用test.sh确认某套风格的效果满意后再执行./install.sh正式安装。# 在项目目录内试跑不修改系统文件 ./test.sh -s beach无论 test.sh 还是安装后的 dwall正确运行的输出都类似下面这样——先显示当前会话类型再确认正在应用的风格名[*] Setting wallpaper in x11 (ubuntu) session, using : gsettings set org.gnome.desktop.background picture-uri [*] Using style : beach从图中可以看到beach风格的白天画面明亮通透海面与天空层次分明。此刻你的桌面应该已经换成了这套风格里当前小时对应的那张图。第一次成功就这么简单。看一眼帮助菜单认识全部风格在正式配置自动切换之前建议先摸清自己有哪些风格可选。运行dwall -h会打印一张帮助菜单其中Available styles一行列出当前系统里全部已安装的风格名。这份清单以后会经常用到尤其是当你忘记某个风格怎么拼写的时候。# 打印帮助信息与全部可用风格 dwall -h仓库自带的风格相当丰富aurora极光、beach海滩、desert沙漠、forest森林、tokyo东京街景、mojave莫哈韦沙漠、firewatch山林守望……共 24 套风格名即目录名全部小写。你可以先随便挑两三套分别运行dwall -s 风格名找到最喜欢的那套再进入下一步。实战让壁纸按小时自动切换的完整配置为什么单次运行还不够必须借助 cron到这一步你运行的dwall -s beach只是在此刻换了一张壁纸一小时后它不会自己再动。要让壁纸持续跟随时间变化必须把它交给 cron 定时调度脚本每小时被唤醒一次读取当前小时数换上新图。这正是这个项目设计时的核心用法——它天生就是给作业调度器准备的。cron 的配置文件叫 crontab里面每一行代表一个定时任务。我们要做的是写入一条每小时的第 0 分钟执行一次 dwall的任务。但直接写还不行因为 cron 运行在 X 图形会话之外它不知道你的显示器在哪里所以必须先把环境变量喂给它。先收集环境变量再写入定时任务手动执行dwall正常、放进 cron 却毫无反应九成是环境变量缺失导致的。脚本需要用DISPLAY找到显示器用DBUS_SESSION_BUS_ADDRESS连接桌面会话总线。先在终端里把这几个关键值打出来记好# 输出当前会话的环境变量供写入 crontab 使用 echo $SHELL | $PATH | $DISPLAY | $DESKTOP_SESSION | $DBUS_SESSION_BUS_ADDRESS | $XDG_RUNTIME_DIR以常见的输出为例/usr/bin/bash | /usr/local/bin:/usr/bin | :0 | ubuntu | unix:path/run/user/1000/bus | /run/user/1000。其中DISPLAY:0表示第一块主显示器XDG_RUNTIME_DIR和DBUS_SESSION_BUS_ADDRESS是多显示器、GNOME 等环境下能否生效的关键。把定时任务写进 crontab并用两分钟验证拿到变量值后打开 crontab 编辑器写入任务。注意把命令里的环境变量值替换成你自己刚查到的内容风格名也可以换成你喜欢的任意一套。# 指定编辑器后打开 crontab 编辑界面 export EDITORvim crontab -e在编辑器中新增下面这一行env后面依次是环境变量和要执行的命令# 每小时第 0 分钟带上环境变量执行 dwall应用 beach 风格 0 * * * * env PATH/usr/local/bin:/usr/bin DISPLAY:0 DESKTOP_SESSIONubuntu DBUS_SESSION_BUS_ADDRESSunix:path/run/user/1000/bus /usr/bin/dwall -s beach保存退出后用crontab -l确认任务确实写进去了同时检查 cron 服务是否在运行# 列出当前用户的所有定时任务确认刚才那一行存在 crontab -l # 查看 cron 服务运行状态 systemctl status cron如果服务未启动用sudo systemctl start cron启动并用sudo systemctl enable cron设置开机自启。之后每到整点壁纸就会自动切换一次。对比上面两张东京街景就能直观理解这套机制的价值白天画面是阳光下的街道夜晚则是灯光点亮的街巷。同一风格、同一机位不同时段不同气质你的桌面从此有了时间感。⚠️ 注意如果你用的是 KDE、GNOME 这类桌面环境dwall会调用对应的qdbus或gsettings接口来换壁纸因此请确保 crontab 里的DESKTOP_SESSION与你实际登录的会话名称一致否则桌面环境可能识别不到命令来源。进阶把工具调教成你的私人风格加入自己的壁纸集自带的 24 套风格用腻了完全可以换成你自己的照片。规则只有一个图片必须按 0 到 23 命名对应 24 个小时格式为 jpg 或 png。图片不够 24 张也没关系用符号链接补足即可。# 第一步在系统壁纸目录下创建自己的风格目录假设叫 mywall sudo mkdir -p /usr/share/dynamic-wallpaper/images/mywall # 第二步把图片复制进去并改成 0.jpg、1.jpg……的格式 sudo cp ~/Pictures/photo_01.jpg /usr/share/dynamic-wallpaper/images/mywall/0.jpg sudo cp ~/Pictures/photo_02.jpg /usr/share/dynamic-wallpaper/images/mywall/1.jpg # 第三步图片不够时用软链接让多个小时共用同一张图 sudo ln -s /usr/share/dynamic-wallpaper/images/mywall/0.jpg /usr/share/dynamic-wallpaper/images/mywall/2.jpg完成后直接运行dwall -s mywall脚本会在Available styles里自动发现新风格。想每 15 分钟换一次照片幻灯片把 crontab 里的时间字段从0 * * * *改成*/15 * * * *即可语法完全通用。用 pywal 让整个桌面配色跟着壁纸走装好可选的pywal后-p参数会让脚本在换壁纸的同时提取图片主色调并同步应用到终端、状态栏等应用实现壁纸换、配色也换的联动体验。先安装 pywal再在 crontab 中为命令加上-p# 安装 pywal以 pip 为例 pip install pywal # 手动验证 pywal 模式是否正常 dwall -p -s sahara如果输出正常、终端配色已变化就把 crontab 里的命令改为/usr/bin/dwall -p -s sahara。 小提示pywal 是可选依赖不装也不影响核心换壁纸功能装错版本或与系统冲突时可以随时卸载。让登录开机后壁纸自动恢复cron 只负责每小时切换不负责你开机那一刻的画面。想要登录后立刻恢复上次的壁纸有两种轻量做法一是在 crontab 里加一条reboot任务二是创建一个 autostart 桌面文件。推荐前者因为它和现有定时任务放一起管理思路最统一# 打开 crontab 编辑器 crontab -e# 追加一行开机时立即应用一次 beach 风格 reboot /usr/bin/dwall -s beach把 HEIC 图片转换成可用格式从 Dynamic Wallpaper Club 等站点下载的壁纸通常是.heic格式脚本无法直接识别需要先转成 jpg 或 png。安装转换工具后用一行循环批量处理# Debian/Ubuntu 安装转换工具 sudo apt install libheif-examples # 进入存放 heic 文件的目录批量转为 jpg cd ~/Downloads/heic_images for file in *.heic; do heif-convert $file ${file/%.heic/.jpg}; done转换完成后按前面添加自己的壁纸集的步骤放入对应目录即可。排障遇到状况先查这张速查表即便每一步都按上文操作也难免有环境差异导致的小状况。下面这张表汇总了最高频的几类问题按现象 → 原因 → 处理三列对照排查比逐条翻日志快得多症状常见原因快速处理壁纸始终不自动切换定时任务没写入或 cron 服务未运行crontab -l确认任务存在systemctl status cron检查服务并启动手动执行正常、定时执行无反应cron 缺少 DISPLAY 等环境变量在 crontab 命令前补全env DISPLAY:0 ...前缀提示Invalid style name风格名拼写错误或目录不存在dwall -h查看合法风格清单核对大小写提示Could not find feh依赖组件缺失按发行版安装 feh / xrandr / cronWayland 会话下不生效缺少 oguri 守护进程安装 oguri 并启动Sway 用户先pkill swaybg再启用XFCE 桌面换壁纸失败显示器编号与脚本默认值不一致运行xfconf-query -c xfce4-desktop -m观察屏幕参数并调整重启后壁纸丢失未配置开机自启添加reboot定时任务或 autostart 桌面文件⚠️ 注意当你解决了问题、向项目提交反馈时附上echo $DESKTOP_SESSION的输出会非常有帮助——这是排查环境识别失败类问题最直接的信息。收尾从一张静态图到一套会呼吸的桌面回顾整条路径你先备齐依赖、完成安装跑通了第一次手动换壁纸接着把dwall交棒给 cron实现了每小时自动切换再通过自建壁纸集、pywal 联动和开机自启把它打磨成贴合自己习惯的工具。此刻再回头看看开头那个桌面不认识时间的困扰——它已经被这套脚本 定时器的组合轻松化解了。如果还想继续深入建议优先阅读项目目录里的README.md其中包含各桌面环境的适配说明、更多壁纸资源的获取方式以及dwall.sh脚本本身的分支逻辑——当你理解了它如何按DESKTOP_SESSION挑选设置器就基本掌握了自行扩展的全部钥匙。愿你的桌面从此跟随晨昏流转每一小时都有新的风景。【免费下载链接】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),仅供参考