1. 缘由
本来 Manjaro 的 KDE 桌面是可以直接在「系统设置」中直接 GUI 直接更换桌面壁纸的,但我发现每次系统进行滚动更新后,原先的壁纸设置就消失了,需要重新设置。本着不愿动鼠标的念头,不如写个脚本来实现吧(本质还是懒)。然而这个似乎不是简单的事情,好在 StackOverflow 在手,知识全有(白嫖真香)。
2. 代码
2.1 单张壁纸固定
固定显示某张图片作为桌面壁纸。
代码语言:javascript复制#!/bin/bash
location="/home/xxx/..." # 壁纸目录路径
wallpaper="23.jpg" # 壁纸名称
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript '
var allDesktops = desktops();
print (allDesktops);
for (i=0;i<allDesktops.length;i ) {{
d = allDesktops[i];
d.wallpaperPlugin = "org.kde.image";
d.currentConfigGroup = Array("Wallpaper",
"org.kde.image",
"General");
d.writeConfig("Image", "file://'$location'/'${wallpaper}'")
}}
'
2.2 多张壁纸循环
随机抽取壁纸目录下的某一张图片作为桌面壁纸。
代码语言:javascript复制while true; do
sleeptime=900 # 壁纸循环间隔时间(单位:秒)
location="/home/xxx/..." # 壁纸目录路径
array=($(ls $location*)) # 数组变量
# ( IFS=$'n'; echo "${array[*]}" ) # 显示壁纸目录路径下所有的壁纸(用于调试)
size=${#array[@]}
index=$(($RANDOM % $size)) # 生成随机数
wallpaper=${array[$index]} # 随机索引
echo
echo "当前桌面使用的壁纸是:"$wallpaper
dbus-send --session --dest=org.kde.plasmashell --type=method_call /PlasmaShell org.kde.PlasmaShell.evaluateScript 'string:
var Desktops = desktops();
for (i=0;i<Desktops.length;i ) {
d = Desktops[i];
d.wallpaperPlugin = "org.kde.image";
d.currentConfigGroup = Array("Wallpaper",
"org.kde.image",
"General");
d.writeConfig("Image", "file://'$location'/'${wallpaper}'");
}'
sleep $sleeptime
done
【注】以上程序执行后不会结束,因此最好将其作为守护进程运行,比如添加到系统开机自启动脚本中。