漂亮好看的操作系統始終不是我們的目的. 希望這篇文字能幫助至少一兩個朋友從這個 Linux 的中文美化問題裡面徹底解脫出來, 而真正投入到利用 Linux 為我們服務, 利用 Linux 進行開發工作的實質性事情當中.
以下內容包括:
1. 為 Redhat 的兩個字體子系統添加字體
2. 讓 Enlightenment 顯示中文
3. Java 的中文問題:
- JBuilder 的中文問題
- J2SDK 的中文問題
- J2RE 的中文問題
大家挑自己需要的看就好了.
為 Redhat Linux 添加新字體
[注]
以下過程在 Redhat 9.0 上測試通過.
准備要安裝的字體, 如: simsun.ttc, tahoma.ttf...
根據發行注記裡所言分別為核心 X 字體子系統和 fontconfig 字體子系統添加字體:
為核心 X 字體子系統添加字體
[注]
以下部分應該對 Redhat 9.0 之前的版本也適用, 因為 核心 X 字體子系統存在
於迄今為止的版本中.
"如果你想給你的 Red Hat Linux 9 系統添加新字體,根據使用新字體的字體子系統而
定
,你必須明確所需步驟。對於核心 X 字體子系統,你必須:
1. 創建 /usr/share/fonts/local/ 目錄(如果它不存在):
mkdir /usr/share/fonts/local/"
- 這一步沒問題.
"如果你必須要創建 /usr/share/fonts/local/,你就必須把它添加到 X 字體服務器的
路
徑中:
chkfontpath --add /usr/share/fonts/local/"
- 如果是剛創建的 /usr/share/fonts/local/, 那麼執行這一行命令會提示錯誤
因為系統在這個目錄裡找不到 fonts.dir 文件, 然後就不 add.. 不過沒關系,
這一步跳過去, 在第三步之後做.
"2. 把新字體文件復制到 /usr/share/fonts/local/ 中"
- 照做.
"3. 使用以下命令來更新字體信息:
ttmkfdir -d /usr/share/fonts/local/ -o /usr/share/fonts/local/fonts.scale"
- 照做. 然後:
1) 把 fonts.scale 拷貝出來一份 fonts.dir.
2) chkfontpath --add /usr/share/fonts/local/
"4. 使用以下命令來重新啟動 xfs 字體服務器:
service xfs reload"
- 這一步我沒成功, 因為我發現 redhat 9 裡面沒有 service 這個命令. 於是
用笨辦法解決: 退出 X, 再 startx.
以上這些步驟做完之後, 所有 gtk 1.2 的程序裡有關字體的部分 (如 xmms 的字體設置
裡) 都多出來我們要的新字體, 像 simsun, tahoma. 這時可以在程序內部直接使用了.
比如我們讓歌曲列表裡的中文使用 simsum, 英文使用 tahoma, 可以這樣做:
1) 先在 xmms 的 Fonts 裡勾上選項 "Use fontsets" - 讓 xmms 支持雙字節的
中文字體;
2) 在 播放清單 部分浏覽字體, 選擇使用 simsum:
-misc-simsun-medium-r-normal-*-*-120-*-*-c-*-koi8-r
(不用拷這個, 選上 simsun 它自己就出來了)
對於英文字體的要用 tahoma 就這麼來, 一點小技巧:
把這段 "-misc-simsun-medium-r-normal-*-*-120-*-*-c-*-koi8-r" ^x 剪切下來,
再選字體為 tahoma, 出現這個:
-microsoft-tahoma-medium-r-normal-*-*-120-*-*-p-*-viscii1.1-1
好了, 在後面加個逗號, 把剛才剪切的那段東東 ^v 粘貼在後面成為:
-microsoft-tahoma-medium-r-normal-*-*-120-*-*-p-*-viscii1.1-1,
-misc-simsun-medium-r-normal-*-*-120-*-*-c-*-koi8-r
這麼一行, 保存一下, 於是歌曲列表就會對中文使用 simsum, 英文使用 tahoma.
再把這行拷下面 Main Window 的字體裡 (要勾上 "Use X font"), 這時 xmms 主窗
口裡的字體 (像那條來回滾動的歌曲信息的字體) 也和歌曲列表裡的一樣了.
注意, 我剛才說的是程序內部, 就象 xmms 的歌曲列表一樣, 而 程序本身, 即 xmms 自
己的窗口卻還是又粗又大的字體, 這時需要改 gtk 的字體設置:
1) 用 root 賬號: vi /etc/gtkrc.zh_CN
2) 把原來的:
fontset = "-adobe-helvetica-medium-r-normal--16-*-*-*-*-*-iso8859-1,
-*-*-medium-r-normal--16-*-*-*-*-*-gb2312.1980-0,*-r-*"
改成和我們上面用在 xmms 裡的字體一樣:
fontset =
"-microsoft-tahoma-medium-r-normal-*-*-120-*-*-p-*-viscii1.1-1,
-misc-simsun-medium-r-normal-*-*-120-*-*-c-*-koi8-r"
3) 保存退出, 關掉 xmms 這些程序, 再重新打開, 效果就出來了! Enjoy!
為 fontconfig 字體子系統添加字體
[注]
以下除了 "圖形化地安裝字體" 部分為 Rehat 9.0 獨有, 其他應該在之前版本也適
用, 大家試試.
這部分簡單多了, 看 redhat 9 發行注記:
"把新字體添加到 fontconfig 字體子系統比較簡單明了;只需把新字體復制到
/usr/share/fonts/ 目錄中即可(個體用戶可以把新字體復制到 ~/.fonts/ 目錄中來修
改他們的個人字體配置)
復制了新字體後,使用 fc-cache 來更新字體信息緩存:
fc-cache
(這裡的 應該是 /usr/share/fonts/ 或 ~/.fonts/ 目錄。)"
- 我是按這個辦法把字體拷 ~/.fonts/ 下面做成功的. (不想使用 root 用戶, hh)
"個體用戶還可以圖形化地安裝字體。方法是:在 Nautilus 中浏覽 fonts:///,然後把
新字體文件拖放到那裡。"
- 而這個辦法我失敗了, 無論我用普通用戶還是 root 用戶, 都無法把字體文件
拷貝或者 "拖放" 到 Nautilus 的 fonts:/// 文件夾裡. 不知道原因, 只好放棄.
按第一種方式添加成功後, 在 gtk 2 的程序裡設置字體的部分都可以自由使用新字體
比如在控制中心裡把應用程序字體都改成 simsum. (另外, 我發現 10 號大小的
simsun 效果最好, 不使用單色也非常清晰, 可以考慮使用)
總的來說, 為 Redhat Linux 添加新字體並沒有什麼太難太神秘的東西, 我個人做完之
後
覺得並沒有想像中那麼難, 尤其是 gtk 1.2 程序的字體部分, 不必改別人說過的那麼多
文件,
而實際只要添加完字體, 改個 /etc/gtkrc.zh_CN 就搞定了.
讓 Enlightenment 顯示中文
同樣簡單, 在上面的前提下, 找到你當前使用的 E 主題, 如我的是在
~/.enlightenment/themes/AquaX/
進入這個目錄後, 最簡單的做法:
gedit textclass.cfg
利用 gedit 的替換功能, 把所有關於字體的字符串, 如:
"-*-helvetica-bold-r-normal-*-*-120-*-*-*-*-*-*"
統統替換成和 xmms 一樣的:
-microsoft-tahoma-medium-r-normal-*-*-120-*-*-p-*-viscii1.1-1,
-misc-simsun-medium-r-normal-*-*-120-*-*-c-*-koi8-r"
保存退出, 清除 E 的緩存, Restart E, 搞定.
Java 的中文顯示
1. JBuilder 的中文問題
vi /etc/profile
添加:
JAVA_FONTS=/path/to/your/zhfonts/
export JAVA_FONTS
比如要用剛才弄好的 simsum 和 tahoma 字體, 因為我們已經把它們放在:
/usr/share/fonts/local 裡面了, 所以這裡就可以填:
JAVA_FONTS=/usr/share/fonts/local
注意, JBuilder 顯然用的是 fontconfig 字體子系統, 所以, 要讓它認出來
有哪些字體可以用, fonts.scale 和 fonts.dir 這兩個問題無疑是必需的.
相比較上面核心 X 字體子系統的字體文件夾裡, 即我的 ~/.fonts 裡面只有
字體文件和一個叫 "fonts.cache-1" 的文件, 可以對比著理解.
能讓 JBuilder 打開的程序顯示中文, 但 JBuilder 本身中文有問題, 下面:
修改 JBuilder 自己的字體配置, 比如我的 JBuilder 裝在:
~/Apps/Devs/JBuilder
那麼:
vi ~/Apps/Devs/JBuilder8/jdk1.4/jre/lib/font.properties
把這樣的東西:
serif.0=-b&h -lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
serif.1=--standard symbols l-medium-r-normal--*-%d-*-*-p-*-urw-fontspecific
serif.italic.0=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1
serif.italic.1=--standard symbols l-medium-r-normal--*-%d-*-*-p-*-urw-fontsp
ecific
統統換成如:
serif.0=-microsoft-tahoma-medium-r-normal-*-*-120-*-*-p-*-viscii1.1-1
serif.1=-misc-simsun-medium-r-normal-*-*-120-*-*-c-*-koi8-r
serif.italic.0=-microsoft-tahoma-medium-r-normal-*-*-120-*-*-p-*-viscii1.1-1
serif.italic.1=-misc-simsun-medium-r-normal-*-*-120-*-*-c-*-koi8-r
(還是用上面 xmms 一樣的字體)
所有這些 "*.0=.." 都是描述英文該用什麼字體
而所有 "*.1=..." 都是描述中文該用什麼字體
最後保存退出, JBuilder 裡的英文就都是 tahoma, 所有的中文都是 simsun
自然, 因為已經設置了 JAVA_FONTS , 所以所有 Java 的應用程序都能正常找到
中文字體並顯示.
最後注意一點, 我自己嘗試失敗的一件事:
記得我們上面配置核心 X 字體子系統時, 在 ~/.fonts/ 裡面放置了給 gtk 1.2
程序使用的字體文件, 如果這時把 JAVA_FONTS 指向這裡, 會出現的現象是:
JBuilder 裡面打開的程序可以顯示中文
但是, JBuilder 自己的窗口無法顯示中文.
我個人認為和 fontconfig 的 fonts.dir, fonts.scale 以及核心 X 的
"fonts.cache-1" 有關系, 具體就不懂了.
所以這裡可以體驗到兩個字體子系統的差異.
2. j2sdk 的中文問題:
上面這樣配置之後, 只有在 JBuilder 環境內開發程序時, 才能正常顯示中文
(因為 JBuilder 幫你找字體), 而如果我們回到命令行方式使用 j2sdk 開發,
這時會發現還是顯示不了中文, 讓我們由此及彼地推想一下, jbuilder 的 jre
裡把 font.properties 修改完就能顯示中文, 同樣, j2sdk 下面也有自己的
jre... 沒錯! 只要把我們剛才為 JBuilder 修改完的 fonts.properties 拷
到 $JAVA_HOME/jre/lib 下面, 把它原來的覆蓋, 一切 OK!
3. j2re 的中文問題:
還沒想到測試方法, 回頭再說...估計也一樣, j2re 下面的 lib 裡一樣有
font.properties, 所以, 應該可以再次重用 JBuilder 的 fonts.properties.
總之呢, 這一切都基於你最初要把字體添加正確, 其它都好辦了, 拷文件而已.´