O dconf-editor e gsettings não devem acessar o mesmo banco de dados?

28

Esta é uma questão basicamente "acadêmica" --- para tentar entender melhor as entranhas do sistema de configuração.

Eu entendo que o sistema dconf é o novo sistema de configuração do gnome3 que substituiu o (obsoleto) gconf ; isso é bastante claro a partir Gconf, dconf, Gsettings e a relação entre eles .

Pareceu-me que os programas gsettings e dconf-editor onde apenas duas vias diferentes para acessar o mesmo dconf banco de dados, o que é corroborado em
O que é o dconf, qual é a sua função e como faço para usá-lo?

EDIT: eu descobri que alguém percebeu isso como uma diferença no caso de algum nome de esquema, consulte aqui --- Os nomes de esquema do 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 de por que .

Mas ultimamente descobri que as chaves acessíveis de gsettings e dconf-editor não são as mesmas. Por exemplo, as configurações para vino estão em dconf-editor em org.gnome.desktop.remote-access (veja a captura de tela abaixo) enquanto em gsettings elas estão em org.gnome.Vino . Existe alguma documentação que explica a diferença?

Em gsettings :

(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 no editor de dconf :

    
por Rmano 05.02.2014 / 01:55

1 resposta

31
  • dconf-editor usa schema 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) usa schema id para exibir / obter dados de configurações. Da mesma forma que qualquer outro aplicativo deve fazer que usa a API GSetttings.

  • Cabe ao desenvolvedor do aplicativo definir os dois como gostaria. (com alguma restrição para nomenclatura canônica). Portanto, path pode ser diferente de 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. Exemplo de projeto Tracker 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, o Apps não deve mexer com dconf

    Introdução da página do projeto dconf :

    dconf é um sistema de configuração de baixo nível. Seu objetivo principal é fornecer um back-end para GSettings em plataformas que ainda não possuem sistemas de armazenamento de configuração.

  • Onde estão armazenados os dados? (Ref: link )

    Um perfil é uma lista de bancos de dados de configuração. O que parece que o Gnome & amp; Unity usa o mesmo perfil.

    $ cat /etc/dconf/profile/gdm
    user-db:user
    system-db:gdm
    
    1. user-db:user : O primeiro banco de dados no perfil é de leitura / gravação rw e é criado no diretório pessoal do usuário.

      $ file ~/.config/dconf/user
      /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
      
    2. system-db:gdm : somente leitura

      $ file /etc/dconf/db/gdm
      /etc/dconf/db/gdm: GVariant Database file, version 0
      

      dconf pode ligar um armazenamento de estilo de texto além do Banco de dados GVariant da pasta db.d/* . Exemplo (Observe o caminho do arquivo, por isso é uma parte de 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 & amp; schema path ( *.gschema.xml )

    Qual é o arquivo XML do esquema na pasta data / glib-2.0 do meu aplicativo Quickly? trent mostra um bom exemplo do uso da API GSettings em um aplicativo do Quickly e sua conclusão com base em sua experiência.

    Voltar ao Vino. Cada aplicativo que usa GSsettings deve definir seus esquemas e deve armazená-los / instalá-los em /usr/share/glib-2.0/schemas/ (é um diretório simplificado):

    $ 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ê percebeu, o esquema é definido com id e path . O nome do arquivo de esquema segue o valor id .

    <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 em *.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 o esquema (Ref: Jogando com o dconf e o gnome-tweak-tool )

    Como parte do processo de instalação (ele tem um gatilho dpkg), os esquemas são compilados com a ferramenta glib-compile-schemas (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 de fornecedores ( *.gschema.override )

    Além dos arquivos de esquema, glib-compile-schemas lê os arquivos de substituição do fornecedor , que são arquivos-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 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 arquivos de substituição de utilizar, consulte Como personalizar a Live CD do Ubuntu? (5. Personalização 2: Planos de fundo e temas).

  • Bloquear arquivos

    Atualmente, o dconf suporta somente bloqueio por tecla, sem bloqueio de sub-caminho. Os valores definidos pelo usuário ainda serão armazenados em user-db , mas não afetarão os aplicativos. O dconf / gsettings retorna os valores padrão em vez das chaves bloqueadas. 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 uma execução eficaz:

    sudo dconf update
    

    Um bom mostruário: Configurações do dconf: padrões e bloqueios

  • Alterar as 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.

    Eu não consegui fazer isso funcionar:

    sudo su gdm -c 'gsettings ...'
    

    nem as outras respostas aqui Defina preferências padrão / globais do Gnome (Gnome 3) , pode ser que fosse para uma versão antiga.

por user.dz 06.02.2014 / 17:15