2018/11/01

dconf の schema id と schema path の関係

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

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

schema idschema path は似て非なるものです。 私は最初、これらが 1対1対応だと思っていたため、Vino の設定時にかなり混乱しました。

実際には、これらは以下のような関係にあるので注意が必要です。

schema id と schema path は互いに独立

schema idschema path は 「ピリオドとスラッシュを入れ替えれば良いだけ」と書いてあることもあるのですが、そういうケースが多いだけで、それが保証されているわけではありません。 完全に独立しており、自由な値を使用することが出来ます。

1つの schema id に schema path を複数関連付けられる

これは relocatable schemas と呼ばれます。例えば、org.gnome.settings-daemon.plugins.sharing.servic という schema id は relocatable なので、 gsettings で値を取得しようとすると以下のようにエラーがでます。

$ 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 を指定すると値を取得することが出来ます。

gsettings get org.gnome.settings-daemon.plugins.sharing.service:/org/gnome/settings-daemon/plugins/sharing/vino-server/ enabled-connections
@as []

だったら最初から path だけで良いじゃんと思うのですが、idpath より抽象的な指定子という位置づけのようです。

たとえば、「path にはユーザー名が入っている」場合などです。 各ユーザーは schema id でアクセスしているけど、実際はユーザー毎に違う値を持ってこれる。という具合です。

この機能、複雑になった割にはメリットが少ないように思うのは私だけでしょうか? もう少し、dconf の設計思想などを学んだら理解できるのかもしれません。

参考

0 件のコメント: