1. 缘由
本来 Manjaro 的 KDE 桌面是可以直接在「系统设置」中直接 GUI 直接更换桌面壁纸的,但我发现每次系统进行滚动更新后,原先的壁纸设置就消失了,需要重新设置。本着不愿动鼠标的念头,不如写个脚本来实现吧(本质还是懒)。然而这个似乎不是简单的事情,好在 StackOverflow 在手,知识全有(白嫖真香)。
2. 代码
2.1 单张壁纸固定
固定显示某张图片作为桌面壁纸。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/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 多张壁纸循环
随机抽取壁纸目录下的某一张图片作为桌面壁纸。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| while true; do sleeptime=900 location="/home/xxx/..."
array=($(ls $location*))
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
|
【注】以上程序执行后不会结束,因此最好将其作为守护进程运行,比如添加到系统开机自启动脚本中。