Schema
範例檔
產生 gschema.xml
執行下面指令,產生「org.example.app-schema.gschema.xml」
cat > org.example.app-schema.gschema.xml <<EOF
<schemalist>
<schema id="org.example.app-schema" path="/org/example/app-schema/" gettext-domain="app-schema">
<key name="greeting" type="s">
<default l10n="messages">"Hello"</default>
<summary>A greeting</summary>
<description>
Greeting!
</description>
</key>
<key name="count" type="i">
<default>99</default>
<summary>counter</summary>
<description>
Counter
</description>
</key>
<key name="allow" type="b">
<default>false</default>
<summary>Is allowed?</summary>
<description>
Allow?
</description>
</key>
</schema>
</schemalist>
EOF
執行下面指令,觀看「org.example.app-schema.gschema.xml」的內容
$ cat org.example.app-schema.gschema.xml
可以看到「org.example.app-schema.gschema.xml」的內容如下
<schemalist>
<schema id="org.example.app-schema" path="/org/example/app-schema/" gettext-domain="app-schema">
<key name="greeting" type="s">
<default l10n="messages">"Hello"</default>
<summary>A greeting</summary>
<description>
Greeting!
</description>
</key>
<key name="count" type="i">
<default>99</default>
<summary>counter</summary>
<description>
Counter
</description>
</key>
<key name="allow" type="b">
<default>false</default>
<summary>Is allowed?</summary>
<description>
Allow?
</description>
</key>
</schema>
</schemalist>
放至「/usr/share/glib-2.0/schemas/」
執行下面指令,將「org.example.app-schema.gschema.xml」放到「/usr/share/glib-2.0/schemas/」
$ sudo cp org.example.app-schema.gschema.xml /usr/share/glib-2.0/schemas/
編譯 schemas
執行下面指令,將「/usr/share/glib-2.0/schemas/」裡面的「.gschema.xml」編譯成「/usr/share/glib-2.0/schemas/gschemas.compiled」
$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
gsettings 使用範例
$ gsettings list-schemas | grep app-schema
顯示
org.example.app-schema
執行
$ gsettings list-recursively | grep app-schema
顯示
org.example.app-schema allow false
org.example.app-schema count 99
org.example.app-schema greeting 'Hello'
執行
$ gsettings list-keys org.example.app-schema
顯示
allow
count
greeting
執行
$ gsettings get org.example.app-schema greeting
顯示
'Hello'
執行
$ gsettings set org.example.app-schema greeting hi
然後再執行
$ gsettings get org.example.app-schema greeting
顯示
'hi'
執行
$ gsettings reset org.example.app-schema greeting
然後再執行
$ gsettings get org.example.app-schema greeting
顯示
'Hello'
dconf 使用範例
執行
$ gsettings set org.example.app-schema greeting hi
然後再執行
$ gsettings get org.example.app-schema greeting
顯示
'hi'
執行
$ dconf dump / | grep org/example/app-schema -A 2
顯示
[org/example/app-schema]
greeting='hi'
執行
$ dconf list /org/example/app-schema/
顯示
greeting
執行
$ dconf read /org/example/app-schema/greeting
顯示
'hi'
執行
$ dconf write /org/example/app-schema/count 88888
執行
$ dconf read /org/example/app-schema/count
顯示
88888
執行
$ gsettings get org.example.app-schema count
顯示
88888
關於 ~/.config/dconf/user
執行
$ strings ~/.config/dconf/user | grep count
顯示
count
執行
$ strings ~/.config/dconf/user | grep greeting
顯示
sgreeting
$ grep hi ~/.config/dconf/user
顯示
Binary file /home/sam/.config/dconf/user matches
執行
gsettings reset org.example.app-schema greeting
gsettings reset org.example.app-schema count
然後
$ dconf dump / | grep org/example/app-schema
沒有顯示任何結果,直接出現下一個提示字元。
$ strings /usr/share/glib-2.0/schemas/gschemas.compiled | grep greeting
顯示
greeting
解除 schema
執行
$ sudo rm /usr/share/glib-2.0/schemas/org.example.app-schema.gschema.xml
再執行
$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
測試是否解除
$ gsettings get org.example.app-schema greeting
顯示
No such schema 'org.example.app-schema'
執行
$ gsettings list-schemas | grep org.example.app-schema
和執行
$ gsettings list-recursively | grep org.example.app-schema
都沒有顯示任何結果,直接出現下一個提示字元。
相關檔案
- /usr/share/glib-2.0/schemas/org.example.app-schema.gschema.xml
- /usr/share/glib-2.0/schemas/gschemas.compiled
- ~/.config/dconf/user
小結
從以上的實驗,我個人推測,歸納以下規則
- 執行「gsettings get」,會先從「~/.config/dconf/user」這裡找資料,
- 若沒有找到,則「/usr/share/glib-2.0/schemas/gschemas.compiled」找。
- 「/usr/share/glib-2.0/schemas/gschemas.compiled」紀錄的是預設值,
- 若有透過「gsettings set」更改值,則會紀錄新到「~/.config/dconf/user」,
- 若是「gsettings reset」,則會將「~/.config/dconf/user」的「該紀錄(key和value)」刪除。