La page de GnunuX - Mot-clé - gnome2024-02-17T19:37:03+00:00urn:md5:04e98429c955e91538969029aeabbe07DotclearMécanisme de "clef obligatoire" par utilisateur avec dconf (GNOME 3)urn:md5:11125138722685cba14e55ec92986ae52011-07-02T15:53:00+01:002011-07-02T19:42:23+01:00adminlogiciels libresgaspachognomelibrelogiciels libres <p>Contrairement à GNOME 2, GNOME 3 n'utilise plus GConf pour gérer les éléments de configuration.</p>
<p>Maintenant c'est Gsettings. Gsettings est en réalité une API de configuration. Le stockage des configurations se fait par un backend.</p>
<p>Sous GNU/Linux, le backend est dconf.</p>
<p>Avec GConf il était facile d'avoir des clefs obligatoires avec le mécanisme des mandatories. Avec dconf c'est un peu plus compliqué.</p>
<p>La configuration de dconf est séparée en deux parties :</p>
<ul>
<li>les profiles ;</li>
<li>les bases de données.</li>
</ul>
<p><strong>Les profiles</strong></p>
<p>Les profiles servent a mettre en relation des configurations et les bases de données. Le profile par défaut est <em>user</em>.</p>
<p>Par défaut, les profiles sont dans le répertoire <em>/etc/dconf/profile/</em>. Ce sont des fichiers de la forme :</p>
<pre>
database1
database2
</pre>
<p>La valeur database1 correspond au nom de la base de données utilisateur (généralement dans <em>~/.config/dconf/</em>).
La valeur database2 correspond au nom de la base de données système (généralement dans <em>/etc/dconf/db/</em>).
La base de données utilisateur sera prioritaire.</p>
<p><strong>La base de données utilisateur</strong></p>
<p>Pour modifier la base de données utilisateur, le plus simple est d'utiliser la commande dconf :</p>
<pre>
# dconf write path value
</pre>
<p>Pour lire la valeur :</p>
<pre>
# dconf read path
</pre>
<p>Pour lister les valeurs :</p>
<pre>
# dconf list path
</pre>
<p>Par exemple :</p>
<pre>
# dconf write /org/gnome/gnome-screenshot/delay 16
# dconf read /org/gnome/gnome-screenshot/delay
# dconf list /org/gnome/gnome-screenshot/
</pre>
<p><strong>La base de données système</strong></p>
<p>Pour modifier la base de données système, le plus simple est de faire des fichiers plats (type INI).</p>
<p>Pour cela, il faut faire une fichier du nom de la base de données dans le répertoire <em>/etc/dconf/db/</em> avec l'extension <em>.d</em>.</p>
<p>Dans notre cas, nous ferons le répertoire <em>/etc/dconf/db/database2.d/</em>. À l'intérieur nous ferons des fichiers avec l'ensemble des paramètres :</p>
<pre>
[path]
key=value
</pre>
<p><strong>Les clefs obligatoires</strong></p>
<p>Dans le répertoire de la base de données système, il faut faire un répertoire <em>locks</em> avec une série de fichiers contenant le chemin des clefs obligatoires de la forme :</p>
<pre>
path
</pre>
<p><strong>Clefs obligatoires par utilisateur</strong></p>
<p>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.</p>
<p>Pour cela, il faut ajouter dans le fichier de configuration de bash quelque chose comme cela :</p>
<pre>
readonly DCONF_PROFILE=nomprofile
export DCONF_PROFILE
</pre>
<p>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 "_".</p>
<p><strong>Exemple d'utilisation</strong></p>
<p>Dans <em>/etc/bashrc</em> :</p>
<pre>
if [ -e /etc/dconf/profile/$UID ]; then
readonly DCONF_PROFILE=$UID
export DCONF_PROFILE
fi
</pre>
<p>Création du fichier : <em>/etc/dconf/profile/500</em> (pour l'utilisateur avec l'uid 500) :</p>
<pre>
user
500
</pre>
<p>Le fichier <em>/etc/dconf/db/500.d/delay</em> contient :</p>
<pre>
[org/gnome/gnome-screenshot]
delay=16
</pre>
<p>Le fichier <em>/etc/dconf/db/500.d/locks/delay</em> contient le chemin :</p>
<pre>
/org/gnome/gnome-screenshot/delay
</pre>