Chinaunix首页 | 论坛 | 博客
  • 博客访问: 372585
  • 博文数量: 80
  • 博客积分: 6032
  • 博客等级: 准将
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-05 20:07
文章分类

全部博文(80)

文章存档

2007年(1)

2006年(22)

2005年(57)

我的朋友

分类: LINUX

2005-12-06 14:47:11

加上基本原理……

一、基本原理:

linux下常见的GUI程序基于GTK1、GTK2和QT这三种图形库,在美化上是有不同要求的。XFree86下常用的字体绘制方案有xtt,freetype、Xft。下面分别来看看

1、GTK1 的程序
  是不支持Fontconfig的。所以有点麻烦。拿到一个字体,你首先要让X找到它对吧?这一步就是在 /etc/X11/XF86config(FC4和CentOS4.2已经把XF86config文件改为xorg.conf)的Section "files"段里面的Fontpath属性里说明字体文件在哪里

# vim /etc/X11/xorg.conf

Section "Files"
FontPath "/home/fonts"
EndSection

好了,X现在知道字体在哪里了。那gtk1的程序还不能直接使用它们,因为我们还没有 给它们"注册",这就需要在前面设定的Fontpath里生成两个文件fonts.dir fonts.scale这两个文件里有Fontpath下所有字体的列表信息,就是一个"索引"。有了这个"索引",gtk1的程序就可以找到相应的字体 了。生成这两个文件的工具有mkfontdir,mkfontscale,ttmkfdir等等。好了,上面两步如果正确完成了,你的gtk1程序现在就 可以正常显示汉字了。
常见的gtk1程序有xmms,gimp.....

2.GTK2和QT程序
可以使用 Fontconfig。Fontconfig是一个把字体选择出来,并且决定怎么显示这些字体的东东。类似于前面提到的 XF86config里的Fontpath属性以及fonts.dir和fonts.scale的功能,就是让程序找到这些字体。所以,对于GTK2和 QT程序来说,主要的配置文件是/etc/fonts/fonts.conf。
Fontconfig的高级功能有很多,详细的说明可以参考这里:
GTK2和QT的程序就很多了,KDE,GNOME,Firebird............

上面的两段提到的只是让程序找到字体,并不负责具体的显示工作。它们只能保证你的程序能找到字体不会出现乱码现象,也就是所谓的"汉化"
至于freetype/Xft或者xtt是什么?我的理解它们是负责具体把字体显示到屏幕上的东西,决定了你看到的字体是个什么效果。著名的"firefly美化包"就做了很多改善中文显示效果的工作。也就是所谓的"美化"

到此你应该对汉化,美化有了一个大概的概念。接下来就是具体的操作

二、步骤

1、GTK的设置

我把字体文件simsun.ttc和tahoma.ttf放在/home/fonts下
# mkdir /home/fonts
# cp simsun.ttc /home/fonts
# cp tahoma.ttf /home/fonts
# vim /etc/X11/xorg.conf

Section "Files"
……
FontPath "/home/fonts"         # 添加这一行,指出路径
……
EndSection

Section "Module"
Load "xtt"           #增加这一行,增加xtt模组
Load "dbe"
Load "extmod"
Load "fbdevhw"
Load "glx"
Load "record"
#Load "freetype" #注释掉
#Load "type1"         #注释掉,
该模组是渲染type1字体的, 和xtt冲突, 必需屏蔽
#Load "dri"          #注释掉,该模组是渲染Truetype字体的, 和xtt冲突, 必需屏蔽
EndSection

# ls /home/fonts
simsun.ttc tahoma.ttf
下面生成fonts.scale和fonts.dir文件
# ttmkfdir /home/fonts -o /home/fonts/fonts.scale
生成后要检查一下fonts.scale文件,把1打头的和ai打头的行都删掉,看看是否生成了gb2312和gbk编码
没问题的话就复制成为fonts.dir,这两个文件内容是完全一样的
# cp /home/fonts/fonts.scale /home/fonts/fonts.dir

下面是我生成的
# less /home/fonts/fonts.dir
44 # 注意,修改完这个文件后要修正这里的行数
simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-ascii-0
simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb18030.2000-0
simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0
simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-gbk-0
simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-ibm-cp850
simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-iso10646-1
simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-iso8859-1
simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-iso8859-15
simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-koi8-r
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-adobe-standard
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-ansi-1251
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-ascii-0
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso10646-1
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-1
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-10
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-11
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-13
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-15
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-16
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-2
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-3
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-4
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-5
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-6
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-7
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-8
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-iso8859-9
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-koi8-r
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-koi8-ru
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-microsoft-ansi
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-microsoft-cp1250
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-microsoft-cp1251
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-microsoft-cp1252
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-mulearabic-0
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-mulearabic-1
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-mulearabic-2
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-suneu-greek
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-tcvn-0
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-tis620-0
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-tis620-2
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-tis620.2529-1
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-tis620.2533-0
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-tis620.2533-1
tahoma.ttf -microsoft-Tahoma-medium-r-normal--0-0-0-0-c-0-viscii1.1-1


