Pertanyaan Bagaimana saya bisa menginstal Skema Gsettings tanpa hak root?


Alur kerja yang khas untuk menginstal Skema Gsettings adalah ini:

  1. Buat skema, dengan ekstensi .gschema.xml, dengan isi 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 kepada /usr/share/glib-2.0/schemas/ membutuhkan hak akses root. Apakah ada cara untuk memasang skema ke direktori pengguna non-global?


11
2018-02-05 19:20


asal




Jawaban:


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

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

Yang agak rumit adalah mengkonfigurasi aplikasi untuk menggunakan direktori tertentu. Ada dua cara untuk melakukan ini:

  • Dengan GSETTINGS_SCHEMA_DIR¬†variabel 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. Beginilah cara melakukannya dengan Python, meskipun Anda dapat 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:


12
2018-02-05 19:20



Apakah Anda juga tahu caranya memeriksa jika skema yang diberikan sudah diinstal (dan melakukan hal di atas hanya jika tidak)? - Pietro Battiston