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 gsettings
y dconf-editor
donde 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 gsettings
y dconf-editor
no son las mismas. Por ejemplo, las configuraciones para vino
están en dconf-editor
( org.gnome.desktop.remote-access
ver 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:
Respuesta1
dconf-editor
Se utilizaschema path
para 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 utilizaschema id
para 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,
path
podría ser diferente,id
pero 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 interferir
dconf
Introducción dedconfpágina del proyecto:
dconf
Es 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
user-db:user
: La primera base de datos del perfil es de lectura y escriturarw
y se crea en el directorio de inicio del usuario.$ file ~/.config/dconf/user /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
system-db:gdm
: solo lectura$ file /etc/dconf/db/gdm /etc/dconf/db/gdm: GVariant Database file, version 0
dconf
podría vincular un almacén de estilos de texto además de la base de datos GVariant desdedb.d/*
la carpeta. Ejemplo (observe la ruta del archivo, por lo que es parte desystem-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
id
y apath
. El nombre del archivo de esquema sigue alid
valor.<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
*.enums.xml
Los archivos son para una declaración de enumeración personalizada, que se utilizarán como nuevos tipos de datos*.gschema.xml
con el mismo archivoschema 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-schemas
la herramienta (de glib)sudo glib-compile-schemas /usr/share/glib-2.0/schemas
*.gschema.xml
se 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-schemas
leeanulació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-db
pero 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 formatodb.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-editor
es editar el archivouser-db
. Para cambiarsystem-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.