需求
KDE 自带的环境可以实现桌面定时切换下一张壁纸,但是想要手动切换,就只能右击桌面 -> 点击 Next Wallpaper Image
。
经过查询,并无命令负责此动作,因此打算通过脚本实现,并绑定快捷键。
在 SuperUser 上找到一个办法,可以通过 QDBus
直接写入需要更改的图片,将随机选择图片部分和定时部分均交由脚本处理。
操作
由于直接采用写入图片的方式,KDE 的壁纸模式会被切换为 Image
,因此同时需要接管 SlideShow
模式:定时自动切换下一张壁纸。
接管定时功能
新建一个 .sh
脚本,写入如下内容:
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 27 28 29 30 31 32 33 34 35
| while true do
sleeptime=900
location="/home/myusername/Pictures"
array=($(ls $location*)) ( IFS=$'\n'; echo "${array[*]}" )
size=${#array[@]} index=$(($RANDOM % $size)) wallpaper=${array[$index]}
echo echo " || SELLECTED WALLPAPER = "$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
|
chmod +x
后,可以将脚本添加到 KDE 的 Autostart
,实现无感切换。
手动切换脚本
只需要略微修改定时脚本即可。
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 27
|
location="/home/myusername/Pictures"
array=($(ls $location*)) ( IFS=$'\n'; echo "${array[*]}" )
size=${#array[@]} index=$(($RANDOM % $size)) wallpaper=${array[$index]}
echo echo " || SELLECTED WALLPAPER = "$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}'"); }'
|
可以使用 alias
将脚本变为便于输入的命令。
再进入 KDE 设置中的 Custom Shortcuts
部分,设置自己喜欢的快捷键即可。