dconf-editorとgsettingsは同じデータベースにアクセスすべきではありませんか?


34

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

dconfシステムは、(非推奨の)gconfを置き換えたgnome3の新しい構成システムであることを理解しています。これは、Gconf、Dconf、Gsettings、およびそれらの間の関係から非常に明確です。

プログラムgsettingsdconf-editor、同じdconfデータベースにアクセスする2つの異なる方法があります。これは、
dconfとは何ですか、その機能は何ですか?

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

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

では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
[...]

そして:

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

しかし、dconf-editorでは

dconf-editor

回答:


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

  • gsettings(glib-2.0より)schema id設定データの表示/取得に使用します。GSetttings 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/SystemAdministrators

    プロファイルは、構成データベースのリストです。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
      

      dconfdb.d/*フォルダからGVariant Databaseに加えてテキストスタイルストアをバインドできます。例(ファイルパスに注意してください。したがって、の一部です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 idschema path*.gschema.xml)の関係

    Quicklyアプリケーションのdata / glib-2.0フォルダーにあるスキーマXMLファイルは何ですか?by trentは、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>
    ...
    

    あなたが気づいた場合は、スキーマを使用して定義されるidpathid値の後にスキーマファイル名が続きます。

    <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読み取ります。これは、スキーマ内のキーのデフォルト値をオーバーライドできるキーファイルです(参照:)。アップストリームスキーマのデフォルトをオーバーライドするために、Ubuntuディストリビューションによって行われた変更が含まれています。man glib-compile-schemas

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

    オーバーライドファイルの使用例。UbuntuLive 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-editoruser-db。変更するsystem-dbには、新しいオーバーライドファイルを作成し、スキーマを再コンパイルします。

    私はこれを機能させることができませんでした:

    sudo su gdm -c 'gsettings ...'
    

    ここにある他の回答「デフォルト/グローバルGnomeプリファレンスの設定(Gnome 3)」は、古いリリースのものではないかもしれません。


1
@Rmano、私もそれについて学ぶ好奇心がありました。大いに感謝する。
user.dz 14

1
dconfを使用してユーザー固有の設定を定義する方法を説明してもらえますか? 2番目のユーザーの場合、どのように?)?私の知る限り、「テキストスタイルストア」はシステム全体の設定でのみサポートされていますよね?ユーザー設定のみをダンプする方法はありますか(例:〜/ .config / dconf / userの設定)。「dconf dump /」について知っていますが、これはシステムのデフォルトを含むユーザーDB全体に対するものです。ドキュメントは非常に不完全です。
アナトーリ

1
@Anatoli、ええ、テキストストアはシステム全体のデータベースでのみ機能します。dconf dump /ユーザーが変更したすべてのエントリを実際にダンプします。変更されていないエントリまたはリセットされたエントリは含まれません。(たとえば、エントリが変更または設定されていても、それらの値はデフォルトと同じです)。askubuntu.com/q/420527/26246をご覧ください。また、DB全体ではないため、パスを設定できます。例:dconf dump /com/
user.dz

1
@ user.dz、説明ありがとう。ユーザー固有の設定を構成する唯一の方法は、必要な設定で別のクリーンなアカウントに「ユーザー」GVDBバイナリファイルを作成し、それを.config / dconfフォルダーにコピーすることですか?私の知るdconf load / < file限り、ユーザーとしてログインせずに使用する方法はありません。
アナトーリ

1
@Anatoli、はい、その一方。パスワードやルート権限(セキュリティルール)が必要な場合、ログに記録することなく他のユーザー設定を変更する簡単な方法かもしれません。これは動作するはずです sudo su username2 -c "dconf load / < file"
-user.dz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.