web-dev-qa-db-fra.com

Dconf-editor et gsettings ne devraient-ils pas accéder à la même base de données?

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

33
Rmano
  • 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
    
    1. 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
      
    2. 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.

38
user.dz