我有多台显示器,我想在这些显示器上设置不同的墙纸,而我发现最好的方法是使用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。我想知道这是否适用于其他人,还是只是为他们选择随机数?