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

34

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 (obsolète) gconf ; C’est tout à fait clair dans Gconf, Dconf, Gsettings et leur relation .

Il me semblait que les programmes gsettingset dconf-editoroù juste 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 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 de décalage, mais je n'ai pas trouvé d'explication quant à pourquoi .

Mais dernièrement, j'ai découvert que les clés accessibles depuis gsettingset dconf-editorne sont pas les mêmes. Par exemple, les paramètres de vinosont en dconf-editordessous org.gnome.desktop.remote-access(voir capture d'écran ci-dessous) alors que dans les paramètres ils sont en dessous org.gnome.Vino. Il existe une documentation qui explique la différence?

En 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

Rmano
la source

Réponses:

39
  • dconf-editorutilise schema pathpour afficher les paramètres de l'arbre de données. Même structure utilisée pour stocker les données dans la base de données GVariant.

  • gsettings(de glib-2.0) utilise schema idpour 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). Cela pathpourrait donc être différent de idmais la plupart des développeurs d'applications préfèrent utiliser une série / combinaison de mots identique. Certains ne conservent pas la même capitalisation. Exemple de 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 avecdconf

    Introduction de la page du projet dconf :

    dconfest 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 les données stocké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 rwet 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: lecture seulement

      $ file /etc/dconf/db/gdm
      /etc/dconf/db/gdm: GVariant Database file, version 0
      

      dconfpourrait lier un magasin de styles de texte en plus de la base de données GVariant à partir d'un db.d/*dossier. Exemple (Remarquez le chemin du fichier, il en fait donc partie 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 GSettings API dans une application Quickly, ainsi que sa conclusion basée sur son expérience.

    Retour à Vino. Chaque application utilisant GSsettings doit 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 un idet un path. Le nom du fichier de schéma suit la idvaleur.

    <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
    
  • *.enums.xmlles fichiers sont destinés à une déclaration d'énumération personnalisée, à utiliser comme nouveaux types de données *.gschema.xmlavec les mêmes 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 de schémas (Réf: Jouer avec dconf et gnome-tweak-tool )

    Dans le cadre du processus d’installation (avec un déclencheur 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é 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-schemaslit les fichiers de substitution du fournisseur , qui sont des fichiers de clé pouvant remplacer les valeurs par défaut des clés dans les 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-dbmais 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-editorest de modifier le fichier user-db. Changersystem-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 par défaut / globales du gnome (gnome 3) , cela peut être une ancienne version.

utilisateur.dz
la source
1
@Rmano, j'avais moi aussi la curiosité d'apprendre à ce sujet. Merci beaucoup.
user.dz
1
Pourriez-vous s'il vous plaît expliquer comment définir des paramètres spécifiques à l'utilisateur à l'aide de dconf (par exemple, je dois déployer un ensemble de paramètres pour un utilisateur (copie des fichiers nécessaires dans son répertoire ~ / .config / dconf juste après la création du compte) et un autre pour le second utilisateur, comment? Autant que je sache, le "magasin de styles de texte" est uniquement pris en charge pour les paramètres système, n'est-ce pas? Existe-t-il un moyen de ne sauvegarder que les paramètres utilisateur (par exemple, ceux de ~ / .config / dconf / user)? Je connais "dconf dump /", mais cela concerne l’ensemble de la base de données utilisateur, y compris les valeurs par défaut du système. La documentation est extrêmement incomplète.
Anatoli
1
@Anatoli, Yeah, le magasin de texte ne fonctionne que pour la base de données système. En réalité, dconf dump /toutes les entrées modifiées par l'utilisateur sont vidées. Les entrées jamais modifiées ou réinitialisées ne sont pas incluses. (par exemple, les entrées ont été modifiées ou définies même si leurs valeurs sont identiques à celles par défaut). Voir askubuntu.com/q/420527/26246 . Aussi n'est pas la base de données entière, vous pouvez définir le chemin. ex:dconf dump /com/
user.dz
1
@ user.dz, merci pour la clarification. Ainsi, la seule façon de configurer les paramètres spécifiques à l'utilisateur consiste à créer le fichier binaire GVDB 'utilisateur' sur un autre compte propre avec les paramètres nécessaires, puis à le copier dans le dossier .config / dconf? Autant que je sache, il n'y a aucun moyen d'utiliser dconf load / < filesans se connecter en tant qu'utilisateur.
Anatoli
1
@ Anatoli, oui cela à sens unique. Peut être un moyen plus facile de modifier un autre paramètre d’utilisateur sans enregistrer la nécessité de son mot de passe ou de son pouvoir root (règle de sécurité) Cela devrait fonctionner sudo su username2 -c "dconf load / < file"
user.dz