web-dev-qa-db-ja.com

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

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

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

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

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

しかし最近、gsettingsdconf-editorからアクセス可能なキーが同じではないことを発見しました。たとえば、vinoの設定はdconf-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

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

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

  • 両方を希望どおりに設定するのはアプリケーション開発者の責任です。 (正規の命名にはいくつかの制限があります)。したがって、pathidと異なる場合がありますが、ほとんどのアプリケーション開発者は同一のWordシリーズ/組み合わせを使用することを好みます。同じ大文字を保持しないものもあります。例 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
      

      dconfは、GVariant Databaseに加えて、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 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>
    ...
    

    気づいたなら、スキーマは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-schemasvendor overrideファイルを読み取ります。これは、スキーマ内のキーのデフォルト値をオーバーライドできるキーファイルです(参照: 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']
    

    オーバーライドファイルの使用例、 buntu 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 ...'
    

    ここでの他の答えはどちらもありません Set Default/Global Gnome Preferences(Gnome 3) 、それは古いリリースのものかもしれません。

38
user.dz