如何使用DBus在KDE Plasma 5.13.2中的每台显示器上设置不同的墙纸

时间:2018-06-30 13:34:24

标签: python-3.x dbus kde

我有多台显示器,我想在这些显示器上设置不同的墙纸,而我发现最好的方法是使用dbus。

我发现一个few snippets on the net几乎可以满足我的要求,但是这在我的所有显示器上都放置了相同的墙纸。当我按如下所示进行修改时, newkdecommand 字符串会适当地更新 {monitor_loop} ,并且索引在范围内(如果将其设置为超出我拥有的监视器数量,则会出错),但不会更新桌面墙纸(它们与以前一样)。

According to the documentation,desktops()应该返回当前存在的所有桌面的数组。我只是无法以可以为每个墙纸设置不同墙纸的方式来引用它们。下面是我目前拥有的代码:

kdemonitorloop = 0

for monitor in monitors:
    newkdecommand = """
    qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript '
        var allDesktops = desktops();
        d = allDesktops[{monitor_loop}];
        d.wallpaperPlugin = "org.kde.image";
        d.currentConfigGroup = Array("Wallpaper",
                                 "org.kde.image",
                                 "General");
        d.writeConfig("Image", "file:///{save_location}")
    '
    """
    saveloc = "/home/me/Kbgswitcher/testimg_" + str(kdemonitorloop) + ".png"
    os.system(newkdecommand.format(save_location=saveloc, monitor_loop=str(kdemonitorloop)))
    kdemonitorloop += 1

更新:在进一步调查中,似乎台式机使用了非连续数字。在我的系统上,中间屏幕,左屏幕和右屏幕的容纳物分别为1、11和12。我想知道这是否适用于其他人,还是只是为他们选择随机数?

0 个答案:

没有答案