FreeBSD連載(51):中文X應用軟體

1999年12月23日 13:49 王波

X Window下的中文環境

  Unix的中文化對於Unix的推廣使用一向是個難題,對於象FreeBSD這 樣的操作系統來講,中文化工作比較零亂,雖然有不少X下的中文軟體,但是 由於國內軟體發展的水平還不高,自由軟體的開發水平更是如此,並且自由 軟體的開發者之間也沒有被有效的組織起來,因此還沒有出現一個很完整的 中文系統。

  然而中文相關的軟體卻相當豐富,在Ports Collection中,有一個類 別就是chinese,專門收集中文相關的處理軟體,但其中絕大多數是台灣的BIG5 版本。因為台灣在FreeBSD領域的發展相當快,很多軟體都是先由台灣出現相 應BIG5版本之後,再出現GB版本。

bash-2.02$ ls /usr/ports/chinese
CJK             big5fonts       gbfonts         nvi-big5        ted
CVS             c2t             gbscript        nvi-euc-cn      tin
Makefile        celvis          hc              nvi-euc-tw      xcin
README.html     cless           hztty           pine3
Wnn             cnsfonts        kcfonts         pine4
bg5ps           cxterm          lunar           pkg
big5con         gb2ps           mule-wnn4       rxvt

  • 中文X應用軟體

  在X Window下使用中文的基本條件之一就是需要安裝合適的中文字庫。 目前的XFree86發行版本中帶有一些基本中文字庫,在系統安裝選擇X組件的設 置時需要將其包括在內,然而中文存在不同的編碼方式,使用不同編碼的應用程 序就使用不同的字體檔案,XFree86中提供的中文字體對於另外一些中文程序還 是不夠的。

  Packages Collection中的chinese類別中也提供了其他的一些BIG5和GB 編碼的字體,如gbfonts、kcfonts、big5fongs等軟體包,需要使用pkg_add命令 將其安裝入系統。在真正執行中文X應用程序時,可以使用xlsfont命令可以查 看系統中是否有相應字庫,如:

$ xlsfonts *gb*
-cc-song-medium-r-normal-jiantizi-0-0-75-75-c-0-big5.1980-0
-cc-song-medium-r-normal-jiantizi-40-400-75-75-c-400-big5.1980-0
-cc-song-medium-r-normal-jiantizi-48-480-75-75-c-480-big5.1980-0
-isas-fangsong ti-medium-r-normal--0-0-72-72-c-0-big5.1980-0
-isas-fangsong ti-medium-r-normal--16-160-72-72-c-160-big5.1980-0
-isas-song ti-medium-r-normal--0-0-72-72-c-0-big5.1980-0
-isas-song ti-medium-r-normal--16-160-72-72-c-160-big5.1980-0
-isas-song ti-medium-r-normal--24-240-72-72-c-240-big5.1980-0
hanzigb16fs
hanzigb16st
hanzigb24st

  當一個字體不存在但同時存在同樣編碼的其他字體的時候,可以通過在 fonts.alias中定義別名的方法來幫助解決這個問題。

  除了Packages Collection提供的字體之外,從網路上也可以得到其他的 一些中文字體。在ftp://ftp.ifcss.org站點中收集了很多自由或共享中文字體 和中文軟體。

  • cxterm

  cxterm是一個使用非常廣泛的中文X終端程序,已經被移植到很多種類 的Unix系統中。它已經被FreeBSD的愛好者做成Packages,因此安裝起來非常簡 單。cxterm支持GB、BIG5以及日、韓文等編碼和多種輸入法。

  直接啟動cxterm只能用於瀏覽中文而不能進行輸入,這是由於cxterm需 要X系統的一些資源設置,以使用快捷鍵切換不同輸入法,並根據設置尋找其輸 入法對應的數據檔案。要輸入中文必須進行設置,將資源檔案預先載入,指定熱 鍵、輸入法和輸入字典所在的目錄。cxterm軟體包中提供了一個預設的資源檔案 CXterm.ad,一些使用者將這個檔案中的相應資源定義放入~/.Xdefault中,用戶 登錄進入X Window時就載入這些資源。另外,cxterm還提供了一個shell腳本 ── CXterm,可以在啟動cxterm之前完成相應的資源設置工作,所以一般應該 用如下CXterm命令來啟動cxterm,這種啟動方式更為簡易。

  $ CXterm &

  在中文的仿真終端下使用bash作為shell時,會發現在命令行中無法輸入 中文,這是因為bash對輸入進行了額外處理,可以在~/.bashrc中設置bash讓其 通過中文(另一個可能的因素為stty的終端設置):

