2018/11/01

GSettings と dconf の関係

「GNOME 3 の設定は [dconf](https://wiki.gnome.org/Projects/dconf) という設定管理システムに保存されていて、[GSettings]([GSettings](https://developer.gnome.org/platform-overview/stable/tech-gsettings.html.en) はそのラッパー」という程度に理解していたのですが、
[Vino の設定をしたり](https://kokufu.blogspot.com/2018/10/ubuntu-1804-vino.html) するうちに、理解が深まってきたのでまとめておこうと思います。

> 参考
>
> [First steps with GSettings – GTK+ Development Blog](https://blog.gtk.org/2017/05/01/first-steps-with-gsettings/)



### GSettings とは
先に「GSettings は dconf のラッパー」と書いたのですが、 これはあまり正確な理解ではありませんでした。

正確に書くとすると「GSettings は dconf**等**へのアクセスを提供する、[GTK+](https://www.gtk.org/)GTK+ 3 で導入 のAPI群」といったところでしょうか。

具体的には `g_settings_get_value()` のように `g_settings_` で始まる関数群のことです。

> 参考
> 
> [GSettings: GIO Reference Manual](https://developer.gnome.org/gio/stable/GSettings.html)

dconf「**等**」 と書いたところが重要です。GSettings は各OSでバックエンドに使用する設定管理システムが異なるのです。
- Windows だと レジストリ
- Mac OS X だと plists
- Linux正確には GNOME 関連だけ。OS としては Linux という意味。だと dconf

GTK+ はクロスプラットホームなので、OS非依存のAPIが用意されているというわけです。


### gsettings 
なお、全て小文字で書く `gsettings` は
「GSettings API を内部で使用して、dconf へアクセスするコマンドラインツールの名前」を表すことが多いようです。

例えば、以下のように使用します。

```console
`gutter: false;
$ gsettings get org.gnome.Vino prompt-enabled 
true
```


### dconf-editor
`gsettings` はコマンドラインツールですが、GUIで参照・編集したい場合は、
`dconf-editor` を使用します。
`dconf-editor` は `dconf` を直接、編集するための GUI ツールですgtk+ が GUI ツールキットなことを考えると、gsettings が GUI の方がしっくりくるけど…
本来、`dconf` の設定はアプリケーションから行われるべきですが、変更する術がユーザーに提供されていないものもあります。 また、値がどうなっているのか確認したい時もあります。 そういった際に、このツールがあると便利です。 ### schema id と schema path gsettings や dconf で設定を参照・変更する際に注意しなければいけないのが、`schema id` と `schema path` の存在です。 別途記事にまとめたので、ご参照ください。 > [dconf の schema id と schema path の関係 | 穀風](https://kokufu.blogspot.com/2018/11/dconf-schema-id-schema-path.html)
### GConf 余談ですが、GNOME の設定については [GConf](https://ja.wikipedia.org/wiki/GConf) について書かれているものも多くあります。 この GConf (gconftool 等)は GNOME 2 で採用されていた設定管理システムです。 GTK+ 2 ではなく、GNOME 2 です。つまり、クロスプラットホームではありません。 GNOME 3 では dconf で置き換えられたので、ほとんど使う機会はありません。ただ、一部の古いアプリケーションでは使用されているようです。

0 件のコメント: