在Linux系统中正常显示中文,看似简单却暗藏细节,核心在于正确配置TrueType字体系统。本文提供一套完整的中文字体配置教程,按步骤操作即可轻松解决Linux中文显示问题。
准备步骤:创建字体存储目录
首先,需要建立一个专用目录来存放TrueType字体文件。例如:
$ mkdir /usr/X11R6/lib/X11/fonts/TrueType
该目录命名直观,便于识别为TrueType字体存放位置。
获取字体源文件
最便捷的方式是直接复用Windows系统中的现有字体。找到Windows的字体文件夹,将所需字体文件复制过来。以常见的SimSun(简宋体)为例:
$ cd "where_is_your_windows"/fonts/
$ cp simsun.ttf /usr/X11R6/lib/X11/fonts/TrueType
生成字体索引文件
此处有一个关键区别:许多用户习惯使用mkfontdir,但该工具主要适用于点阵字体。TrueType字体必须使用专用工具ttmkfdir:
$ cd /usr/X11R6/lib/X11/fonts/TrueType
$ ttmkfdir > fonts.dir
不过,ttmkfdir存在一个缺陷——它无法完整识别某些中文TrueType字体的编码。因此,生成的fonts.dir文件需要手动修正。
手动修正编码信息
默认生成的条目通常如下:
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-ascii-0
末尾的ascii-0表示ASCII编码,显然不符合中文需要。需将其改为正确的中文编码:
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gb2312.1980-0
这一步容易被忽略,但许多用户在重启X后遇到字符乱码问题,根源往往在此。
生成字体别名文件
后续操作较为简单:将fonts.dir复制并重命名为别名文件:
$ cat fonts.dir > fonts.alias
然后使用编辑器打开,将内容改为更简洁的别名形式:
SimSun -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gb2312.1980-0
该条目记录了字体名称与对应的X逻辑字体描述,便于后续程序调用。
配置字体搜索路径
这是整个配置流程中最关键的环节。RedHat系统默认使用xfs字体服务,其路径设置为FontPath "unix/:-1"。这种设计在网络环境多用户共享时很方便,但对于个人PC用户而言过于复杂。推荐直接修改XFree86配置文件,让系统从本地搜索字体。下面介绍两种方案:
方案一:沿用xfs(RedHat默认方式)
在这种情况下,无需修改/etc/X11/XF86Config文件。直接执行以下命令:
$ su
# chkfontpath -add /usr/X11R6/lib/X11/fonts/TrueType
如果操作成功,使用chkfontpath --list即可看到新增的路径。
方案二:禁用xfs,直接指定字体路径(推荐)
这才是更合理的做法。编辑/etc/X11/XF86Config,将默认的统一路径注释掉:
# FontPath "unix/:-1"
然后逐一列出所有需要使用的字体目录:
FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/misc"
FontPath "/usr/X11R6/lib/X11/fonts/Type1"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi"
FontPath "/usr/X11R6/lib/X11/fonts/TrueType"
最后务必关闭xfs后台服务:
# setup
在System services中取消xfs的勾选。
验证配置效果
不要急着重启X。先用一个小命令进行测试:
$ xfd -fn simsun &
如果成功弹出窗口并显示字体样式,说明配置正确。此时可以预览新字体的实际效果。
在Netscape中应用
以当年流行的Netscape浏览器为例,打开属性设置(Edit->Preference),在外观分类下找到字体设置。将编码选为Simplified Chinese (gb 2312-80),变宽字体选为Simsun (Misc),记得勾选“允许缩放”。重启Netscape后,中文即可清晰显示。
整个流程虽然步骤较多,但每一步的因果关系都十分明确。只要按照上述顺序操作,Linux下的中文字体问题基本能够顺利解决。
