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