在KDE中以编程方式更改壁纸

时间:2017-07-20 06:16:34

标签: dbus kde qdbus

我想在F#中编写一个程序来改变Linux上的壁纸。看起来我需要使用dbus和JS在KDE中这样做,我对它有点困惑。
 我找到this,并尝试运行qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript ~/scripts/wallpaper.js,其中wallpaper.js如下:

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:///home/amino/Pictures/wallpapers/wallhaven-360156.jpg")
}

但是我得到了这个错误:
Error: org.freedesktop.DBus.Error.Failed SyntaxError: Invalid regular expression: invalid regular expression

有更好的方法吗?如果没有,那么做我想做的事情的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这是我第一次回答这里的问题,如果不太正确,请道歉。 我相信你的JS代码唯一可能出错的可能就是它需要额外的单引号,并且可能会添加&#39; file://&#39;是不必要的。

- d.writeConfig("Image", "file:///home/amino/Pictures/wallpapers/wallhaven-360156.jpg")
+ d.writeConfig("Image", "'file:///home/amino/Pictures/wallpapers/wallhaven-360156.jpg'")

有关其他信息,这是我使用的脚本:

#!/bin/bash
WALLPAPERDIR="/pathtodir/"

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.slideshow";
d.currentConfigGroup = Array("Wallpaper", "org.kde.slideshow", "General");
d.writeConfig("SlidePaths", "'${WALLPAPERDIR}'")}'

这完美无瑕。