正如标题所示,我正在尝试通过 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 会为您完成所有这些工作。