Bagaimana saya bisa menginstal Skema Gsettings tanpa hak akses root?

14

Alur kerja khas untuk menginstal Skema Gsettings adalah ini:

  1. Buat skema, dengan ekstensi .gschema.xml, dengan konten seperti ini:

    <?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. Salin skema ke /usr/share/glib-2.0/schemas/.

  3. Kompilasi skema dengan menjalankan perintah ini:

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

Namun, menulis /usr/share/glib-2.0/schemas/membutuhkan root privilese. Apakah ada cara untuk menginstal skema ke direktori pengguna non-global?

Flimm
sumber

Jawaban:

16

Anda dapat menyalin dan mengkompilasi Skema Gsettings Anda ke direktori yang dapat ditulis pengguna:

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

Bit yang sulit adalah mengkonfigurasi aplikasi untuk menggunakan direktori tertentu. Ada dua cara untuk melakukan ini:

  • Dengan GSETTINGS_SCHEMA_DIRvariabel lingkungan:

    $ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
  • Atau menggunakan objek GSettingsSchemaSource dan GSettingSchema:

    Jika Anda memiliki akses ke kode sumber program Anda, Anda dapat memodifikasinya untuk memuat skema yang dikompilasi dari direktori mana pun. Berikut ini cara melakukannya dengan Python, meskipun Anda bisa melakukan ini dalam bahasa pemrograman apa pun dengan introspeksi 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)

Referensi:

Flimm
sumber
Apakah Anda juga tahu cara memeriksa apakah skema yang diberikan sudah diinstal (dan lakukan di atas hanya jika tidak)?
Pietro Battiston
Menurut dokumen ini, Anda juga dapat menambahkan direktori yang berisi glib-2.0/schemasdirektori ke XDG_DATA_DIRSvariabel lingkungan.
ntc2