作者 主題: Gnome設定工具:GConf 簡介  (閱讀 2766 次)

0 會員 與 1 訪客 正在閱讀本文。

billy3321

  • 活潑的大學生
  • ***
  • 文章數: 269
  • 性別: 男
    • 檢視個人資料
    • 雨蒼的筆記本
Gnome設定工具:GConf 簡介
« 於: 2008-10-23 18:47 »
昨晚修改一些bash shell script的時候,發現這個工具可以用命令列的方式修改gnome裡面的一些設定,蠻方便的。因此就來稍微寫個簡介。

gconf的運作方式類似Windows上面的登錄檔,使用一個具有目錄結構的視窗來編輯一些桌面環境的偏好配置。底下以ubuntu為例,簡單介紹一下gconf的一些功能以及配置方式。

gconf的運作包含以下幾項:
gconf各項設定值所儲存的文件
gconfd-2:背景執行的deamon
gconftool-2:命令列中的設定程式
gconf-editor:圖形化的gconf設定程式

gconf的文件路徑保存於/usr/share/gconf/default.path此一檔案中,可概略分為force settings, user performances, 以及system defaults 。force settings表示這些設定使用者不能變動,user performances則代表是使用者可以變動的。而系統的預設值則存於system defaults裡面。

gconf有一個圖形化介面的編輯器,是為gconf-editor。輸入gconf-editor即可用簡單易懂的方式來修改與存取gconf設定。



從上圖可以簡單的看到,gconf裡面主要有四個資料夾:apps、desktop、schemas、system。簡單描述如下:

apps:
    主要是放各種在gnome環境下運作的應用程式偏好設定,例如nautilus、evolution等等。
desktop:
    桌面環境的配置,諸如background、font_rendering、interface等等。
system:
    關於系統方面的配置,裡面可以設定dns、proxy、samba等。

schemas:
    主要放置其他設定值的資料文件,存取與設定方式和其他三者不同。裡面的資料夾apps、desktop、system剛好就是其他三個資料夾,其中的目錄樹也幾乎相同。schemas所儲存的值又可細分為設定鍵名稱(key name)、設定鍵擁有者(key owner)、簡短說明(short description)、詳細說明(long scription)。

schema檔案存放於/usr/share/gconf/default/裡面,以schemas結尾的就是schema的檔案。
schema檔案的內容舉例如下(以apps_nautilus_preferences.schemas為例,經過簡化):

引用
< gconfschemafile> 
  < schemalist> 
    < !-- Keep the defaults in sync with the emergency fallbacks 
         in nautilus-global-preferences.c --> 
    < !-- General preferences --> 
    < schema> 
      < key> /schemas/desktop/gnome/file_views/show_hidden_files< /key> 
      < applyto> /desktop/gnome/file_views/show_hidden_files< /applyto> 
      < owner> nautilus< /owner> 
      < type> bool< /type> 
      < default> false< /default> 
      < locale name="C"> 
         < short> Whether to show hidden files< /short> 
         < long> 
          If set to true, then hidden files are shown in 
          the file manager.  Hidden files are either dotfiles or are
          listed in the folder's .hidden file. 
         < /long> 
      < /locale> 
      < locale name="zh_TW"> 
         < short> 是否顯示隱藏檔案< /short> 
         < long> 如設定為‘true’,所有隱藏檔案都會在檔案總管中顯示出來。所謂隱藏檔案即是任何第一個字元為一點‘.’的檔案,或者在某個資料夾的 .hidden 檔案內容之中。< /long> 
      < /locale> 
    < /schema> 
  < /schemalist> 
< /gconfschemafile> 

< locale name="zh_TW"> 指定了當系統的預設語言($LANG環境變數)為zh_TW時應該顯示的說明。

底下這兩行則代表了schema在GConf中的所在位置,以及對應到哪個值。
< key> /schemas/desktop/gnome/file_views/show_hidden_files< /key> 
< applyto> /desktop/gnome/file_views/show_hidden_files< /applyto> 

如果我們用gconf-editor去檢視/desktop/gnome/file_views/show_hidden_files這個值,就可以發現以下的說明:

引用
設定鍵說明
設定鍵名稱: /desktop/gnome/file_views/show_hidden_files
設定鍵擁有者: nautilus
簡短說明:  是否顯示隱藏檔案
詳細說明:  如設定為‘true’,所有隱藏檔案都會在檔案總管中顯示出來。所謂隱藏檔案即是任何第一個字元為一點‘.’的檔案,或者在某個資料夾的 .hidden 檔案內容之中。

剛好可以對應到我們剛才在schema檔案裡面的設定。


如果要新增設定鍵的話,在空白處按下右鍵選新增:



關於鍵值的設定,有分為整數(int)、邏輯值(bool)、字串(string)、浮點數(float)、以及清單(list)。若新增的為清單,則內容均需固定為整數、字串、邏輯值、浮點數的一種。

目前視窗化的gconf-editor中仍未找到新增資料夾(directory)的功能。


再來介紹文字化的編輯工具gconftool-2。gconftool-2可以在命令列環境中配置桌面環境,並且可以用於shell script中進行快速大量配置。

