Este documento introduce GSettings, el sistema de configuración por defecto en GNOME. GSettings mejora sobre GConf al separar la API de almacenamiento y mejorar el rendimiento. Usa backends como DConf que almacena valores en un formato binario optimizado para lecturas. Los esquemas definen los valores mediante XML y pueden ser personalizados por distribuidores. La API de GSettings permite leer, escribir y enlazar valores de configuración.
2. ¿Qué es GSettings?
GNOME 1 → GNOME 2 → GNOME 3
✔
gnome_config ✔
GConf ✔
Gsettings
✔
Ficheros de texto ✔
Fragmentar la complejidad ✔
Separación entre la API y
similares a los .INI de de un fichero de texto en el almacenamiento
Windows una estructura de directorio
✔
Mejora el rendimiento y
✔
Facilitar la gestión para mayor flexibilidad
✔
Solución simple
mayor volúmen de
✔
Opciones avanzadas:
configuraciones.
•
sin restricciones de tipo con
✔
Introduce los esquemas y
GVariant y enum
las notificaciones de
cambios •
inicialización retardada
3. GSettingsBackends
● DConf (por defecto en GNOME)
● Windows Registry (por defecto en Windows)
● Memory (sólo lectura, básicamente es un GHashTable. Es
el fallback backend)
● Keyfile (ficheros tipo .ini)
● Delayed que se usa de forma interna para las aplicación
retardada de configuraciones
● Null para bloquear cualquier intento de escritura
● Plist (ficheros plist, propierty list)
4. GVariant
● La piedra angular sobre el que se basa Gsettings/Dconf es el
tipo de datos Gvariant
● Almacena un valor junto con información de su tipo
● Puede ser consultado concurrentemente
● Serialización eficiente
● GVariant se basa en el tipo de datos de Dbus, pero introduce
los tipos maybe/nullables(m) y los tipos indefinidos (*,?,r)
● b=boolean, y=byte, n=int16, q=uint16, i=int32, u=uint32,
x=int64, t=uint64, d=double, s=string
●
5. DConf
● Propuesto como estándar en freedesktop
● Optimizado para lectura (un inicio de sesión en GNOME supone
cientos de lecturas y sólo 2 escrituras)
● Aprovecha el planificador de E/S del kernel inundándolo con todas
las peticiones de lectura de las aplicaciones en lugar de hacer las
peticiones de una en una
● Mediante el uso de un formato binario se eliminan los problemas de
fragmentación de Gconf de ficheros xml en una estructura de
directorios
● Sólo 7 veces más lento GHashTable (1 µs por búsqueda)
6. Esquemas
● Ficheros XML bien definidos mediante un DTD
● Extensión .gschema.xml
● Se sigue las reglas de nombres de Dbus
● Tipos de datos flexibles:
● Gvariant
● enumerados mediante los elementos <choice>, <enum> o
<flags>
● Esquemas compilados con glib-compile-schemas
7. Esquemas II
<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
<schema id="org.guadec-es.ej-gsettings" path="/org/guadec-es/ej-gsettings/">
<key type="b" name="fluzo">
<default>false</default>
<summary>Condensador de fluzo</summary>
<description>Estado de activación del condensador de fluzo</description>
</key>
</schema>
</schemalist>
8. Distribuidores
●
Es habitual que los distribuidores quieran modificar
algunos de los valores por defecto
●
En lugar de parchear los esquemas se usan
“vendor overrides”
●
En el mismo directorio que los esquemas
●
Usan la extensión .gschema.override