C'est une question fondamentalement 'académique' - pour essayer de mieux comprendre les entrailles du système de configuration.
Je comprends que le système dconf est le nouveau système de configuration de gnome3 qui a remplacé le système (obsolète) gconf ; c'est assez clair de Gconf, Dconf, Gsettings et la relation entre eux .
Il me semblait que les programmes gsettings
et dconf-editor
ne comportaient que deux façons différentes d’accéder à la même base de données dconf , qui est corroborée dans
Qu'est-ce que dconf, quelle est sa fonction et comment puis-je l'utiliser?
EDIT: J'ai découvert que quelqu'un avait remarqué une différence entre les noms de schéma, voir ici --- Les noms de schéma dconf sont-ils sensibles à la casse? ; mais il semble que les différences ne se limitent pas à cela. Dans l'une des réponses, il y a un exemple d'incompatibilité, mais je n'ai pas trouvé d'explication de pourquoi .
Mais récemment, j'ai découvert que les clés accessibles à partir de gsettings
et dconf-editor
ne sont pas les mêmes. Par exemple, les paramètres pour vino
sont dans dconf-editor
sous org.gnome.desktop.remote-access
(voir capture d'écran ci-dessous), tandis que dans gsettings, ils se trouvent sous org.gnome.Vino
. Il existe une documentation qui explique la différence?
Dans gsettings :
(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.Vino
org.gnome.Vino alternative-port uint16 5900
org.gnome.Vino authentication-methods ['none']
org.gnome.Vino disable-background false
[...]
et:
(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.desktop.remote-access
No such schema 'org.gnome.desktop.remote-access'
Mais dans dconf-editor :
dconf-editor
utilise schema path
pour afficher l’arborescence de données des paramètres. Même structure utilisée pour stocker les données dans la base de données GVariant.
gsettings
(à partir de glib-2.0) utilise schema id
pour afficher/obtenir les données de paramètres. Comme toute autre application devrait faire avec l’API GSetttings.
Il appartient au développeur d'applications de définir les deux comme il le souhaite. (avec quelques restrictions pour les noms canoniques). Donc, path
pourrait être différent de id
mais la plupart des développeurs d’applications préfèrent utiliser une série/combinaison Word identique. Certains ne conservent pas la même capitalisation. Exemple projet Tracker de Gnome
<schema id="org.freedesktop.Tracker.Miner" path="/org/freedesktop/tracker/miner/" />
En plus de cela, certaines applications alternatives partagent les mêmes paramètres qui appartiennent au bureau Gnome. Exemple: input-sources
Tout d'abord, les applications ne doivent pas jouer avec dconf
Introduction de dconf page de projet:
dconf
est un système de configuration de bas niveau. Son objectif principal est de fournir un backend à GSettings sur des plates-formes qui ne disposent pas déjà de systèmes de stockage de configuration.
Où sont stockées les données? (Réf: https://wiki.gnome.org/Projects/dconf/SystemAdministrators )
Un profil est une liste de bases de données de configuration. Il semble que Gnome & Unity utilise le même profil.
$ cat /etc/dconf/profile/gdm
user-db:user
system-db:gdm
user-db:user
: La première base de données du profil est en lecture-écriture rw
et elle est créée dans le répertoire de base de l'utilisateur.
$ file ~/.config/dconf/user
/home/sneetsher/.config/dconf/user: GVariant Database file, version 0
system-db:gdm
: en lecture seule
$ file /etc/dconf/db/gdm
/etc/dconf/db/gdm: GVariant Database file, version 0
dconf
pourrait lier un magasin de styles de texte en plus de la base de données GVariant à partir du dossier db.d/*
. Exemple (Notez le chemin du fichier, il fait donc partie de system-db:gdm
):
$ cat /etc/dconf/db/gdm.d/00-upstream-settings
# This file is part of the GDM packaging and should not be changed.
#
# Instead create your own file next to it with a higher numbered prefix,
# and run
#
# dconf update
#
[org/gnome/desktop/a11y/keyboard]
enable=true
[org/gnome/desktop/background]
show-desktop-icons=false
...
Fichiers de schéma: relation entre schema id
& schema path
(*.gschema.xml
)
Quel est le fichier XML du schéma dans le dossier data/glib-2.0 de mon application Quickly? by trent montre un bel exemple d'utilisation de l'API GSettings dans une application Quickly, et son conclusion basée sur son expérience.
Retour à Vino. Chaque application utilisant GSsettings doit définir son schéma et doit les stocker/installer dans /usr/share/glib-2.0/schemas/
(c'est un répertoire glib):
$ dpkg -L vino | grep -i glib-2.0
/usr/share/glib-2.0
/usr/share/glib-2.0/schemas
/usr/share/glib-2.0/schemas/org.gnome.Vino.enums.xml
/usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
$ more /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
<schemalist>
<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
<key name='enabled' type='b'>
<summary>Enable remote access to the desktop</summary>
<description>
If true, allows remote access to the desktop via the RFB
protocol. Users on remote machines may then connect to the
desktop using a VNC viewer.
</description>
<default>false</default>
</key>
<key name='Prompt-enabled' type='b'>
<summary>Prompt the user before completing a connection</summary>
<description>
If true, remote users accessing the desktop are not allowed
access until the user on the Host machine approves the
connection. Recommended especially when access is not password
protected.
</description>
<default>true</default>
</key>
...
Si vous avez remarqué, le schéma est défini avec un id
et un path
. Le nom du fichier de schéma suit la valeur id
.
<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
Les fichiers *.enums.xml
sont destinés à la déclaration d'énumération personnalisée, à utiliser comme nouveaux types de données dans *.gschema.xml
avec le même schema id
.
$ cat /usr/share/glib-2.0/schemas/org.gnome.Vino.enums.xml
<!-- Generated data (by glib-mkenums) -->
<schemalist>
<enum id='org.gnome.Vino.VinoIconVisibility'>
<value nick='never' value='0'/>
<value nick='always' value='1'/>
<value nick='client' value='2'/>
</enum>
</schemalist>
<!-- Generated data ends here -->
$ gsettings range org.gnome.Vino icon-visibility
enum
'never'
'always'
'client'
$ gsettings get org.gnome.Vino icon-visibility
'client'
Compilation du schéma (Ref: Jouer avec dconf et gnome-Tweak-tool )
Dans le cadre du processus d'installation (il comporte un déclencheur dpkg), les schémas sont compilés avec l'outil glib-compile-schemas
(à partir de glib).
Sudo glib-compile-schemas /usr/share/glib-2.0/schemas
*.gschema.xml
sera compilé dans un fichier binaire /usr/share/glib-2.0/schemas/gschemas.compiled
Fichiers de substitution de fournisseur (*.gschema.override
)
En plus des fichiers de schéma, glib-compile-schemas
lit les fichiers de substitution du fournisseur , qui sont des fichiers de clés pouvant remplacer les valeurs par défaut des clés des schémas (Ref: man glib-compile-schemas
) . Ils contiennent les modifications apportées par la distribution Ubuntu pour remplacer les valeurs par défaut du schéma en amont.
$ ls /usr/share/glib-2.0/schemas/*.gschema.override
/usr/share/glib-2.0/schemas/10_compiz-gnome.gschema.override
/usr/share/glib-2.0/schemas/10_desktop-base.gschema.override
/usr/share/glib-2.0/schemas/10_evolution-common.gschema.override
/usr/share/glib-2.0/schemas/10_gnome-settings-daemon.gschema.override
/usr/share/glib-2.0/schemas/10_gnome-Shell.gschema.override
/usr/share/glib-2.0/schemas/10_gnome-system-log.gschema.override
/usr/share/glib-2.0/schemas/10_gsettings-desktop-schemas.gschema.override
/usr/share/glib-2.0/schemas/10_libgtk-3-common.gschema.override
/usr/share/glib-2.0/schemas/10_ubuntu-settings.gschema.override
/usr/share/glib-2.0/schemas/20_ubuntu-gnome-default-settings.gschema.override
$ cat /usr/share/glib-2.0/schemas/10_gnome-settings-daemon.gschema.override
[org.gnome.desktop.wm.keybindings]
switch-input-source=['<Super>space']
switch-input-source-backward=['<Shift><Super>space']
Exemple d'utilisation de fichiers de substitution, voir Comment personnaliser le CD Ubuntu Live? (5. Personnalisation 2: Arrière-plans et thèmes).
Verrouiller les fichiers
Actuellement, dconf ne prend en charge que le verrouillage par clé, pas de verrouillage de sous-chemin. Les valeurs définies par l'utilisateur seront toujours stockées dans user-db
mais n'auront aucun effet sur les applications. dconf/gsettings renvoie les valeurs par défaut pour ces clés verrouillées. Les fichiers de verrouillage sont stockés dans db.d/locks/
. Exemple:
$ cat /etc/dconf/db/gdm.d/locks/00-upstream-settings-locks
/org/gnome/desktop/a11y/keyboard/enable
/org/gnome/desktop/background/show-desktop-icons
/org/gnome/desktop/lockdown/disable-application-handlers
/org/gnome/desktop/lockdown/disable-command-line
/org/gnome/desktop/lockdown/disable-lock-screen
/org/gnome/desktop/lockdown/disable-log-out
/org/gnome/desktop/lockdown/disable-printing
/org/gnome/desktop/lockdown/disable-print-setup
/org/gnome/desktop/lockdown/disable-save-to-disk
/org/gnome/desktop/lockdown/disable-user-switching
...
Après la modification des verrous, pour être efficace:
Sudo dconf update
Une bonne vitrine: Paramètres dconf: valeurs par défaut et verrous
Modification des paramètres globaux
La valeur par défaut pour gsettings
/dconf-editor
est de modifier le user-db
. Pour changer system-db
, écrivez un nouveau fichier de remplacement et recompilez le schéma.
Je n'arrivais pas à faire fonctionner ça:
Sudo su gdm -c 'gsettings ...'
ni les autres réponses ici Définir les préférences de Gnome par défaut/globales (Gnome 3) , peut-être qui était pour une ancienne version.