Faut-il que dconf-editor et gsettings accèdent à la même base de données?

30

Ceci 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 gconf (obsolète); Cela se voit très clairement dans Gconf, Dconf, Gsettings et la relation qui les unit .

Il me semblait que les programmes gsettings et dconf-editor étaient deux manières différentes d’accéder à la même base de données dconf , ce qui est corroboré dans Qu'est-ce que dconf, quelle est sa fonction et comment l'utiliser?

EDIT: J'ai découvert que quelqu'un l'a remarqué comme une différence dans le cas d'un nom 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 de non-concordance, mais je n'ai pas trouvé d'explication de la raison pour laquelle pourquoi .

Mais récemment, j'ai découvert que les clés accessibles depuis gsettings et dconf-editor n'étaient pas les mêmes. Par exemple, les paramètres de vino sont exprimés dans dconf-editor sous org.gnome.desktop.remote-access (voir capture d'écran ci-dessous) alors que dans les paramètres généraux, ils sont inférieurs à org.gnome.Vino . Il y a 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 :

    
posée Rmano 05.02.2014 - 01:55
la source

1 réponse

34
  • dconf-editor utilise schema path pour afficher l'arborescence des paramètres. Même structure utilisée pour stocker des données dans la base de données GVariant.

  • gsettings (à partir de glib-2.0) utilise schema id pour afficher / obtenir des données de paramètres. Même chose que toute autre application qui utilise l’API GSetttings.

  • Il appartient au développeur de l’application de définir les deux comme il le souhaite. (avec quelques restrictions pour le nommage canonique). Ainsi, path pourrait être différent de id mais la plupart des développeurs d'applications préfèrent utiliser des séries de mots / combinaisons identiques. Certains ne conservent pas la même capitalisation. Exemple Projet de suivi 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

  • Premièrement, les applications ne doivent pas gâcher avec dconf

    Présentation de la page du projet dconf :

    dconf est un système de configuration de bas niveau. Son objectif principal est de fournir un backend à GSettings sur les plates-formes qui ne disposent pas déjà de systèmes de stockage de configuration.

  • Où sont stockées les données? (Réf: lien )

    Un profil est une liste de bases de données de configuration. Que semble-t-il que Gnome & amp; L'unité 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 est créée dans le répertoire personnel 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 style de texte en plus de la base de données GVariant à partir du dossier db.d/* . Exemple (chemin d'accès au fichier de notification, 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 & amp; schema path ( *.gschema.xml )

    Quel est le fichier XML du schéma dans le dossier data / glib-2.0 de mon application Quickly? par trent montre un bon exemple d'utilisation de l'API GSettings dans une application Quickly, et sa conclusion basée sur son expérience.

    Retour à Vino. Chaque application utilisant GSsettings devrait définir son schéma et 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 id et 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 à une 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 des schémas (Réf: Jouer avec dconf et gnome-tweak-tool )

    Dans le cadre du processus d’installation (il a un trigger dpkg), les schémas sont compilés avec glib-compile-schemas tool (à partir de glib)

    sudo glib-compile-schemas /usr/share/glib-2.0/schemas
    

    *.gschema.xml sera compilé en un fichier binaire /usr/share/glib-2.0/schemas/gschemas.compiled

  • Fichiers de remplacement des fournisseurs ( *.gschema.override )

    Outre les fichiers de schéma, glib-compile-schemas lit les fichiers de remplacement de fournisseur , qui sont des fichiers de clés pouvant remplacer les valeurs par défaut des clés dans les schémas (Réf: 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 remplacement, voir Comment personnaliser le fichier Ubuntu Live CD? (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 verrou 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 plutôt des 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: paramètres par défaut et verrous

  • Modification des paramètres globaux

    La valeur par défaut pour gsettings / dconf-editor consiste à modifier le user-db . Pour modifier system-db , écrivez un nouveau fichier de substitution et recompilez les schémas.

    Je ne pouvais pas faire fonctionner ceci:

    sudo su gdm -c 'gsettings ...'
    

    Aucune des autres réponses ici Définir les préférences par défaut / global de gnome (Gnome 3) , peut-être pour une ancienne version.

réponse donnée user.dz 06.02.2014 - 17:15
la source

Lire d'autres questions sur les étiquettes