Esta é uma questão basicamente 'acadêmica' --- para tentar entender melhor as entranhas do sistema de configuração.
Eu entendo que odconfsystem é o novo sistema de configuração no gnome3 que substituiu o (obsoleto)gconf; isso fica bem claro desdeGconf, Dconf, Gsettings e a relação entre eles.
Pareceu-me que os programas gsettings
e dconf-editor
onde existem apenas duas formas diferentes de acessar o mesmodconfbanco de dados, o que é corroborado em
O que é dconf, qual é sua função e como posso usá-lo?
EDIT: descobri que alguém percebeu isso como uma diferença de caso em algum nome de esquema, veja aqui ---Os nomes de esquema dconf diferenciam maiúsculas de minúsculas?; mas parece que as diferenças não se restringem a isso. Em uma das respostas há um exemplo de incompatibilidade, mas não encontrei uma explicação parapor que.
Mas ultimamente descobri que as chaves acessíveis em gsettings
e dconf-editor
não são as mesmas. Por exemplo, as configurações para vino
estão em dconf-editor
( org.gnome.desktop.remote-access
veja a imagem abaixo), enquanto em gsettings estão em org.gnome.Vino
. Existe alguma documentação que explica a diferença?
Emconfigurações:
(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.Vino
org.gnome.Vino alternative-port uint16 5900
org.gnome.Vino authentication-methods ['none']
org.gnome.Vino disable-background false
[...]
e:
(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.desktop.remote-access
No such schema 'org.gnome.desktop.remote-access'
Mas emeditor dconf:
Responder1
dconf-editor
usaschema path
para mostrar a árvore de dados de configurações. Mesma estrutura usada para armazenar dados no banco de dados GVariant.gsettings
(do glib-2.0) usaschema id
para mostrar/obter dados de configurações. Da mesma forma que qualquer outro aplicativo que use a API GSetttings deve fazer.Cabe ao desenvolvedor do aplicativo definir ambos como desejar. (com alguma restrição para nomenclatura canônica). Portanto,
path
pode ser diferente,id
mas a maioria dos desenvolvedores de aplicativos prefere usar séries/combinações de palavras idênticas. Alguns não preservam a mesma capitalização. ExemploProjeto rastreador do Gnome<schema id="org.freedesktop.Tracker.Miner" path="/org/freedesktop/tracker/miner/" />
Além disso, alguns aplicativos alternativos compartilham as mesmas configurações que pertencem à área de trabalho do Gnome. Exemplo:
input-sources
Primeiro,Os aplicativos não devem mexer com
dconf
Introdução dedconfpágina do projeto:
dconf
é um sistema de configuração de baixo nível. Seu principal objetivo é fornecer um backend para 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. Parece que o Gnome e o Unity usam 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çãorw
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 banco de dados GVariant dadb.d/*
pasta. Exemplo (observe o caminho do arquivo, portanto faz partesystem-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?porTrentomostra um bom exemplo de uso da API GSettings em um aplicativo Quickly e sua conclusão com base em sua experiência.
De volta ao Vinho. Cada aplicativo que usa GSsettings deve definir seus esquemas e armazená-los/instalá-los
/usr/share/glib-2.0/schemas/
(é um diretório superficial):$ 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 an
id
e apath
. O nome do arquivo de esquema segue oid
valor.<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
*.enums.xml
Os arquivos são para declaração de enumeração personalizada, para serem usados como novos tipos de dados com*.gschema.xml
o mesmo arquivoschema 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.:Brincando com dconf e gnome-Tweak-tool)
Como parte do processo de instalação (possui um gatilho dpkg), os esquemas são compilados com
glib-compile-schemas
a ferramenta (do 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 do fornecedor(
*.gschema.override
)Além dos arquivos de esquema,
glib-compile-schemas
lêsubstituição de fornecedorarquivos, que são arquivos-chave que podem substituir valores padrão para 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 do 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, consulteComo 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. dconf/gsettings retorna valores padrão para essas chaves bloqueadas. Os arquivos de bloqueio são armazenados no formatodb.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:Configurações do dconf: padrões e bloqueios
Alterando configurações globais
O padrão para
gsettings
/dconf-editor
é editar o arquivouser-db
. Para alterarsystem-db
, escreva um novo arquivo de substituição e recompile os esquemas.Não consegui fazer isso funcionar:
sudo su gdm -c 'gsettings ...'
nem o outro responde aquiDefinir preferências padrão/globais do Gnome (Gnome 3), pode ser que fosse para uma versão antiga.