Innanzitutto, le app non dovrebbero fare confusionedconf
Introduzione dalla pagina del progetto dconf :
dconf
è un sistema di configurazione di basso livello. Il suo scopo principale è fornire un backend a GSettings su piattaforme che non dispongono già di sistemi di archiviazione della configurazione.
Dove sono archiviati i dati? (Rif: https://wiki.gnome.org/Projects/dconf/SystemAdministrators )
Un profilo è un elenco di database di configurazione. Cosa sembra che Gnome & Unity utilizzino lo stesso profilo.
$ cat /etc/dconf/profile/gdm
user-db:user
system-db:gdm
user-db:user
: Il primo database nel profilo è di lettura / scrittura rw
e viene creato nella home directory dell'utente.
$ file ~/.config/dconf/user
/home/sneetsher/.config/dconf/user: GVariant Database file, version 0
system-db:gdm
: sola lettura
$ file /etc/dconf/db/gdm
/etc/dconf/db/gdm: GVariant Database file, version 0
dconf
potrebbe associare un archivio di stili di testo oltre al database GVariant dalla db.d/*
cartella. Esempio (notare il percorso del file, quindi fa parte di 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
...
File di schema: relazione tra schema id
&schema path
( *.gschema.xml
)
Qual è il file XML dello schema nella cartella data / glib-2.0 della mia applicazione Quickly? by Trento mostra un bell'esempio di utilizzo dell'API GSettings in un'applicazione Quickly e le sue conclusioni basate sulla sua esperienza.
Ritorno a Vino. Ogni applicazione che utilizza GSsettings dovrebbe definire i suoi schemi e dovrebbe memorizzarli / installarli in /usr/share/glib-2.0/schemas/
(è una directory 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>
...
Se hai notato, lo schema è definito con un id
e un path
. Il nome del file dello schema segue il id
valore.
<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
*.enums.xml
i file servono per la dichiarazione di enumerazione personalizzata, da utilizzare come nuovi tipi di dati *.gschema.xml
con lo stesso 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'
Schema di compilazione (Rif: giocare con dconf e gnome-tweak-tool )
Come parte del processo di installazione (ha un trigger dpkg), gli schemi sono compilati con lo glib-compile-schemas
strumento (da glib)
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
*.gschema.xml
sarà compilato in un file binario /usr/share/glib-2.0/schemas/gschemas.compiled
Vendor Override Files ( *.gschema.override
)
Oltre ai file di schema, glib-compile-schemas
legge i file di sostituzione del fornitore , che sono file di chiavi che possono sovrascrivere i valori predefiniti per le chiavi negli schemi (Rif man glib-compile-schemas
. :) . Contengono le modifiche apportate dalla distribuzione Ubuntu per sovrascrivere le impostazioni predefinite dello schema a monte.
$ 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']
Esempio di utilizzo dei file di sostituzione, vedi Come personalizzare il Live CD di Ubuntu? (5. Personalizzazione 2: sfondi e temi).
Blocca i file
Attualmente, dconf supporta solo il blocco per chiave, nessun blocco del percorso secondario. I valori definiti dall'utente verranno comunque archiviati user-db
ma non avranno alcun effetto sulle applicazioni. dconf / gsettings restituisce valori predefiniti invece per quelle chiavi bloccate. I file di blocco sono memorizzati in db.d/locks/
. Esempio:
$ 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
...
Dopo la modifica dei blocchi, per essere efficace eseguire:
sudo dconf update
Una buona vetrina: Impostazioni dconf: impostazioni predefinite e blocchi
Modifica delle impostazioni globali
L'impostazione predefinita per gsettings
/ dconf-editor
è modificare il file user-db
. Per modificare system-db
, scrivere un nuovo file di override e ricompilare gli schemi.
Non sono riuscito a farlo funzionare:
sudo su gdm -c 'gsettings ...'
né le altre risposte qui Imposta preferenze predefinite / globali di Gnome (Gnome 3) , potrebbe essere che fosse per una vecchia versione.