公司动态
如何让 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-wallpaperDynamic Wallpaper 是一个靠 cron 定时任务按当前时间自动更换壁纸的轻量级 bash 工具装上它你的 Linux 桌面也能像 macOS 系统壁纸那样随着昼夜流转。这篇文章会按先理解原理、再动手安装、后配置定时、最后自由定制的顺序带你完成从零到玩转动态壁纸的全过程并在文末附上一套高效的排障思路让你遇到问题时不用再到处翻资料。阅读完本文你将掌握三件事如何让壁纸随一天的时间自动更换、如何让这套机制适配你手头的桌面环境、以及如何把个人照片变成专属的壁纸库。先看懂原理它凭什么知道现在是几点很多第一次接触的朋友会好奇一个脚本是怎么做到到了下午自动换一张图的其实逻辑非常朴素。每个壁纸风格比如 aurora、beach、tokyo目录下都整齐地放着 24 张图片编号从 0 到 23恰好对应一天中的 24 个小时。脚本运行时先读取系统当前的小时数再挑出对应编号的图片设置为桌面背景——0 点是深夜12 点是正午19 点就是傍晚。下面用 aurora 风格的两张图对比一下差异一目了然午夜0 时正午12 时手动运行脚本时它只完成当下这一刻的设置而让它持续跟着时间走靠的则是任务调度器 cron。所以整个工具可以拆成两个角色dwall负责挑图并设置cron 负责每隔一段时间叫醒它一次。理解了这层分工后面所有配置和排障都会变得清晰。项目内置了 25 套风格主题覆盖极光和海滩等自然风光也包含东京夜景、渐变、像素画这类都市与艺术向的选择。下面是几个有代表性的风格风格画面感受aurora午夜极光冷色调为主梦幻感强beach海滩一日的光线变化明亮通透firewatch山湖森林剪影色调柔和耐看tokyo都市夜景暖黄灯光与冷蓝夜色交织gradient纯色渐变极简耐看适合不喜欢具象画面的用户其余风格bitday、mojave、sahara、moon 等可以通过dwall -h查看完整清单这一步我们在第三节细说。动手前先备好三个零件依赖安装安装 Dynamic Wallpaper 之前建议先确认系统里有没有三样东西它们各自承担明确职责fehX11 环境下设置壁纸的核心工具很多窗口管理器都靠它。cron负责定时调度的服务壁纸自动更换依赖它按计划触发。xrandr读取显示器参数的工具主要供 XFCE 桌面使用。根据你的发行版用对应命令补齐即可# 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 如果跳过了这一步直接运行脚本会给出类似 ERROR: Could not find fehis it installed? 的提示并退出。看到这类报错不用慌按提示把缺的那个命令装上就行——它的措辞已经把答案告诉你了。依赖就绪后拉取项目源码并执行安装脚本git clone https://gitcode.com/gh_mirrors/dy/dynamic-wallpaper cd dynamic-wallpaper ./install.sh安装脚本会把图片资源和脚本复制到/usr/share/dynamic-wallpaper并在/usr/bin/dwall建立软链接方便全局调用。如果提示没有执行权限先运行chmod x install.sh再执行。仓库里还附带了一个test.sh想先观察效果再正式安装的话可以拿它试运行。首次运行先手动验证一个风格安装完成后在终端输入dwall -h会看到欢迎界面和 Available styles 风格列表。挑选一个喜欢的风格手动应用一次这是验证环境是否正常的黄金方法dwall -s beach如果终端显示[*] Using style : beach且桌面背景立即切换说明脚本、设置器和图片资源全部就绪可以放心进入下一步的定时配置。这一阶段最容易踩的坑是风格名拼写错误报错通常是[!] Invalid style name : xxx。遇到时对照dwall -h输出的列表逐字核对即可。需要说明的是手动运行只能设置当前小时对应的一张图这很正常——自动轮换本来就是 cron 的工作。让改变自动发生配置 cron 定时任务这一步是整个动态壁纸的核心也是新手最容易卡住的地方。先说清楚为什么要写一串长长的环境变量cron 守护进程在后台独立运行它启动的任务不在你的图形会话里自然拿不到DISPLAY、DBUS_SESSION_BUS_ADDRESS这些与桌面相关的信息。如果不把这些变量喂给任务壁纸脚本就会看不见你的显示器导致定时执行失败而手动运行却一切正常。首先把自己会话里的关键变量值查出来echo $SHELL | $PATH | $DISPLAY | $DESKTOP_SESSION | $DBUS_SESSION_BUS_ADDRESS | $XDG_RUNTIME_DIR然后编辑定时任务crontab -e加入下面这一行并把其中Openbox、:0、/run/user/1000替换成你刚查到的实际值0 * * * * env PATH/usr/local/bin:/usr/bin DISPLAY:0 DESKTOP_SESSIONOpenbox DBUS_SESSION_BUS_ADDRESSunix:path/run/user/1000/bus /usr/bin/dwall -s firewatch用crontab -l确认任务已经写入接下来每到整点桌面壁纸就会自动切换到当前小时对应的那张图。如果想调整频率把开头的0 * * * *换成*/15 * * * *就能做到每 15 分钟换一次当作照片轮播来用。之后想换风格不用清空全部任务直接crontab -e把行尾-s后面的风格名改掉再保存即可。补充让壁纸在开机后也在线重启电脑后cron 任务虽然还在但刚登录的会话环境未必完整桌面可能会停在一张旧图上。有两个办法补上这个空档一是在 crontab 里加一行reboot任务让系统启动时就执行一次dwall二是把命令写进桌面的自启动目录例如在~/.config/autostart/dwall.desktop中填入 Exec 配置指向/usr/bin/dwall -s firewatch登录后自动恢复壁纸。X11、Wayland 与常见桌面一张表看懂差异不同桌面环境设置壁纸的方式各不相同脚本会在运行时根据XDG_SESSION_TYPE和DESKTOP_SESSION自动挑选合适的设置器。了解下面这张对照表有助于你判断自己的环境是否被支持场景背后使用的工具注意事项X11 GNOME/KDE/Cinnamon 等主流桌面gsettings / qdbus 等脚本自动识别一般无需干预cron 行里带上环境变量即可X11 Openbox、i3 等窗口管理器feh --bg-fill环境变量务必齐全否则静默失败XFCExfconf-query xrandr需要安装 xrandr脚本会自动探测屏幕与显示器编号Waylandsway、hyprland 等oguri 守护进程需先启动 ogurictl startsway 用户建议先结束 swaybg如果用的是 Wayland 会话记得先安装并启动 oguriArch 用户可通过系统包管理器或 AUR 安装否则脚本会提示 oguri daemon is not running 并退出。这类环境差异带来的配置往往也是手动能换、定时不换现象的幕后推手之一。进阶玩法把个人照片变成专属壁纸库工具内置的风格看腻了完全可以自己造一套。过程只需要四步准备 24 张或更少jpg/png 图片重命名为0、1、2……直到23数字代表对应的小时。如果图片数量不够 24 张可以用软链接补齐ln -s 原图.jpg 12.jpg让同一天不同时段复用同一张。在/usr/share/dynamic-wallpaper/images下新建一个目录名字就是你的风格名把图片放进去。运行dwall -s 你的风格名它就会出现在可用风格列表里照常参与定时轮换。从其他渠道下载的壁纸若是 HEIC 格式先安装libheifDebian/Ubuntu 下对应libheif-examples包再用heif-convert批量转成 jpg就能按上面的流程接入。如果你喜欢让壁纸配色与终端联动还可以试试dwall -p -s 风格名启用 pywal 模式——它会从壁纸中提取配色并应用到支持该特性的应用上。另外有个小彩蛋脚本每次设置后会把当前图片路径写入~/.cache/dwall_current想知道此刻桌面上是哪个文件cat一下这个文件即可。壁纸没自动换按这套思路自查排障最忌讳无头苍蝇式地乱试。记住一个原则先手动、再定时、后环境一步步缩小问题范围。先手动跑一次dwall -s 你的风格。手动成功问题出在定时层跳到第 2 步。手动失败多半是依赖缺失、风格名错误或会话类型不匹配回到前面的安装与运行部分检查。确认任务真的在执行crontab -l看定时行是否存在、路径和风格名是否和手动运行的一致。确认 cron 服务活着systemctl status cronArch 上是cronie服务未运行时先systemctl start cron并设为开机自启。检查环境变量是否喂对对照你echo出来的DISPLAY、DBUS_SESSION_BUS_ADDRESS等值逐一核对手动运行的会话信息这一步是手动正常、定时失效的高发原因。仍不行就核对会话识别输出echo $DESKTOP_SESSION确认桌面会话名称能被脚本识别XFCE 用户额外确认已安装 xrandr。绝大多数问题走到第 4 步就已经水落石出。如果按这个顺序排查后依然无解带着echo $DESKTOP_SESSION的输出去项目仓库提交 issue能帮维护者快速定位你的环境。写在最后回过头看Dynamic Wallpaper 的整个设计其实非常克制一个读取当前小时的 bash 脚本加上一行 cron 任务就完成了桌面跟着时间呼吸这件事。它的价值不在于代码有多复杂而在于把时间和壁纸这两个看似无关的东西用最朴素的方式串联了起来。上手之后建议你先从内置风格里挑一套顺眼的跑上一天感受整点切换的节奏再动手做一套自己的壁纸库把旅行照片或家人合影变成轮播。遇到问题就翻回本文的排障清单或者查看dwall -h与仓库自带的 README大部分疑问都能在那里找到答案。【免费下载链接】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),仅供参考