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

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

安装 Gsettings Schema 的典型工作流程如下:

  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>
    
  2. 将架构复制到/usr/share/glib-2.0/schemas/

  3. 通过运行以下命令来编译模式:

    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)
    

参考:

相关内容