Comment puis-je installer un schéma Gsettings sans privilèges root?


14

Le flux de travail typique pour installer un schéma Gsettings est le suivant:

  1. Créez un schéma, avec l'extension .gschema.xml, avec un contenu comme celui-ci:

    <?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. Copiez le schéma dans /usr/share/glib-2.0/schemas/.

  3. Compilez le schéma en exécutant cette commande:

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

Cependant, l'écriture dans /usr/share/glib-2.0/schemas/nécessite des privilèges root. Existe-t-il un moyen d'installer un schéma dans un répertoire utilisateur non global?

Réponses:


16

Vous pouvez copier et compiler vos schémas Gsettings dans un répertoire accessible en écriture à l'utilisateur:

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

L'astuce consiste à configurer l'application pour utiliser ce répertoire particulier. Il y a deux façons de faire ça:

  • Avec la GSETTINGS_SCHEMA_DIRvariable d'environnement:

    $ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
  • Ou en utilisant les objets GSettingsSchemaSource et GSettingSchema:

    Si vous avez accès au code source de votre programme, vous pouvez le modifier pour charger des schémas compilés à partir de n'importe quel répertoire. Voici comment procéder en Python, bien que vous puissiez le faire dans n'importe quel langage de programmation avec introspection 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)

Les références:


Savez-vous également comment vérifier si un schéma donné est déjà installé (et faire ce qui précède uniquement s'il ne l'est pas)?
Pietro Battiston

Selon ces documents, vous pouvez également ajouter le répertoire contenant le glib-2.0/schemasrépertoire à la XDG_DATA_DIRSvariable d'environnement.
ntc2
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.