Contrairement à GNOME 2, GNOME 3 n'utilise plus GConf pour gérer les éléments de configuration.
Maintenant c'est Gsettings. Gsettings est en réalité une API de configuration. Le stockage des configurations se fait par un backend.
Sous GNU/Linux, le backend est dconf.
Avec GConf il était facile d'avoir des clefs obligatoires avec le mécanisme des mandatories. Avec dconf c'est un peu plus compliqué.
La configuration de dconf est séparée en deux parties :
- les profiles ;
- les bases de données.
Les profiles
Les profiles servent a mettre en relation des configurations et les bases de données. Le profile par défaut est user.
Par défaut, les profiles sont dans le répertoire /etc/dconf/profile/. Ce sont des fichiers de la forme :
database1 database2
La valeur database1 correspond au nom de la base de données utilisateur (généralement dans ~/.config/dconf/). La valeur database2 correspond au nom de la base de données système (généralement dans /etc/dconf/db/). La base de données utilisateur sera prioritaire.
La base de données utilisateur
Pour modifier la base de données utilisateur, le plus simple est d'utiliser la commande dconf :
# dconf write path value
Pour lire la valeur :
# dconf read path
Pour lister les valeurs :
# dconf list path
Par exemple :
# dconf write /org/gnome/gnome-screenshot/delay 16 # dconf read /org/gnome/gnome-screenshot/delay # dconf list /org/gnome/gnome-screenshot/
La base de données système
Pour modifier la base de données système, le plus simple est de faire des fichiers plats (type INI).
Pour cela, il faut faire une fichier du nom de la base de données dans le répertoire /etc/dconf/db/ avec l'extension .d.
Dans notre cas, nous ferons le répertoire /etc/dconf/db/database2.d/. À l'intérieur nous ferons des fichiers avec l'ensemble des paramètres :
[path] key=value
Les clefs obligatoires
Dans le répertoire de la base de données système, il faut faire un répertoire locks avec une série de fichiers contenant le chemin des clefs obligatoires de la forme :
path
Clefs obligatoires par utilisateur
Il est envisageable d'avoir des clefs obligatoires par utilisateur si nous créons un profile et une base par utilisateur. Ce profile sera associé à l'utilisateur au démarrage de la session.
Pour cela, il faut ajouter dans le fichier de configuration de bash quelque chose comme cela :
readonly DCONF_PROFILE=nomprofile export DCONF_PROFILE
Par contre, utiliser le nom d'utilisateur comme nom de profile n'est pas forcement une bonne idée, en effet il y a des restrictions importantes dans le nom du profile : il doit être de type alphanumérique ou "_".
Exemple d'utilisation
Dans /etc/bashrc :
if [ -e /etc/dconf/profile/$UID ]; then readonly DCONF_PROFILE=$UID export DCONF_PROFILE fi
Création du fichier : /etc/dconf/profile/500 (pour l'utilisateur avec l'uid 500) :
user 500
Le fichier /etc/dconf/db/500.d/delay contient :
[org/gnome/gnome-screenshot] delay=16
Le fichier /etc/dconf/db/500.d/locks/delay contient le chemin :
/org/gnome/gnome-screenshot/delay