安装 Gsettings Schema 的典型工作流程如下:
创建一个带有扩展名的架构
.gschema.xml
,其内容如下:<?xml version="1.0" encoding="UTF-8"?> <schemalist> <schema id="com.companyname.appname" path="/com/companyname/appname/"> <key type="b" name="mybool"> <default>false</default> <summary>Example summary</summary> <description>Example description</description> </key> </schema> </schemalist>
将架构复制到
/usr/share/glib-2.0/schemas/
。通过运行以下命令来编译模式:
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
但是,写入/usr/share/glib-2.0/schemas/
需要 root 权限。有没有办法将架构安装到非全局用户目录?
答案1
您可以将 Gsettings Schemas 复制并编译到用户可写的目录中:
$ cp com.companyname.appname ~/schemas/
$ glib-compile-schemas ~/schemas/
棘手的是配置应用程序以使用该特定目录。有两种方法可以做到这一点:
使用
GSETTINGS_SCHEMA_DIR
环境变量:$ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
或者使用 GSettingsSchemaSource 和 GSettingSchema 对象:
如果您有权访问程序的源代码,则可以对其进行修改以从任何目录加载已编译的架构。以下是在 Python 中执行此操作的方法,尽管您可以使用 GObject 自省在任何编程语言中执行此操作:
schema_source = Gio.SettingsSchemaSource.new_from_directory( os.path.expanduser("~/schemas"), Gio.SettingsSchemaSource.get_default(), False, ) schema = schema_source.lookup('com.companyname.appname', False) settings = Gio.Settings.new_full(schema, None, None) settings.set_boolean('mybool', True)