4

我目前正在Gjs上构建一个简单的应用程序,它应该会更改我的 gnome-shell 的背景图像。可以在此处找到有关如何使用gsettings-tool完成此操作的解决方案。

因为我想围绕它构建一个桌面应用程序,所以我想org.gnome.desktop.background.picture-uri通过使用 Gio 的GSettings-class来更改 -key 。但是使用set_X()- 方法不会改变键的值。

这是我更改 gsettings 值的代码:

var gio = imports.gi.Gio;

// Get the GSettings-object for the background-schema:
var background = new gio.Settings({schema: "org.gnome.desktop.background"});

// Read the current Background-Image:
print( "Current Background-Image: "+background.get_string("picture-uri") );

if (background.is_writable("picture-uri")){
    // Set a new Background-Image (should show up immediately):
    if (background.set_string("picture-uri", "file:///path/to/some/pic.jpg")){
        print("Success!");
    }
    else throw "Couldn't set the key!";
} else throw "The key is not writable";

读取值确实按预期工作,is_writable()- 方法返回trueset_string()- 方法也返回true

我已经检查过我没有处于“延迟应用”模式并且密钥有一个GVariantType字符串,所以set_string()- 方法应该可以工作。

使用普通的gsettings命令行工具(如链接帖子中所述)工作得很好。

我无法弄清楚问题是什么,有什么地方可以查找日志或其他东西吗?

4

1 回答 1

5

在这里没有得到任何回复后,我在 gjs-mailing list 上问了同样的问题

事实证明,当我的脚本退出时,对 dconf 的写入尚未在磁盘上,因此它们从未真正应用过。

解决方案是在函数之后立即调用g_settings_sync()函数( JsDoc ) set_string(),以确保所有写入都已完成。

if (background.set_string("picture-uri", "file:///path/to/some/pic.jpg")){
    gio.Settings.sync()
    print("Success!");
}

感谢 Johan Dahlin 和他的回答

于 2012-04-03T14:57:44.187 回答