これは基本的に「アカデミック」な質問です。構成システムの内部をよりよく理解しようとするためです。
dconfシステムは、(非推奨)gconf;を置き換えたgnome3の新しい構成システムであることを理解しています。これは Gconf、Dconf、Gsettingsおよびそれらの関係 から明らかです。
プログラムgsettings
およびdconf-editor
は、同じdconfデータベースにアクセスするための2つの異なる方法であり、
dconfとは何ですか、その機能は何ですか、どのように使用しますか?
編集:私は誰かがそれをいくつかのスキーマ名の大文字と小文字の違いとして気づいたことを発見しました。ここを参照してください--- dconfスキーマ名は大文字と小文字を区別しますか? ;しかし、違いはそれに限定されないようです。答えの1つに不一致の例がありますが、whyの説明は見つかりませんでした。
しかし最近、gsettings
とdconf-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
は、schema path
を使用して設定データツリーを表示します。 GVariantデータベースにデータを保存するために使用されるのと同じ構造。
gsettings
(glib-2.0から)は、schema id
を使用して設定データを表示/取得します。 GSetttings APIを使用する他のアプリケーションと同じ方法。
両方を希望どおりに設定するのはアプリケーション開発者の責任です。 (正規の命名にはいくつかの制限があります)。したがって、path
はid
と異なる場合がありますが、ほとんどのアプリケーション開発者は同一の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
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 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 id
とschema 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>
...
気づいたなら、スキーマは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
はvendor 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) 、それは古いリリースのものかもしれません。