Come posso installare uno schema Gsettings senza i privilegi di root?


14

Il flusso di lavoro tipico per installare uno schema Gsettings è questo:

  1. Crea uno schema, con l'estensione .gschema.xml, con contenuti come questo:

    <?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. Copia lo schema in /usr/share/glib-2.0/schemas/.

  3. Compilare lo schema eseguendo questo comando:

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

Tuttavia, la scrittura su /usr/share/glib-2.0/schemas/richiede i privilegi di root. Esiste un modo per installare uno schema in una directory utente non globale?

Risposte:


16

Puoi copiare e compilare i tuoi schemi Gsettings in una directory scrivibile dall'utente:

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

Il trucco è configurare l'applicazione per usare quella particolare directory. Esistono due modi per farlo:

  • Con la GSETTINGS_SCHEMA_DIRvariabile d'ambiente:

    $ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
  • O usando gli oggetti GSettingsSchemaSource e GSettingSchema:

    Se hai accesso al codice sorgente del tuo programma, puoi modificarlo per caricare schemi compilati da qualsiasi directory. Ecco come lo farebbe in Python, anche se potresti farlo in qualsiasi linguaggio di programmazione con l'introspezione di 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)

Riferimenti:


Sai anche come verificare se un determinato schema è già installato (e fare quanto sopra solo se non lo è)?
Pietro Battiston,

Secondo questi documenti è anche possibile aggiungere la directory contenente la glib-2.0/schemasdirectory alla XDG_DATA_DIRSvariabile di ambiente.
ntc2,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.