引用
gconftool-2 [-?] [-?|--help] [--usage] [-s|--set] [-g|--get]
        [--set-schema] [-u|--unset] [--recursive-unset] [-a|--all-entries]
        [--all-dirs] [--dump] [--load=STRING] [--unload=STRING]
        [-R|--recursive-list] [--dir-exists=STRING] [--shutdown] [-p|--ping]
        [--spawn] [-t|--type int|bool|float|string|list|pair] [-T|--get-type]
        [--get-list-size] [--get-list-element]
        [--list-type=int|bool|float|string] [--car-type=int|bool|float|string]
        [--cdr-type=int|bool|float|string] [--short-desc=描述] [--long-desc=描述]
        [--owner=擁有者] [--install-schema-file=檔名] [--config-source=來源]
        [--direct] [--makefile-install-rule] [--makefile-uninstall-rule]
        [--break-key] [--break-directory] [--short-docs] [--long-docs]
        [--get-schema-name] [--apply-schema] [--unapply-schema]
        [--ignore-schema-defaults] [--get-default-source] [-v|--version]

底下列出一些常用的命令參數

-s, --set          設定特定key的value並且同步之。需與 --type 一起使用。
-t, --type=int|bool|float|string|list|pair  設定所欲存取的value type
-g, --get          顯示特定key的value。
-u, --unset        將鍵值還原為預設值(system defaults)。
-a, --all-entries      印出該目錄中所有鍵值。
--all-dirs        列出目錄中的子目錄
-R, --recursive-list    遞迴列出目錄中的所有項目
--dir-exists=STRING   測試目錄是否存在。0為存在目錄,2為不存在。
--set-schema        設置 schema 的屬性,與 --short-desc(簡短說明), --long-desc(詳細說明), --owner(設定鍵擁有者), 和 --type 同時使用。
--makefile-install-rule    從GCONF_CONFIG_SOURCE這個環境變數所指定的路徑中安裝 schema 文件到 GConf 中。
--makefile-uninstall-rule  從GCONF_CONFIG_SOURCE這個環境變數所指定的路徑中移除schema 文件。
--direct         直接寫入到資料庫中,必須在gconfd這個服務沒有啟用的時候才能執行。
--dump     將資料庫內容一次列出來

舉例來說,如果要設定連線均使用位址為wwwproxy.xyz.com:3128的proxy,可以輸入

引用
$ gconftool-2 --type=bool   --set /system/gnome-vfs/use-http-proxy "TRUE"
$ gconftool-2 --type=string --set /system/gnome-vfs/http-proxy-host "wwwproxy.xyz.com"
$ gconftool-2 --type=int    --set /system/gnome-vfs/http-proxy-port "3128"
$ gconftool-2 --type=string --set /system/proxy/mode "manual"
$ gconftool-2 --type=bool   --set /system/http_proxy/use_same_proxy "TRUE"
$ gconftool-2 --type=bool   --set /system/http_proxy/use_http_proxy "TRUE"
$ gconftool-2 --type=string --set /system/http_proxy/host "wwwproxy.xyz.com"
$ gconftool-2 --type=int    --set /system/http_proxy/port "3128"

若是將

引用
$ gconftool-2 --type=string --set /system/http_proxy/host "wwwproxy.xyz.com"


改為

引用
# gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type=string --set /system/http_proxy/host "wwwproxy.xyz.com"

則是代表將這個值設定為強制(force settings)並寫入到/etc/gconf/gconf.xml.mandatory這個設定檔中。


針對schema的操作又不大相同了。

在前面說過,schema檔案存放於/usr/share/gconf/default/裡面,以schemas結尾的就是schema的檔案。而schema檔案裡面已經寫好匯入的gconf目錄,因此無須特別指定。

如果想要從特定檔案目錄匯入,例如家目錄中的.gconf資料夾匯入Test.schemas,則執行

引用
$ export GCONF_CONFIG_SOURCE="xml:readwrite:$HOME/.gconf"
$ gconftool-2 --makefile-install-rule Test.schemas

如果要自己設定,則執行

引用
$ gconftool-2 --set-schema /schemas/apps/kiba/launchers/file  --long-desc "這邊輸入詳細描述" --short-desc "這邊輸入簡短描述"
$ gconftool-2 --apply-schema /schemas/apps/kiba/launchers/file /apps/kiba/launchers/file

另外還有一個gconf-schemas的執行檔,可以對schema檔案做註冊或移除註冊的動作,不過實做方式目前仍不清楚。

引用
gconf-schemas --[un]register file1.schemas [file2.schemas [...]]


參考資料
http://www.gnome.org/projects/gconf/
http://www.ibm.com/developerworks/cn/linux/l-cn-gconf/index.html#5.GConf 命令行工具介绍
http://moosy.blogspot.com/2006/08/kiba-dock-on-sled-10.html
http://docs.sun.com/app/docs/doc/817-3909/6mjfjjvr6?l=zh_TW&a=view
http://www.linuxquestions.org/questions/linux-software-2/setting-firefox-gnome-and-other-application-proxy-globally-632478/

=================
本文同步發表於雨蒼的筆記本
http://billy3321.blogspot.com/
http://www.dotblogs.com.tw/billy3321
« 上次編輯: 2008-10-24 00:45 由 billy3321 »