如何在没有 root 权限的情况下安装 Gsettings 架构?

Fli*_*imm 19 python gsettings dconf application-development

安装 Gsettings 架构的典型工作流程是这样的:

  1. 创建一个带有扩展名的架构,.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>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将架构复制到/usr/share/glib-2.0/schemas/.

  3. 通过运行以下命令编译架构:

    sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
    
    Run Code Online (Sandbox Code Playgroud)

但是,写入/usr/share/glib-2.0/schemas/需要 root 权限。有没有办法将架构安装到非全局用户目录?

Fli*_*imm 23

您可以将 Gsettings 架构复制并编译到用户可写的目录中:

$ cp com.companyname.appname ~/schemas/
$ glib-compile-schemas ~/schemas/
Run Code Online (Sandbox Code Playgroud)

棘手的一点是配置应用程序以使用该特定目录。有两种方法可以做到这一点:

  • 使用GSETTINGS_SCHEMA_DIR环境变量:

    $ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
    
    Run Code Online (Sandbox Code Playgroud)
  • 或者使用 GSettingsSchemaSource 和 GSettingSchema 对象:

    如果您有权访问程序的源代码,则可以对其进行修改以从任何目录加载已编译的模式。下面是如何在 Python 中执行此操作,尽管您可以使用 GObject 内省在任何编程语言中执行此操作:

    $ cp com.companyname.appname ~/schemas/
    $ glib-compile-schemas ~/schemas/
    
    Run Code Online (Sandbox Code Playgroud)

参考:

  • 根据[这些文档](https://www.freedesktop.org/software/gstreamer-sdk/data/docs/latest/gio/ch29s06.html)您还可以添加包含`glib-2.0/schemas`的目录目录到`XDG_DATA_DIRS` 环境变量。 (2认同)