dconf-editor と gsettings は同じデータベースにアクセスすべきではないでしょうか?

dconf-editor と gsettings は同じデータベースにアクセスすべきではないでしょうか?

これは基本的に「学術的な」質問であり、構成システムの内部をより深く理解しようとするものです。

私は、dconfシステムは、gnome3の新しい設定システムであり、(非推奨)に代わるものです。gconfこれは次のことから明らかである。Gconf、Dconf、Gsettings とそれらの関係

私には、プログラムgsettingsと、dconf-editor同じものにアクセスするための2つの異なる方法のように見えましたdconfデータベースは、
dconf とは何ですか? その機能は何ですか? どのように使用しますか?

編集: スキーマ名の大文字と小文字の違いとして誰かが気づいたことを発見しました。こちらをご覧ください ---dconf スキーマ名では大文字と小文字が区別されますか?;しかし、違いはそれだけではないようです。回答の1つに不一致の例がありますが、その説明は見つかりませんでした。なぜ

gsettingsしかし最近、とからアクセスできるキーがdconf-editor同じではないことに気付きました。たとえば、 の設定はの下にvinoありますが(下のスクリーンショットを参照)、gsettings では の下にあります 。この違いを説明するドキュメントはありますか?dconf-editororg.gnome.desktop.remote-accessorg.gnome.Vino

g設定:

(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
[...]

そして:

(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.desktop.remote-access
No such schema 'org.gnome.desktop.remote-access'

しかし、dconf エディター:

dconf エディター

答え1

  • dconf-editor設定データ ツリーを表示するために使用されますschema path。GVariant データベースにデータを保存するために使用されるのと同じ構造です。

  • gsettings(glib-2.0 から)schema id設定データを表示/取得するために使用します。GSettings API を使用する他のアプリケーションと同じ方法です。

  • 両方を希望どおりに設定するかどうかはアプリケーション開発者次第です。(正規の命名にはいくつかの制限があります) したがって、path異なる可能性がありますidが、ほとんどのアプリケーション開発者は、同一の単語の連続/組み合わせを使用することを好みます。同じ大文字小文字を保持しないものもあります。例Gnome のトラッカー プロジェクト

    <schema id="org.freedesktop.Tracker.Miner" path="/org/freedesktop/tracker/miner/" />
    

    さらに、いくつかの代替アプリケーションは、Gnome デスクトップに属する同じ設定を共有します。例:input-sources


  • 初め、アプリは、dconf

    紹介者dconfプロジェクトページ:

    dconf低レベルの構成システムです。その主な目的は、構成ストレージ システムをまだ備えていないプラットフォーム上で GSettings のバックエンドを提供することです。

  • データはどこに保存されますか?(参照:https://wiki.gnome.org/Projects/dconf/システム管理者

    プロファイルは構成データベースのリストです。Gnome と Unity は同じプロファイルを使用しているようです。

    $ cat /etc/dconf/profile/gdm
    user-db:user
    system-db:gdm
    
    1. user-db:user: プロファイルの最初のデータベースは読み取り/書き込み可能でrw、ユーザーのホーム ディレクトリに作成されます。

      $ file ~/.config/dconf/user
      /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
      
    2. system-db:gdm: 読み取り専用

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

      dconfフォルダーから GVariant データベースに加えてテキスト スタイル ストアをバインドできますdb.d/*。例 (ファイル パスに注意してください。これは の一部です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
       ...
      
  • schema idスキーマファイル: &の関係schema path*.gschema.xml

    Quickly アプリケーションの data/glib-2.0 フォルダーにあるスキーマ XML ファイルとは何ですか?によるトレントQuickly アプリケーションで GSettings API を使用する優れた例と、彼の経験に基づく結論を示します。

    Vino に戻ります。GSsettings を使用する各アプリケーションは、スキーマを定義し、それを次の場所に保存/インストールする必要があります/usr/share/glib-2.0/schemas/(これは 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>
    ...
    

    ご存知のとおり、スキーマは と で定義されていますidpathスキーマ ファイル名はid値の後に続きます。

    <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
    
  • *.enums.xml*.gschema.xmlファイルはカスタム列挙宣言用であり、同じで新しいデータ型として使用されます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'
    
  • スキーマのコンパイル(参照:dconf と gnome-tweak-tool で遊ぶ

    インストールプロセスの一部として(dpkgトリガーがあります)、スキーマはglib-compile-schemasツール(glibから)を使用してコンパイルされます。

    sudo glib-compile-schemas /usr/share/glib-2.0/schemas
    

    *.gschema.xmlバイナリファイルにコンパイルされます/usr/share/glib-2.0/schemas/gschemas.compiled

  • ベンダーオーバーライドファイル*.gschema.override

    スキーマファイルに加えてglib-compile-schemasベンダーオーバーライドファイルは、スキーマ内のキーのデフォルト値を上書きできるキーファイルです (参照:man glib-compile-schemasこれらには、アップストリーム スキーマのデフォルトを上書きするために Ubuntu ディストリビューションによって行われた変更が含まれています。

    $ 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']
    

    オーバーライドファイルの使用例については、Ubuntu Live CD をカスタマイズするにはどうすればいいですか?(5. カスタマイズ 2: 背景とテーマ)。

  • ファイルをロックする

    現在、dconf はキーごとのロックのみをサポートしており、サブパス ロックはサポートしていません。ユーザー定義の値は に保存されますuser-dbが、アプリケーションには影響しません。dconf/gsettings は、ロックされたキーの代わりにデフォルト値を返します。ロック ファイルは に保存されますdb.d/locks/。例:

    $ 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
    ...
    

    ロックの変更後、有効にするには以下を実行します。

    sudo dconf update
    

    良いショーケース:dconf 設定: デフォルトとロック

  • グローバル設定の変更

    gsettings/のデフォルトはdconf-editorを編集することですuser-db。 を変更するにはsystem-db、新しいオーバーライド ファイルを作成し、スキーマを再コンパイルします。

    これを動作させることができませんでした:

    sudo su gdm -c 'gsettings ...'
    

    ここでの他の答えもデフォルト/グローバル Gnome 設定を設定する (Gnome 3)、それは古いリリースのものだったのかもしれません。

関連情報