Primero, las aplicaciones no deberían meterse condconf
Introducción desde la página del proyecto dconf :
dconf
Es un sistema de configuración de bajo nivel. Su objetivo principal es proporcionar un back-end a GSettings en plataformas que aún no tienen sistemas de almacenamiento de configuración.
¿Dónde se almacenan los datos? (Ref: 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 en el perfil es lectura-escritura rw
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 enlazar una tienda de estilo de texto además de la base de datos GVariant desde la db.d/*
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? by trent muestra un buen ejemplo del uso de GSettings API en una aplicación Quickly, y su conclusión se basa en su experiencia.
De vuelta al vino. Cada aplicación que usa GSsettings debe definir sus esquemas y debe almacenarlos / instalarlos en /usr/share/glib-2.0/schemas/
(Es un directorio 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 se dio cuenta, el esquema se define con an id
y a path
. El nombre del archivo de esquema sigue al id
valor.
<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
*.enums.xml
Los archivos son para la declaración de enumeración personalizada, para ser utilizados como nuevos tipos de datos *.gschema.xml
con el mismo 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'
Compilación de esquemas (Ref: Jugar con dconf y gnome-tweak-tool )
Como parte del proceso de instalación (tiene un activador dpkg), los esquemas se compilan con la glib-compile-schemas
herramienta (de glib)
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
*.gschema.xml
será compilado 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
lee los archivos de anulación del proveedor , que son archivos de clave que pueden anular los valores predeterminados para 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 Ubuntu Live CD? (5. Personalización 2: fondos y temas).
Bloquear archivos
Actualmente, dconf solo admite el bloqueo por tecla, sin bloqueo de subruta. Los valores definidos por el usuario aún se almacenarán, user-db
pero no tendrán efecto en las aplicaciones. dconf / gsettings devuelve valores predeterminados para esas teclas bloqueadas. Archivos de bloqueo se almacenan en 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 los bloqueos, para que sea efectivo, ejecuta
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 user-db
. Para cambiar system-db
, escriba un nuevo archivo de anulación y vuelva a compilar los esquemas.
No pude hacer que esto funcione:
sudo su gdm -c 'gsettings ...'
ninguna de las otras respuestas aquí establece Preferencias de gnomo predeterminadas / globales (Gnome 3) , puede ser que fuera para una versión anterior.
dconf dump /
volca todas las entradas alteradas por el usuario, no incluye entradas que nunca se modificaron o se restablecieron. (por ejemplo, incluye que las entradas se hayan cambiado o establecido, incluso sus valores son los mismos que los predeterminados). Ver askubuntu.com/q/420527/26246 . Además, no es toda la base de datos, puede establecer la ruta. por ejemplo:dconf dump /com/
dconf load / < file
sin iniciar sesión como usuario.sudo su username2 -c "dconf load / < file"