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

2022-02-28 21:01:55 浏览数 (4)

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

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

1 人点赞