Manjaro21.0下KDE5桌面设置桌面壁纸

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*)) # 数组变量
# ( 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

【注】以上程序执行后不会结束,因此最好将其作为守护进程运行,比如添加到系统开机自启动脚本中。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!