ルート権限なしでGsettingsスキーマをインストールするにはどうすればよいですか?


14

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>
  2. スキーマをにコピーします/usr/share/glib-2.0/schemas/

  3. 次のコマンドを実行して、スキーマをコンパイルします。

    sudo glib-compile-schemas /usr/share/glib-2.0/schemas/

ただし、書き込みに/usr/share/glib-2.0/schemas/はルート権限が必要です。スキーマを非グローバルユーザーディレクトリにインストールする方法はありますか?

回答:


16

Gsettingsスキーマをユーザーが書き込み可能なディレクトリにコピーしてコンパイルできます。

$ cp com.companyname.appname ~/schemas/
$ glib-compile-schemas ~/schemas/

難しいのは、その特定のディレクトリを使用するようにアプリケーションを構成することです。これを行うには2つの方法があります。

  • GSETTINGS_SCHEMA_DIR環境変数:

    $ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
  • または、GSettingsSchemaSourceおよびGSettingSchemaオブジェクトを使用します。

    プログラムのソースコードにアクセスできる場合は、任意のディレクトリからコンパイル済みスキーマをロードするようにプログラムを変更できます。GObjectイントロスペクションを使用して、任意のプログラミング言語でこれを行うことができますが、Pythonでこれを行う方法は次のとおりです。

    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)

参照:


また、特定のスキーマが既にインストールされているかどうかを確認する方法を知っていますか(インストールされていない場合にのみ上記を実行しますか)。
ピエトロバッティストン

これらのドキュメントによると、ディレクトリを含むglib-2.0/schemasディレクトリをXDG_DATA_DIRS環境変数に追加することもできます。
ntc2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.