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.