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.
dconf dump /
despeja todas as entradas alteradas pelo usuário, não inclui entradas nunca alteradas ou que foram redefinidas. (por exemplo, inclui que as entradas foram alteradas ou configuradas até seus valores são os mesmos que o padrão). Veja askubuntu.com/q/420527/26246 . Também não é o banco de dados inteiro, você pode definir o caminho. ex:dconf dump /com/
dconf load / < file
sem fazer login como usuário.sudo su username2 -c "dconf load / < file"