歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

什麼是glibc?glibc是什麼?什麼是freetype?freetype是什麼?什麼是?Xlib是什麼?什麼是lo

什麼是glibc?glibc是什麼?什麼是freetype?freetype是什麼?什麼是?Xlib是什麼?什麼是locale?
說說EasyWine的亂碼問題
EW是個好東西,有了它,wine一下子就從雞肋變成雞大腿了,好多軟件都可以順利安裝,而不需要去研究wine的配置了。當然,暫時還是雞大腿,希望以後能吃出雞翅的味道:-)
不過呢,好多朋友下載了EW之後,確實乘興而來,敗興而歸,為啥?看不懂,中文全都是亂碼。若說是老外寫的程序,不支持中文,亂碼也還情有可原,可是EW分明是咱們的民族軟件,為啥會亂碼呢?而且,這個亂碼還特別的難纏,任你費九牛二虎之力,它還是我行我素。怎麼辦呢?
先來說說亂碼產生的原因。要說亂碼,這個話就長了,咱們先看看linux下面的字體解決方案。
            EasyWine          LumaQQ               
            Xdialog           firefox-1.0                                 kde
            xmms              zenity              firefox-1.5             qterm
             |                  |                      |                   |     
             |                  |                      |                   |
             |                  |                      |                   |
            gtk+-1.0         gtk+-2.0               gtk+-2.8               qt
             |                  |                      |                   |
             |                  |                      |                   |
             |                  |                      |                   |
             |                pango                   cario                |
             |                  |                      |                   |
             |                  |                      |                   |            
             |                  |                      |                   |
             |                freetype               freetype            freetype
            Xlib              fontconfig             fontconfig          libXft
            freetype          libXft                   |                   |
             |                  |                      |                   |            
             |                  |                      |                   |           
             |__________________|______________________|___________________|
                                           |
                                           |
                                         glibc
上面這個圖簡單的說明了一下Xwindow下面最常見的幾種自己解決方案。
最早最原始的方法就是調用Xlib裡面的字體函數顯示文字,很多早期的應用程序都使用這種方式,比如xterm什麼的,當然也是最難用的,效果不佳,效率也差。gtk+ 1.0版本就是用xlib來顯示文字,所以所有基於gtk+1.0的程序也就跟著使用x核心字體了。X核心字體,顧名思義,就是x內建的文字顯示功能。Xwindow啟動的時候,從配置文件得到字體所在路徑,從字體目錄裡面的fonts.dir fonts.scale encodings.dir等文件得到具體的字體信息,通過freetype type1等字體模塊來讀取字體文件。這種方式使用起來不是很靈活,而且字體顯示效率也不高,已經逐漸被淘汰了。
現在最常見字體系統就是libxft2+fontconfig+freetype的組合了,libxft2是字體繪制引擎,負責文字顯示;fontconfig負責字體的選擇控制;freetype用來讀取字體文件。cario是gtk+2.8最新引進來的圖形引擎,有自己的文字繪制引擎。這裡面,對於配置系統字體最重要的就是fontconfig了,fontconfig負責管理系統內所有的字體文件,給他們建立fonts.cache,並根據fonts.conf的配置選取合適的字體進行顯示。
最後還有glibc,glibc是什麼?即使c的運行庫,這個是出了內核意外所有程序都要用到的。glibc跟字體有什麼關系?沒關系!不過跟locale有關系。什麼是locale? 我也不知道,方正就是一大堆的東西,告訴你文字用什麼編碼啊,時間用什麼格式等等,基本上就相當於一個語言環境。在程序裡面,一段文字,可能是用unicode存儲的,但是我們的運行環境是gb2312,怎麼把unicode的文字變成gb2312編碼的文字,這個就要靠glibc了。所以想要正常使用中文,還要保證glibc也支持中文。
好了,關於字體系統就說這麼多了。fontconfig是很先進的解決方案,非常靈活,配置也很方便,網上資料也比較多。通常大家的中文解決方案,都是基於fontconfig的,這對於絕大多數應用來說,都足夠了,可以獲得非常完美中文顯示效果。事情壞就壞在還有很多老的程序不支持fontconfig,尤其是很多gtk+1.0的應用,比如xmms這種常用的程序。
長話短說了,上面廢話太多,還是說說具體怎麼配置吧。
首先,glibc。運行locale -a,看看你的系統支持zh_CN gb2312 utf-8什麼的不。支持 ---> ok。 不支持 ---》 想辦法吧(呵呵,比較罕見的)。
然後就要看看我們的字體文件都在哪裡了。通常,字體文件會放在/usr/share/fonts或者/usr/X11R6/lib/fonts裡面。裡面還有很多目錄,存放了各種字體文件。假設我們從windows下面考了個simsun.ttc放在/usr/share/fonts/local裡面。
   vim /etc/X11/xorg.conf
