Primeiro, os aplicativos não devem mexer comdconf
Introdução na página do projeto dconf :
dconf
é um sistema de configuração de baixo nível. Seu principal objetivo é fornecer um back-end para o GSettings em plataformas que ainda não possuem sistemas de armazenamento de configuração.
Onde estão os dados armazenados? (Ref: https://wiki.gnome.org/Projects/dconf/SystemAdministrators )
Um perfil é uma lista de bancos de dados de configuração. O que parece que o Gnome & Unity usa o mesmo perfil.
$ cat /etc/dconf/profile/gdm
user-db:user
system-db:gdm
user-db:user
: O primeiro banco de dados no perfil é de leitura e gravação rw
e é criado no diretório inicial do usuário.
$ file ~/.config/dconf/user
/home/sneetsher/.config/dconf/user: GVariant Database file, version 0
system-db:gdm
: somente leitura
$ file /etc/dconf/db/gdm
/etc/dconf/db/gdm: GVariant Database file, version 0
dconf
poderia vincular um armazenamento de estilo de texto, além do GVariant Database da db.d/*
pasta. Exemplo (observe o caminho do arquivo, faça parte dele 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
...
Arquivos de esquema: Relação entre schema id
&schema path
( *.gschema.xml
)
Qual é o arquivo XML do esquema na pasta data / glib-2.0 do meu aplicativo Quickly? by trent mostra um bom exemplo de uso da API GSettings em um aplicativo Rapidamente, e sua conclusão com base em sua experiência.
De volta ao Vino. Cada aplicativo que usa GSsettings deve definir seus esquemas e armazená-los / instalá-los /usr/share/glib-2.0/schemas/
(é um diretório 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 você notou, o esquema é definido com um id
e um path
. O nome do arquivo de esquema segue o id
valor
<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
*.enums.xml
arquivos são para declaração de enumeração personalizada, para serem usados como novos tipos de dados *.gschema.xml
com o mesmo 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 (Ref: Jogando com dconf e gnome-tweak-tool )
Como parte do processo de instalação (possui um gatilho dpkg), os esquemas são compilados com a glib-compile-schemas
ferramenta (da glib)
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
*.gschema.xml
será compilado em um arquivo binário /usr/share/glib-2.0/schemas/gschemas.compiled
Arquivos de substituição de fornecedor ( *.gschema.override
)
Além dos arquivos de esquema, glib-compile-schemas
lê os arquivos de substituição de fornecedor , que são arquivos de chave que podem substituir os valores padrão das chaves nos esquemas (Ref:) man glib-compile-schemas
. Eles contêm as alterações feitas pela distribuição do Ubuntu para substituir os padrões de esquema upstream.
$ 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']
Exemplo de uso de arquivos de substituição, consulte Como personalizar o Ubuntu Live CD? (5. Personalização 2: Planos de fundo e temas).
Bloquear arquivos
Atualmente, o dconf suporta apenas bloqueio por chave, sem bloqueio de subcaminho. Os valores definidos pelo usuário ainda serão armazenados, user-db
mas não terão efeito nos aplicativos. O dconf / gsettings retorna os valores padrão para essas chaves bloqueadas. Os arquivos de bloqueio são armazenados em db.d/locks/
. Exemplo:
$ 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
...
Após a modificação dos bloqueios, para ser eficaz, execute:
sudo dconf update
Uma boa vitrine: dconf Configurações: padrões e bloqueios
Alterando configurações globais
O padrão para gsettings
/ dconf-editor
é editar o user-db
. Para alterar system-db
, escreva um novo arquivo de substituição e recompile os esquemas.
Não consegui fazer isso funcionar:
sudo su gdm -c 'gsettings ...'
nem as outras respostas aqui Defina as preferências padrão / globais do Gnome (Gnome 3) , talvez seja para uma versão antiga.