Comment puis-je installer un schéma Gsettings sans privilèges root?
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)