¿No deberían dconf-editor y gsettings acceder a la misma base de datos?

¿No deberían dconf-editor y gsettings acceder a la misma base de datos?

Esta es una pregunta básicamente "académica": tratar de comprender mejor las entrañas del sistema de configuración.

entiendo que eldconfsystem es el nuevo sistema de configuración en gnome3 que ha reemplazado al (obsoleto)gconf; esto queda bastante claro desdeGconf, Dconf, Gsettings y la relación entre ellos.

Me pareció que los programas gsettingsy dconf-editordonde solo hay dos formas diferentes de acceder al mismodconfbase de datos, lo cual se corrobora en
¿Qué es dconf, cuál es su función y cómo lo uso?

EDITAR: descubrí que alguien lo notó como una diferencia en el caso de algún nombre de esquema, consulte aquí ---¿Los nombres de los esquemas dconf distinguen entre mayúsculas y minúsculas?; pero parece que las diferencias no se limitan a eso. En una de las respuestas hay un ejemplo de falta de coincidencia, pero no encontré una explicación depor qué.

Pero últimamente descubrí que las claves accesibles desde gsettingsy dconf-editorno son las mismas. Por ejemplo, las configuraciones para vinoestán en dconf-editor( org.gnome.desktop.remote-accessver captura de pantalla a continuación), mientras que en gsettings están en org.gnome.Vino. ¿Existe alguna documentación que explique la diferencia?

Enconfiguración:

(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
[...]

y:

(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.desktop.remote-access
No such schema 'org.gnome.desktop.remote-access'

Pero eneditor-dconf:

editor-dconf

Respuesta1

  • dconf-editorSe utiliza schema pathpara mostrar el árbol de datos de configuración. La misma estructura utilizada para almacenar datos en la base de datos GVariant.

  • gsettings(de glib-2.0) se utiliza schema idpara mostrar/obtener datos de configuración. De la misma manera que debería hacerlo cualquier otra aplicación que utilice la API GSetttings.

  • Depende del desarrollador de la aplicación configurar ambos como desee. (con alguna restricción para la denominación canónica). Por lo tanto, pathpodría ser diferente, idpero la mayoría de los desarrolladores de aplicaciones prefieren usar series/combinaciones de palabras idénticas. Algunos no conservan las mismas mayúsculas. EjemploProyecto rastreador de Gnome

    <schema id="org.freedesktop.Tracker.Miner" path="/org/freedesktop/tracker/miner/" />
    

    Además de eso, algunas aplicaciones alternativas comparten la misma configuración que pertenece al escritorio Gnome. Ejemplo:input-sources


  • Primero,Las aplicaciones no deberían interferirdconf

    Introducción dedconfpágina del proyecto:

    dconfEs un sistema de configuración de bajo nivel. Su objetivo principal es proporcionar un backend a GSettings en plataformas que aún no cuentan con sistemas de almacenamiento de configuración.

  • ¿Dónde se almacenan los datos?(Árbitro:https://wiki.gnome.org/Projects/dconf/SystemAdministrators)

    Un perfil es una lista de bases de datos de configuración. Lo que parece que Gnome y Unity usan el mismo perfil.

    $ cat /etc/dconf/profile/gdm
    user-db:user
    system-db:gdm
    
    1. user-db:user: La primera base de datos del perfil es de lectura y escritura rwy se crea en el directorio de inicio del usuario.

      $ file ~/.config/dconf/user
      /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
      
    2. system-db:gdm: solo lectura

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

      dconfpodría vincular un almacén de estilos de texto además de la base de datos GVariant desde db.d/*la carpeta. Ejemplo (observe la ruta del archivo, por lo que es parte 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
       ...
      
  • Archivos de esquema: relación entre schema id&schema path ( *.gschema.xml)

    ¿Cuál es el archivo XML de esquema en la carpeta data/glib-2.0 de mi aplicación Quickly?portrentomuestra un buen ejemplo del uso de la API de GSettings en una aplicación Quickly y su conclusión basada en su experiencia.

    Volvamos a Vino. Cada aplicación que utiliza GSsettings debe definir sus esquemas y debe almacenarlos/instalarlos en /usr/share/glib-2.0/schemas/(es un directorio simplista):

    $ 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 lo notó, el esquema se define con an idy a path. El nombre del archivo de esquema sigue al idvalor.

    <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
    
  • *.enums.xmlLos archivos son para una declaración de enumeración personalizada, que se utilizarán como nuevos tipos de datos *.gschema.xmlcon el mismo archivo 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'
    
  • Compilando esquemas(Árbitro:Jugando con dconf y gnome-tweak-tool)

    Como parte del proceso de instalación (tiene un activador dpkg), los esquemas se compilan con glib-compile-schemasla herramienta (de glib)

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

    *.gschema.xmlse compilará en un archivo binario/usr/share/glib-2.0/schemas/gschemas.compiled

  • Archivos de anulación de proveedor( *.gschema.override)

    Además de los archivos de esquema, glib-compile-schemasleeanulación de proveedorarchivos, que son archivos de claves que pueden anular los valores predeterminados de las claves en los esquemas (Ref:man glib-compile-schemas). Contienen los cambios realizados por la distribución de Ubuntu para anular los valores predeterminados del esquema ascendente.

    $ 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']
    

    Ejemplo de uso de archivos de anulación, consulte¿Cómo personalizar el Live CD de Ubuntu?(5. Personalización 2: Fondos y Temas).

  • bloquear archivos

    Actualmente, dconf solo admite bloqueo por clave, no bloqueo de subruta. Los valores definidos por el usuario se seguirán almacenando, user-dbpero no tendrán ningún efecto en las aplicaciones. dconf/gsettings devuelve valores predeterminados para esas claves bloqueadas. Los archivos de bloqueo se almacenan en formato db.d/locks/. Ejemplo:

    $ 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
    ...
    

    Después de la modificación de las cerraduras, para que sea efectivo ejecute:

    sudo dconf update
    

    Un buen escaparate:Configuración de dconf: valores predeterminados y bloqueos

  • Cambiar la configuración global

    El valor predeterminado para gsettings/ dconf-editores editar el archivo user-db. Para cambiar system-db, escriba un nuevo archivo de anulación y vuelva a compilar los esquemas.

    No pude hacer que esto funcionara:

    sudo su gdm -c 'gsettings ...'
    

    ni el otro responde aquiEstablecer preferencias predeterminadas/globales de Gnome (Gnome 3), puede ser que fuera para una versión anterior.

información relacionada