stty pass8
bind 'set convert-meta off'
bind 'set meta-flag on'
bind 'set output-meta on'

  在FreeBSD下的預編譯的cxterm軟體包中,cxterm的輸入法及輸入字典放 在了/usr/X11R6/lib/X11/cxterm.dic目錄中。由於cxterm的影響,它的輸入法被 相當多的X Window下的中文軟體所使用。

  標準的CXterm是黑白的,但也存在一個補丁,使CXterm能顯示彩色。然 而,Packages Collecion中預編譯好的CXterm為標準程序,要使用彩色CXterm就 需要自己下載補丁並重新編譯CXterm。

  • Xcin與crxvt

  crxvt是另一個中文X仿真終端軟體,與cxterm相比,它更小巧,占用更少 的內存,並能以ANSI標準顯示彩色。Xcin是一個獨立的輸入伺服器,它獨立於具體 的X程序之外來提供中文輸入功能,X應用程序可以使用其接口支持中文輸入。crxvt 就使用Xcin作輸入系統。與cxterm的將輸入與仿真終端集成在一起的方式不同, Xcin在crxvt外打開一個單獨的視窗,但在crxvt中可以使用Ctrl-Space進行Xcin 下的中英文輸入切換。可以看出Xcin的設計目的是作為一個通用輸入模塊來實現 的,以便多個應用軟體都能使用同一個輸入模塊來進行中文輸入,而不是象cxterm 一樣,每個程序使用自己的輸入模塊。

  FreeBSD的Packages Collection中,也包括了Xcin與crxvt,但遺憾的是,他 們是台灣big5版本。當然這也容易理解,這個軟體本來就是由台灣人開發的。其中 crxvt可以通過使用hztty使其能顯示gb數據,但使用者顯然不會使用台灣的輸入法輸 入中文。幸好這個軟體已經被移植到GB環境下,並也有編譯好的軟體包形式(未被正 式FreeBSD發行版本收錄),這樣就可以使用pkg_add等工具進行管理,而不再需要手 工編譯。

  執行時,需要啟動xcin和cxrvt,注意要使用Xcin而不是xcin啟動Xcin,主要 是Xcin能使用正確的輸入法參數啟動真正的xcin程序,直接啟動xcin由於沒有指定輸 入模塊的設置,就會導致程序啟動失敗。

$ Xcin &
$ cxrvt &

  • 其他支持中文的軟體與中文本地化

  除了cxterm、cxrvt之外,Ports Collection還包括其他一些軟體,如hztty 用於終端上hz、big5、gb等不同編碼的動態轉換,big5con用於在控制台上顯示中文 big5碼(在hztty的幫助下可以顯示gb碼),cvi用於替換vi進行中文編輯工作,cless 用於替換more顯示中文,gb2ps用於中文文本檔案的打印處理等。

$ LANG=zh_CN.EUC; export LOCALE
$ LC_ALL=zh_CN.EUC; export LC_ALL

  對於支持多語言的軟體,使用環境變量LANG和LC_ALL來標識不同的語言、及 不同的環境。預設情形下使用的語言LANG被設置為C,如果要支持中文,應該設置為 zh_EUC.GB,同樣LC_ALL用於設置不同語言使用的信息格式的不同,如日期、時間的 表示方式等。雖然目前不是每個應用程序都支持這些環境變量,但隨著FreeBSD系統 的升級,應用程序國際化程度的提高,以後的軟體越來越多會對各種語言提供更完善 的支持。

  另外,FreeBSD下的一些傳統工具程序不支持國際化的語言,應該使用較新的 GNU工具代替。例如標準的ls命令不能顯示中文檔案名,可以安裝gnuls軟體包,使用 gnuls -N命令來代替預設的ls命令,可以通過shell中的alias設置,使得用戶感覺不 同執行命令的差異。