2018/11/01

dconf の schema id と schema path の関係

dconf は設定値を一意に決定する際、`schema id` と `schema path` という2種類の文字列を使用します。

`schema id` は "."(ピリオド)区切りの文字列で、`gsettings` でキーを指定する際のデフォルトです。
これに対し、`schema path` は  "/"(スラッシュ)区切りの文字列で `dconf-editor` の上部に表示されています。

`schema id` と `schema path` は似て非なるものです。 私は最初、これらが 1対1対応だと思っていたため、Vino の設定時にかなり混乱しました。 実際には、これらは以下のような関係にあるので注意が必要です。 ### schema id と schema path は互いに独立 `schema id` と `schema path` は 「ピリオドとスラッシュを入れ替えれば良いだけ」と書いてあることもあるのですが、そういうケースが多いだけで、それが保証されているわけではありません。 完全に独立しており、自由な値を使用することが出来ます。 ### 1つの schema id に schema path を複数関連付けられる これは **relocatable schemas** と呼ばれます。例えば、`org.gnome.settings-daemon.plugins.sharing.servic` という `schema id` は relocatable なので、 `gsettings` で値を取得しようとすると以下のようにエラーがでます。 ```console `gutter: false; $ gsettings get org.gnome.settings-daemon.plugins.sharing.service enabled-connections Schema “org.gnome.settings-daemon.plugins.sharing.service” is relocatable (path must be specified) ``` この場合、以下のように `id` に続けて `:path` を指定すると値を取得することが出来ます。 ```console `gutter: false; gsettings get org.gnome.settings-daemon.plugins.sharing.service:/org/gnome/settings-daemon/plugins/sharing/vino-server/ enabled-connections @as [] ``` だったら最初から `path` だけで良いじゃんと思うのですが、`id` は `path` より抽象的な指定子という位置づけのようです。 たとえば、「`path` にはユーザー名が入っている」場合などです。 各ユーザーは `schema id` でアクセスしているけど、実際はユーザー毎に違う値を持ってこれる。という具合です。 この機能、複雑になった割にはメリットが少ないように思うのは私だけでしょうか? もう少し、`dconf` の設計思想などを学んだら理解できるのかもしれません。 > 参考 > > - [First steps with GSettings – GTK+ Development Blog](https://blog.gtk.org/2017/05/01/first-steps-with-gsettings/) > - [GSettings と dconf の関係 | 穀風](https://kokufu.blogspot.com/2018/10/gsettings-dconf_31.html)

0 件のコメント: