これは基本的に「学術的な」質問であり、構成システムの内部をより深く理解しようとするものです。
私は、dconfシステムは、gnome3の新しい設定システムであり、(非推奨)に代わるものです。gconfこれは次のことから明らかである。Gconf、Dconf、Gsettings とそれらの関係。
私には、プログラムgsettings
と、dconf-editor
同じものにアクセスするための2つの異なる方法のように見えましたdconfデータベースは、
dconf とは何ですか? その機能は何ですか? どのように使用しますか?
編集: スキーマ名の大文字と小文字の違いとして誰かが気づいたことを発見しました。こちらをご覧ください ---dconf スキーマ名では大文字と小文字が区別されますか?;しかし、違いはそれだけではないようです。回答の1つに不一致の例がありますが、その説明は見つかりませんでした。なぜ。
gsettings
しかし最近、とからアクセスできるキーがdconf-editor
同じではないことに気付きました。たとえば、 の設定はの下にvino
ありますが(下のスクリーンショットを参照)、gsettings では の下にあります 。この違いを説明するドキュメントはありますか?dconf-editor
org.gnome.desktop.remote-access
org.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 エディター:
答え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
user-db:user
: プロファイルの最初のデータベースは読み取り/書き込み可能でrw
、ユーザーのホーム ディレクトリに作成されます。$ file ~/.config/dconf/user /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
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> ...
ご存知のとおり、スキーマは と で定義されています
id
。path
スキーマ ファイル名は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)、それは古いリリースのものだったのかもしれません。