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
で値を取得しようとすると以下のようにエラーがでます。
$ 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
だけで良いじゃんと思うのですが、id
は path
より抽象的な指定子という位置づけのようです。
たとえば、「path
にはユーザー名が入っている」場合などです。
各ユーザーは schema id
でアクセスしているけど、実際はユーザー毎に違う値を持ってこれる。という具合です。
この機能、複雑になった割にはメリットが少ないように思うのは私だけでしょうか?
もう少し、dconf
の設計思想などを学んだら理解できるのかもしれません。
参考
0 件のコメント:
コメントを投稿