Le flux de travail typique pour installer un schéma Gsettings est le suivant:
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>
Copiez le schéma dans /usr/share/glib-2.0/schemas/
.
Compilez le schéma en exécutant cette commande:
Sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
Cependant, l'écriture sur /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 d'utilisateurs non global?
Vous pouvez copier et compiler vos schémas Gsettings dans un répertoire accessible en écriture par l'utilisateur:
$ cp com.companyname.appname ~/schemas/
$ glib-compile-schemas ~/schemas/
La difficulté consiste à configurer l'application pour qu'elle utilise ce répertoire particulier. Il y a deux façons de faire ça:
Avec la variable d’environnement GSETTINGS_SCHEMA_DIR
:
$ 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 l'introspection de 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)