通过 Gio.Settings 进行的更改不生效

通过 Gio.Settings 进行的更改不生效

正如标题所示,我正在尝试通过 Ubuntu 16.04 LTS 上的 python 的 Gio 模块来改变 gsettings(Unix & Linux 网站上的一位用户说下面的脚本可以在 Arch 上运行,所以这可能是 Ubuntu 特有的问题)

设置已更改,但未应用。这就是我的意思。

考虑下面的脚本:

$> cat ~/py_bg.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gi.repository import Gio
import os
import sys
pic_name = sys.argv[1]
settings = Gio.Settings.new("org.gnome.desktop.background")
settings.set_string("picture-uri", "file://" + os.getcwd() + "/" + pic_name)
settings.apply()

执行脚本确实显示了更改gsettings,但桌面实际上保持不变

$> python ~/py_bg.py ZEN.jpg                                                    
$> gsettings get org.gnome.desktop.background picture-uri                       
'file:///home/xieerqi/WALLPAPERS/ZEN.jpg'

其他架构也存在此问题。我该如何排除故障并使脚本正常运行?

答案1

我想我可以提供一些细节。

我尝试将数据持久保存到我的模式中很多小时,但都没有成功,最后我来到这里。

我正在使用 c++ 库libgtkmm-3.0 libglibmm-2.4

简而言之,它import Gio,Gtk在幕后做了很多事情。

Gio 库函数可以工作,但在我启动 Gtk 应用程序之前,它出现了一点问题。我认为这是在 Gtk 导入之前的情况。

我仍然无法让 Gio 代码不报错。解决方案是创建一个 Gtk::Application 对象。

在我的代码中

auto app = Gtk::Application::create(...);

现在他们不再抱怨了。

GSettings 对象不会持久。尽管我精心设计的架构已编译,并且已编译的架构位于我认为相关的所有位置。 gsettings --schema-path查询给出了所有正确的反馈。

最终起作用的是,如果我实际运行Gtk::Application。当我看到你关于的评论时,我怀疑导入对我的作用import Gtk#include<gtkmm>

app->run();

这使得设置得以持久保留。

我还必须修改环境变量,GSETTINGS_SCHEMA_DIR但变XDG体对我来说根本不起作用。

我想象导入的 Gio 和 Gtk 会为您完成所有这些工作。

相关内容