Linux配置文件常見GUI程序有三種
Linux配置文件經(jīng)過長時(shí)間的發(fā)展,這里我發(fā)表一下個(gè)人理解,下面就這就來講術(shù)Linux配置文件。Linux常見GUI程序有三種,GTK1、GTK2和QT,基于這三種圖形庫的程序在美化上是有不同要求的。XFree86下常用的字體繪制方案有xtt,freetype/Fontconfig/Xft。下面分別來看看.
1.GTK1的程序是不支持Fontconfig的。所以有點(diǎn)麻煩。拿到一個(gè)字體,你首先要讓X找到它對吧?這一步就是在 /etc/X11/XF86config的Section "files"段里面的Fontpath屬性里說明的詳細(xì)后面會(huì)講。好了,X現(xiàn)在知道字體在哪里了。
那gtk1的程序還不能直接使用它們,因?yàn)槲覀冞€沒有給它們"注冊",這就需要在前面設(shè)定的Fontpath里生成兩個(gè)文件fonts.dir fonts.scale這兩個(gè)文件里有Fontpath下所有字體的列表信息,就是一個(gè)"索引"。
有了這個(gè)"索引",gtk1的程序就可以找到相應(yīng)的字體了。生成這兩個(gè)文件的工具有mkfontdir,mkfontscale,ttmkfdir等等。好了,上面兩步如果正確完成了,你的gtk1程序現(xiàn)在就可以正常顯示漢字了。 常見的gtk1程序有xmms,gimp.....
2.GTK2和QT程序可以使用Fontconfig。Fontconfig是一個(gè)把字體選擇出來,并且決定怎么顯示這些字體的東東。類似于前面提到的 XF86config里的Fontpath屬性以及fonts.dir和fonts.scale的功能,就是讓程序找到這些字體。
所以,對于GTK2和 QT程序XF86config和fonts.dir就沒有用了。所以對于這類程序來說,主要的Linux配置文件是/etc/fonts/fonts.conf。 Fontconfig的高級功能有很多,詳細(xì)的說明可以參考這里: http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=48331 GTK2和QT的程序就很多了,KDE,GNOME,F(xiàn)irebird............
上面的兩段提到的只是讓程序找到字體,并不負(fù)責(zé)具體的顯示工作。它們只能保證你的程序能找到字體不會(huì)出現(xiàn)亂碼現(xiàn)象,也就是所謂的"漢化" 至于freetype/Xft或者xtt是什么?
我的理解它們是負(fù)責(zé)具體把字體顯示到屏幕上的東西,決定了你看到的字體是個(gè)什么效果。著名的"firefly美化包"就做了很多改善中文顯示效果的工作。也就是所謂的"美化" 到此你應(yīng)該對漢化,美化有了一個(gè)大概的概念。
接下來就是具體的操作 具體在Slackware 9.1上實(shí)現(xiàn)freetype/fontconfig/xft漢化美化工作 我用的是Slackware 9.1,但是對其它發(fā)行版,美化漢化的原理都是大同小異的。看了文章再通過實(shí)踐加以理解,應(yīng)該能夠靈活應(yīng)用其它發(fā)行版上的。 以下命令以#開頭表示是以root身份操作,$開頭則是以普通用戶身份操作。
Step1. 準(zhǔn)備TrueType字體,常用的如simsun.ttf tahoma.ttf verdana.ttf等等。然后決定你要把字體放在哪個(gè)目錄里。這個(gè)目錄隨你喜歡,我把它們放在/usr/X11R6/lib/X11/fonts/TTF/里。 比如你下載來的的ttf字體都在/home/username/myfonts/下面,就做如下操作 #cp /home/username/myfonts/*.ttf /usr/X11R6/lib/X11/fonts/TTF/
Step2. 讓GTK1程序找到你剛才放進(jìn)去的字體。上面說的方法你還沒有忘吧?讓我們先修改XF86config #vi /etc/X11/XF86config 找到 Section "Files" 這一段,在里面加上一個(gè)Fontpath屬性 FontPath "/usr/X11R6/lib/X11/fonts/TTF/"
當(dāng)然,如果里面已經(jīng)有了你放字體的路徑就不用加了,如果你的路徑和我不一樣,那就寫你的路徑,你也可以隨時(shí)添加自己的字體路徑,道理都一樣。
如果你在XF86config里發(fā)現(xiàn)了 Load "xtt"這行,把它注釋掉。
我是不用xtt的接下來當(dāng)然是準(zhǔn)備fonts.dir 和fonts.scale了。生成這兩個(gè)的文件工具前面說了。Slackware自帶的是mkfontdir和mkfontscale,我個(gè)人強(qiáng)烈不推薦這兩個(gè)工具,它們生成的fonts.dir很不爽,simsun.ttf里找不出gbk的encoding。
你可以去下載一個(gè)叫ttmkfdir的工具: ftp://216.254.0.38/linux/rawhide/1.0/i386/Fedora/RPMS/ttmkfdir-3.0.9-7.i386.rpm 假設(shè)你已經(jīng)裝上了這個(gè)工具,就做如下操作 #ttmkfdir /usr/X11R6/lib/X11/fonts/TTF/ -o /usr/X11R6/lib/X11/fonts/TTF/fonts.scale 現(xiàn)在檢查一下這個(gè)文件 #vi /usr/X11R6/lib/X11/fonts/TTF/fonts.scale
如果里面有 :1:simsun.ttfxxxxxxxxxxxxxxxxxxxx 這樣以 :1:開頭的行,把它們都刪掉,freetype不需要這個(gè)東西,而且可能會(huì)導(dǎo)致一些問題。特別再注意一下是不是生成了 simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0 simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-gbk-0 這兩行,因?yàn)閑ncoding是很重要的,mkfontdir生成的fonts.dir很可能沒有-gbk-0的編碼。
這樣也會(huì)導(dǎo)致一些問題。所以我用 ttmkfdir 確保無誤后 #cp /usr/X11R6/lib/X11/fonts/TTF/fonts.scale /usr/X11R6/lib/X11/fonts/TTF/fonts.dir (這兩個(gè)文件其實(shí)是一樣的) 你的gtk1程序已經(jīng)可以使用字體了,但是在gtk1程序里當(dāng)然還要指定你究竟要使用什么字體。對gtk1程序使用什么字體有一個(gè)全局Linux配置文件/etc/gtk/gtkrc.zh_CN
把我的Linux配置文件貼一下
# This file defines the fontsets for Chinese language (zh) using
# the simplified chinese standard GuoBiao as in mainland China (CN)
#
# 1999, Pablo Saratxaga
#
style "gtk-default-zh-cn" {
fontset = "-*-bitstream vera sans-medium-r-normal-*-*-120-*-*-p-*-microsoft-cp1252,\
-*-simsun-medium-r-normal-*-12-*-*-*-*-*-gbk-0"
}
class "GtkWidget" style "gtk-default-zh-cn"
這個(gè)文件告訴程序,對于英文字體優(yōu)先使用bitstream vera sans字體,對于中文由于bitstream vera sans沒有中文字體,就使用后面的simsun字體。至此,gtk1程序的漢化全部完成。 現(xiàn)在可以startx 運(yùn)行一個(gè)xmms看看,界面如何?至于xmms列表顯示中文可以搜索其它文章。也很簡單 補(bǔ)充幾點(diǎn)技巧和說明:
1. -*-bitstream vera sans-medium-r-normal-*-*-120-*-*-p-*-microsoft-cp1252 這種字體表示方法是不是很復(fù)雜?有個(gè)小技巧幫你選擇自己想要的字體,/usr/X11R6/bin/下有一個(gè)程序xfontsel ,運(yùn)行它。自己擺弄一下你就明白了。在這里你可以看到gtk1程序所能找到的ttf字體,有一些就是從你剛才生成的fonts.dir里讀出來的。通過它你還可以得到你需要的字體的正確表達(dá)格式。
2.Slackware 9.1有了bitstream vera sans 等一系列優(yōu)秀的ttf字體。它們默認(rèn)也的都在/usr/X11R6/lib/X11/fonts/TTF/目錄下,那些Veraxx.ttf的字體都是。可是那個(gè)目錄下的fonts.dir沒有把它們列進(jìn)去。如果你前面都是按照我的方法做了,剛才那步ttmkfdir已經(jīng)把它們收錄進(jìn)去了。如果你剛才操作的是別的目錄,那就在這個(gè)/usr/X11R6/lib/X11/fonts/TTF下ttmkfdir 一次了,方法和前面的一樣。
3.ttmkfdir生成的fonts.dir 和fonts.scale可能會(huì)有一些多余的編碼,比如那些以ascii-0和adobe standard-0結(jié)束的行,在我這里引起了一些問題,如果你覺得有什么異常,先把這樣的行都刪掉。
Step3 搞定gtk2和QT程序。 基于fontconfig選擇字體的程序就容易配置多,fontconfig也提供了一些更高級的功能。類似gtk1,現(xiàn)讓這些程序找到這些字體。前面已經(jīng)說過XF86config里的Fontpath和fonts.dir文件已經(jīng)沒有必要了。fontconfig的核心Linux配置文件是/etc/fonts/fonts.conf用vi打開這個(gè)文件 開始就有這么一段
/usr/X11R6/lib/X11/fonts
~/.fonts
/usr/share/fonts
這段是告訴fontconfig去這些目錄包括它們的子目錄里面去找字體。是不是比Fontpath和fonts.dir省事多了? 你要做的就是把你放字體的路徑加上,我剛才放自己的路徑已經(jīng)被包括在里面了。所以不用修改它。
運(yùn)行 #fc-cache 更新字體信息。 好了,現(xiàn)在gtk2和qt的程序就可以使用你添加的字體了,太簡單了吧?而且對fonts.conf的修改馬上就可以生效。不像gtk1程序修改gtkrc后還要重新運(yùn)行,修改XF86config甚至還要restart X等等。
類似gtk1程序,gtk2和qt程序都有一個(gè)全局字體配置。 gtk2程序的全局Linux配置文件是/etc/gtk-2.0/gtkrc 也把我的內(nèi)容貼上來
style "user-font" {
font_name="Bitstream Vera Sans 9" }
class "*" style "user-font"
是告訴程序使用Bitstream Vera Sans ,字體大小是 9 qt程序的默認(rèn)字體配置 $/usr/lib/qt-3.2.1/bin/qtconfig 出來一個(gè)圖形界面,在里面就可以方便選擇你要的字體了
補(bǔ)充幾點(diǎn)技巧和說明:
1.剛才提到的xfontsel可以幫你查看gtk1可用的字體,那么fontconfig究竟找到了哪些字體呢?也有一個(gè)程序叫fc-list,默認(rèn)在 /usr/X11R6/bin/下面,運(yùn)行它,會(huì)顯示一個(gè)列表。里面的字體名稱就是可以使用的字體。比如我剛才的gtk2Linux配置文件的字體名字就在里面。
2./etc/fonts/fonts.conf的強(qiáng)大的功能有很多,其實(shí)也很復(fù)雜。詳細(xì)的設(shè)置可參考本文開頭給出的文章連接。
3.你應(yīng)該會(huì)發(fā)現(xiàn)。比如在kde控制中心里選擇字體的時(shí)候,你可以選擇所有字體都是Tahoma,Vera sans什么的,我的gtkrc里寫的也是一個(gè)英文字體,這樣英文字體看起來很pp,而中文字體又是如何決定的呢?為什么我選擇了英文字體而中文字體還能正常顯示呢?這就是fontconfig的功勞,在我的fonts.config里有這么兩段:
Bitstream Vera Sans
Tahoma
Verdana
Arial
Helvetica
Nimbus Sans L
Luxi Sans
Kochi Gothic
AR PL KaitiM GB
AR PL KaitiM Big5
Baekmuk Dotum
SimSun
sans-serif
和
sans-serif
Bitstream Vera Sans
Tahoma
Verdana
Arial
Helvetica
Nimbus Sans L
Luxi Sans
Kochi Gothic
AR PL KaitiM GB
AR PL KaitiM Big5
Baekmuk Dotum
SimSun
這段告訴程序,遇到要顯示sans-serif的字體,優(yōu)先使用列表里在前面的字體,這里就是Bitstream Vera Sans,如果該字體不能顯示需要的字符就繼續(xù)在下面找,對于中文,就找到***的SimSun(宋體)了。你如果想用其它默認(rèn)的中文,就可以把你需要的中文字體摞在SimSun上面。就優(yōu)先使用你要的字體了。
到此為止,其實(shí)漢化已經(jīng)結(jié)束了,如果你覺得這個(gè)效果還不錯(cuò),那就此打住吧。如果你覺得還有些不***,如中文細(xì)節(jié)顯示的還不是很好,那就可以求助于firefly的美化包 安裝這些包就很簡單了,我簡要說一下這些包的功能。 fontconfig-2.2.1-i486-1.Firefly.tgz 會(huì)替換你現(xiàn)在的/etc/fonts/fonts.conf,加上了一些firefly修改的屬性。
freetype-2.1.5-i486-1.Firefly.tgz xft-2.1.2-i486-1.Firefly.tgz 這兩個(gè)是字體繪制的核心部分,裝上他們可以使中文顯示的更***,具體的原理我就不懂了,呵呵,也沒功夫去研究。
xfree86-4.3.0-i486-5.Firefly.tgz也能改善字體顯示效果,我這里不裝它,任務(wù)欄和標(biāo)題欄的中文粗體顯示不出來。如果你網(wǎng)絡(luò)不是很好,這個(gè)包也挺大,你可以不裝它,沒什么大礙。
qt-3.2.1-i486-1.Firefly.tgz 這個(gè)包裝不裝無所謂,還挺大的.我覺得除了讓你的qt程序選擇字體的時(shí)候可以顯示一個(gè)中文字體名(SimSun顯示為"宋體")以外沒什么更有價(jià)值的功能,可以不裝。
以上幾步都做完了,如果不出意外的話,你gtk2和qt程序顯示的英文是又粗又黑的,看起來就像用了粗體一樣。如果你覺得這樣挺好那就罷了。如果你和我一樣,覺得臟兮兮的很難看,可以在你的/etc/fonts/fons.conf上加上這么一段
medium
medium
spacing
proportional
demibold
bold
16
8
f
這樣一來,Tahoma,Verdana,等Windowz下幾個(gè)主要的ttf字體效果就和Windows下沒什么區(qū)別了。不過對于Bitstream Vera Sans來說似乎有點(diǎn)"少肉",但總體來說效果是不錯(cuò)的,請選擇使用。 補(bǔ)充一點(diǎn),對于GTK2的程序,一般也沒有必要改/etc/fonts/fonts.conf 如英文用Tahoma,中文用SimSun 可以直接在/etc/gtk-2.0/gtkrc里改成
style "default"
{
font_name="Tahoma,SimSun 9"
}
widget_class "*" style "default"
【編輯推薦】