看看FontPath對不對,記住把/usr/share/fonts/local加進去,還有module裡面不要忘記加載freetype模塊。
Ok, 各位看官注意了,下面一步很關鍵,而且很少有人注意到,很多亂碼無法解決都是它引起的。
   cd /usr/share/fonts/encodings
   mkfontscale -e . -e large
   mkfontdir -e . -e large
   cd ..
   ln -snf /encodings
干什麼?生成encodings.dir這個字體編碼文件。xlib需要根據這個文件裡面的配置來正確解讀不同的文字編碼。如果這個xlib找不到這個配置,就會無法正確顯示中文了,比如亂碼,部分亂碼什麼的。
好了,現在重新啟動X ---為了使這個encodings.dir生效,很重要的。
   cd /usr/share/fonts/local
   mkfontscale
   mkfontdir
再次重啟X, 這樣simsun就可以正常使用了。運行xfontsel,因該可以看到simsun了。
現在配置gtkrc來控制gtk+按照我們的意願選擇字體,比如英文用verdana, 中文用simsun。(verdana哪裡來?windows下面找去)
/etc/gtk/這個目錄裡面有很多gtkrc.xxx,分別控制不同locale時的字體方案。我們主要關心gtkrc.zh_CN和gtkrc.utf-8這兩個文件,分別對應zh_CN和UTF-8這兩個locale。比如zh_CN.GB2312就使用gtkrc.zh_CN,en_US.UTF-8就使用gtkrc.utf-8。How about zh_CN.UTF-8?呵呵,這個用的是gtkrc.utf-8。
/etc/gtk/gtkrc.zh_CN
style "gtk-default-zh_CN" {
       fontset = "-*-verdana-medium-r-normal--12-*-*-*-*-*-iso8859-1,\
                  -*-simsun-medium-r-normal--12-*-*-*-*-*-iso10646-1,\
                  *-r-*"
}
class "GtkWidget" style "gtk-default-zh_CN"
意思就是當系統語言是中文,顯示文字時,首先找verdana這個字體,如果能顯示,ok;如果不能,繼續,看看simsun行不,行,ok;還不行,隨便找啦,找到能用就ok啦。
可以把/etc/gtk/gtkrc.utf-8做成gtkrc.zh_CN的一個鏈接。
    ln -snf /etc/gtk/gtkrc.zh_CN /etc/gtk/gtkrc.utf-8
Ok. Now, type
    EasyWine
看看還是不是亂碼了?還亂碼?跟我說,呵呵,咱們繼續研究。
怎麼看當前的locale?
         locale
就可以了。
怎麼設置locale?修改~/.profile,裡面加上
  export LANG=zh_CN.UTF-8
  export LC_ALL=zh_CN.UTF-8
夜深了,明早還要上班,不說了,以後有空再說吧。
BTW: Deman還是趁早換到zenity吧,不要用Xdialog了,這樣就沒這麼多亂碼問題了。呵呵,不過俺這篇文章也沒價值了
--------------------------------------------------------------------------------
作者: deman    時間: 2006-1-3 10:40
好文章,不過zenity在kde下很有問題啊.我在kde下都編譯不成功啊.n次都失敗.
--------------------------------------------------------------------------------
作者: peaker    時間: 2006-1-21 22:32
樓主的方法對於2.65版可能行不通了:
我原來用2.6 beta版的時候,用這種方法在debian中,UTF8下可以很好地顯示窗口中的文字,可是桌面菜單和程序菜單中全是亂碼,沒辦法只好自己改。
可是升級到2.65版後,原來的方法都不行了,用這些方法都是亂碼。於是我把\usr\bin下的easywine(可執行文件)用kwrite打開,另存為gbk編碼的,覆蓋原文件。 然後運行easywine。窗口可以正常顯示漢字了(暈,utf8下必須使用非utf8的編碼才可以正常顯示?), 但是桌面菜單和程序菜單還是亂碼。
easywine改成了gbk編碼是不是影響了桌面菜單和程序菜單的編碼啊?
--------------------------------------------------------------------------------
作者: deman    時間: 2006-1-21 22:42
http://www.easywine.org/bbs/view ... &extra=page%3D1
這裡答了你問題,另外問問題的話,最好新開一貼
--------------------------------------------------------------------------------
作者: pinuocao    時間: 2006-4-28 16:06
我運行了vim /etc/X11/xorg.conf
卻沒有FontPath顯示
--------------------------------------------------------------------------------
作者: deman    時間: 2006-4-28 17:11
你的是什麼系統?
--------------------------------------------------------------------------------
作者: pinuocao    時間: 2006-4-28 17:51
我裝的是 red hat linux9.0的
--------------------------------------------------------------------------------
作者: deman    時間: 2006-4-28 17:57
LOCALE 是什麼?
--------------------------------------------------------------------------------
作者: pinuocao    時間: 2006-4-28 18:19
GB18030
--------------------------------------------------------------------------------
作者: pinuocao    時間: 2006-4-28 18:34
utf8
--------------------------------------------------------------------------------
作者: deman    時間: 2006-4-28 18:53
那嘗試使用非utf8
Copyright © Linux教程網 All Rights Reserved