你的gtk1程序已经可以使用字体了,但是在gtk1程序里当然还要指定你究竟要使用什么字体。对gtk1程序使用什么字体有一个全局配置文件/etc/gtk/gtkrc.zh_CN
把我的配置文件贴一下

# vim /etc/gtk/gtkrc.zh_CN

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"


这个文件告诉程序,对于英文字体优先使用bitstream vera sans字体,对于中文由于bitstream vera sans没有中文字体,就使用后面的simsun字体。

至此,gtk1程序的汉化全部完成。

补充技巧:
# xfontsel
-*-bitstream vera sans-medium-r-normal-*-*-120-*-*-p-*-microsoft-cp1252 这种字体表示方法是不是很复杂?有个小技巧帮你选择自己想要的字体,/usr/X11R6/bin/下有一个程序xfontsel ,运行它。自己摆弄一下你就明白了。在这里你可以看到gtk1程序所能找到的ttf字体,有一些就是从你刚才生成的fonts.dir里读出来的。通过它 你还可以得到你需要的字体的正确表达格式。

2、GTK2和

基于fontconfig选择字体的程序就容易配置了,fontconfig的核心配置文件是/etc/fonts/fonts.conf

# #vim /etc/fonts/fonts.conf

<dir>/home/fonts</dir> #增加这一行,<是<,>是>
<dir>/usr/share/fonts</dir>
<dir>/usr/X11R6/lib/X11/fonts/Type1</dir><dir>/usr/X11R6/lib/X11/fonts/OTF</dir>
<dir>~/.fonts</dir>

# fc-cache #更新字体信息

类似gtk1程序,gtk2和qt程序都有一个全局字体配置。 gtk2程序的全局配置文件是/etc/gtk-2.0/gtkrc


补充技巧:
# fc-list
刚才提到的xfontsel可以帮你查看gtk1可用的字体,那么fontconfig究竟找到了哪些字体呢?也有一个程序叫fc-list

我的gtkrc里写的也是一个英文字体,这样英文字体看起来很pp,而中文字体又是如何决定的呢?为什么我选择了英文字体而中文字体还能正常显示呢?这就是fontconfig的功劳,在我的fonts.conf里有这么两段:


<!--
Sans-serif faces
-->
<alias>
family>Bitstream Vera Sans</family>
<family>Tahoma</family>
<family>Verdana</family>
<family>Arial</family>
<family>Helvetica</family>
<family>Nimbus Sans L</family>
<family>Luxi Sans</family>
<family>Kochi Gothic</family>
<family>AR PL KaitiM GB</family>
<family>AR PL KaitiM Big5</family>
<family>Baekmuk Dotum</family>
<family>SimSun</family>
<default><family>sans-serif</family></default>
</alias>


<alias>
<family>sans-serif</family>
<prefer>
<family>Bitstream Vera Sans</family>
<family>Tahoma</family>
<family>Verdana</family>
<family>Arial</family>
<family>Helvetica</family>
<family>Nimbus Sans L</family>
<family>Luxi Sans</family>
<family>Kochi Gothic</family>
<family>AR PL KaitiM GB</family>
<family>AR PL KaitiM Big5</family>
<family>Baekmuk Dotum</family>
<family>SimSun</family>
</prefer>
</alias>


这 段告诉程序,遇到要显示sans-serif的字体,优先使用列表里在前面的字体,这里就是Bitstream Vera Sans,如果该字体不能显示需要的字符就继续在下面找,对于中文,就找到最后的SimSun(宋体)了。你如果想用其它默认的中文,就可以把你需要的中 文字体摞在SimSun上面。就优先使用你要的字体了。

3、QT的设置

qt程序的默认字体配置

$/usr/lib/qt-3.2.1/bin/qtconfig

出来一个图形界面,在里面就可以方便选择你要的字体了



三、结束


以上几步都做完了,如果不出意外的话,你gtk2和qt程序显示的英文是又粗又黑的,看起来就像用了粗体一样。如果你觉得这样挺好那就罢了。如果你和我一样,觉得脏兮兮的很难看,可以在你的/etc/fonts/fons.conf上加上这么一段





medium


medium




spacing
proportional

demibold
bold





16


8


f




这样一来,Tahoma,Verdana,等Windowz下几个主要的ttf字体效果就和Windows下没什么区别了。不过对于Bitstream Vera Sans来说似乎有点"少肉",但总体来说效果是不错的,请选择使用。


补充一点,对于GTK2的程序,一般也没有必要改/etc/fonts/fonts.conf
如英文用Tahoma,中文用SimSun
可以直接在/etc/gtk-2.0/gtkrc里改成

style "default"
{
font_name="Tahoma,SimSun 9"
}

widget_class "*" style "default"

Stern des Südens


阅读(2185) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~