中文字体美化是个很讨厌的事情,无数初学者在这里面浪费了无数时间,做了无数没有意义的事情。但这也是不得不做的,我把 Debian/Ubuntu 所需要的中文字体美化操作步骤详细记录在这里,希望能节约大家一部分时间。

1 安装必要的字体包

Debian 和 Ubuntu 下对中文支持比较好的字体有:ttf-droidttf-wqy-zenheifonts-notottf-wqy-microhei 等。把这些字体都装上之后,应该就已经具备一个基本能用的中文环境了。

另外,在低版本的 Debian 或 Ubuntu 下,文鼎提供的楷体和上海宋曾经是默认安装的中文字体。这些字体年代比较久远,字形不太美观,而且支持的字符集也很有限,却因为历史原因,在字体配置文件里被设定了极高的优先级。一旦安装了这些字体,它们很可能会强行取代比它们更加美观的字体。因此,建议使用以下命令卸载一切文鼎系列的中文字体:

$ sudo apt remove --purge ttf-arphic-*

2 修改字体配置文件

在 Ubuntu Precise 之前,中文默认的字体配置效果已经非常好了。但到了 Precise 的时候,韩国新推出了几个免费韩文字体。当然了,免费字体这东西,本来就是多多宜善,但问题就在于,韩国人做的韩文字体里不仅仅有韩文,还包含了中文。而这些字体里的中文部分,不客气地说,实在是丑得可以。而韩国人把这个字体设置成 Ubuntu 里的中文默认字体,这就太让人难以接受了。

为了让中文显示效果更让人可以接受一些,滇狐决定完全屏蔽那几个韩文字体。反正滇狐不懂韩语,因此少了几个韩文字体,对正常生活影响不大了。大家可以参考以下滇狐自己的字体配置文件。将以下内容写到 ~/.config/fontconfig/fonts.conf

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
 <alias>
  <family>serif</family>
  <prefer>
   <family>Noto Serif</family>
   <family>DejaVu Serif</family>
   <family>Bitstream Vera Serif</family>
   <family>Droid Serif</family>
   <family>AR PL UMing CN</family>
   <family>AR PL ShanHeiSun Uni</family>
   <family>Droid Sans Fallback</family>
   <family>WenQuanYi Micro Hei</family>
   <family>WenQuanYi Zen Hei</family>
  </prefer>
 </alias>
 <alias>
  <family>sans-serif</family>
  <prefer>
   <family>Roboto</family>
   <family>Noto Sans</family>
   <family>DejaVu Sans</family>
   <family>Bitstream Vera Sans</family>
   <family>Droid Sans</family>
   <family>Droid Sans Fallback</family>
   <family>WenQuanYi Micro Hei</family>
   <family>WenQuanYi Zen Hei</family>
   <family>AR PL UMing CN</family>
   <family>AR PL ShanHeiSun Uni</family>
  </prefer>
 </alias>
 <alias>
  <family>monospace</family>
  <prefer>
   <family>DejaVu Sans Mono</family>
   <family>Bitstream Vera Sans Mono</family>
   <family>Droid Sans Mono</family>
   <family>Droid Sans Fallback</family>
   <family>WenQuanYi Micro Hei Mono</family>
   <family>WenQuanYi Zen Hei Mono</family>
   <family>AR PL UMing CN</family>
   <family>AR PL ShanHeiSun Uni</family>
  </prefer>
 </alias>
 <!-- Default Alias -->
 <alias>
  <family>Roboto</family>
  <default>
   <family>sans-serif</family>
  </default>
 </alias>
 <!-- Generic font families -->
 <match target="pattern">
  <test name="family" qual="any">
   <string>serif</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
   <string>Noto Serif</string>
  </edit>
 </match>
 <match target="pattern">
  <test name="family" qual="any">
   <string>sans-serif</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
   <string>Roboto</string>
  </edit>
 </match>
 <match target="pattern">
  <test name="family" qual="any">
   <string>monospace</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
   <string>DejaVu Sans Mono</string>
  </edit>
 </match>
 <match target="pattern">
  <test name="family" qual="any">
   <string>monospace</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
   <string>DejaVu Sans Mono</string>
  </edit>
 </match>
 <!-- Disable ugly Nanum fonts -->
 <match target="pattern">
  <test name="family" qual="any">
   <string>NanumGothic</string>
  </test>
  <test name="family" qual="any">
   <string>NanumGothicCoding</string>
  </test>
  <test name="family" qual="any">
   <string>NanumMyeongjo</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
   <string>Droid Sans Fallback</string>
  </edit>
 </match>
 <!-- Aliases -->
 <match target="pattern">
  <test name="family" qual="any">
   <string>KaiTi</string>
  </test>
  <test name="family" qual="any">
   <string>SimKai</string>
  </test>
  <test name="family" qual="any">
   <string>楷体</string>
  </test>
  <test name="family" qual="any">
   <string>楷体_GB2312</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
   <string>AR PL UKai CN</string>
   <string>AR PL ZenKai Uni</string>
  </edit>
 </match>
 <match target="pattern">
  <test name="family" qual="any">
   <string>NSimSun-18030</string>
  </test>
  <test name="family" qual="any">
   <string>NSimSun</string>
  </test>
  <test name="family" qual="any">
   <string>SimSun-18030</string>
  </test>
  <test name="family" qual="any">
   <string>SimSun</string>
  </test>
  <test name="family" qual="any">
   <string>宋体</string>
  </test>
  <test name="family" qual="any">
   <string>新宋体</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
   <string>AR PL UMing CN</string>
   <string>AR PL ShanHeiSun Uni</string>
  </edit>
 </match>
 <match target="pattern">
  <test name="family" qual="any">
   <string>Microsoft YaHei</string>
  </test>
  <test name="family" qual="any">
   <string>STHeiti</string>
  </test>
  <test name="family" qual="any">
   <string>SimHei</string>
  </test>
  <test name="family" qual="any">
   <string>微软雅黑</string>
  </test>
  <test name="family" qual="any">
   <string>黑体</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
   <string>Droid Sans Fallback</string>
   <string>WenQuanYi Micro Hei</string>
   <string>WenQuanYi Zen Hei</string>
  </edit>
 </match>
 <!-- Anti-alias -->
 <match target="font">
  <edit name="embeddedbitmap">
   <bool>false</bool>
  </edit>
 </match>
 <!-- End -->
 <match target="font">
  <edit mode="assign" name="rgba">
   <const>rgb</const>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="hinting">
   <bool>true</bool>
  </edit>
 </match>
 <match target="font">
  <edit mode="assign" name="hintstyle">
   <const>hintfull</const>
  </edit>
 </match>
 <dir>~/.fonts</dir>
 <match target="font">
  <edit mode="assign" name="antialias">
   <bool>true</bool>
  </edit>
 </match>
</fontconfig>

虽然 fontconfig 将配置文件的路径改到了 ~/.config/fontconfig/ 下,不再从 ~/.fonts.conf~/.fonts.conf.d/ 读取配置,但有一些旧的软件仍然会试图从原先的位置读取配置。因此我们需要创建这两个符号链接:

$ ln -s ~/.config/fontconfig/fonts.conf ~/.fonts.conf
$ ln -s ~/.config/fontconfig/conf.d ~/.fonts.conf.d

3 修复 LibreOffice 中文方块问题

如果你在安装系统的时候选择系统默认语言不是中文,安装了 Droid 系列字体的话,系统界面字体又是 Sans-serif 字体族的话,你很有可能遇到打开 LibreOffice 之后看到所有的菜单都是方块的问题。解决这个问题有很多方法,你可以到 /etc/fonts/conf.d/ 下删除 65-droid-sansj-fonts.conf,也可以在那个目录里创建两个符号链接,分别指向 ../conf.avail/69-language-selector-zh-cn.conf../conf.avail/69-language-selector-zh-cn.conf,或者如果不想修改系统配置文件,而想 per-user 修改的话,还可以在自己家目录的 ~/.fonts.conf.d/ 里链接那两个文件。

4 修改桌面环境字体设置

修改完字体配置后,中文的显示效果应该可以上很大一个层次。但是,为了得到更好的效果,我们还需要对具体应用程序里的字体进行更多配置。

4.1 KDE 下的字体配置

滇狐平时只用 KDE 桌面环境,如果你的桌面环境不是 KDE 的话,之后的部分你也许不能直接照着做,请自己摸索,如果有意见或建议想要分享的话,请于滇狐联系。

KDE 下的字体配置很简单,直接到“系统设置”里找到“公共外观和行为”、“应用程序外观”、“字体”,把所有类别的字体都改成“Noto Sans UI”,等宽字用“DejaVu Sans Mono”即可。此外,建议启用“圆整字体边角”,并到“配置”对话框中把次像素渲染打开,微调样式改为“完整”,这样可以在液晶显示器下取得最好的效果。

4.2 GNOME 下的字体配置

滇狐并没有“系统纯洁强迫症”,虽然滇狐不用 GNOME,但 GNOME 下的软件,滇狐还是用的。为了让 GNOME 下的软件在 KDE 下不至于太突兀,我们还是需要对 GNOME 下的字体进行一定的配置。

4.2.1 GNOME 字体

在低版本的 GNOME 下,配置字体可以通过 gnome-appearance-properties 进行,运行该配置工具,将所有字体均设成“DejaVu Sans”,等宽字体设为“DejaVu Sans Mono”即可,很简单。

在最新版本的 GNOME 下,gnome-appearance-properties 配置工具已经被移除了,所有的配置工作只能通过 gnome-control-center 来完成。但悲剧的是,gnome-control-center 只要检测到你在 KDE 底下,就会拒绝提供配置字体的选项,因此修改 GNOME 程序的字体就只能通过 gconf-editor 进行了。gnome-appearance-properties 里字体配置的各个选项对应的位置分别是:

应用程序字体:/desktop/gnome/interface/font_name

文档字体:/desktop/gnome/interface/document_font_name

桌面字体:/apps/nautilus/preferences/desktop_font

窗口标题字体:/apps/metacity/general/titlebar_font

等宽字体:/desktop/gnome/interface/monospace_font_name

键值的格式是“字体名 空格 尺寸”,例如“Noto Sans UI 9”。在 KDE 下工作时,GNOME 的桌面和标题栏都是不可见的,因此只需要改应用程序字体、文档字体和等宽字体三项就足够了。

4.2.2 GTK 系统字体

在 KDE 下,gnome-settings-daemon 无法启动运行为 GTK/GNOME 程序提供字体配置信息,有的程序能够直接读取 gconf 下的字体配置信息,但还有很多程序会改为读取主目录下的配置文件获取字体相关的配置,如果读不到的话,就会变成非常丑陋的默认样式。为了避免出现这样的情况,我们需要在主目录下为这些程序创建配置文件。由于不同版本的程序读取的配置文件名都不太一样,为了让尽可能多的程序都能读到正确的配置,我们就多创建几个配置文件。在主目录下创建这几个文件:

.gtkrc

.gtkrc-1.2-gnome2

.gtkrc-2.0

.gtkrc-2.0-kde

文件的内容如下:

include ".gtkrc-2.0-kde4"

然后创建 .gtkrc-2.0-kde4,内容如下:

gtk-cursor-theme-size=24
gtk-enable-animations=1
# File created by KDE Gtk Config
# Configs for GTK2 programs 


gtk-font-name="Arimo,  10"
gtk-theme-name="Breeze-Dark"
gtk-icon-theme-name="breeze-dark"
gtk-fallback-icon-theme="oxygen"
gtk-cursor-theme-name="breeze_cursors"
gtk-toolbar-style=3
gtk-menu-images=1
gtk-button-images=1
gtk-primary-button-warps-slider=0

注意:开头 include 后面包含的文件和 gtk-theme-name 指定的主题名需要根据你的个人习惯作相应的修改,不要直接照抄我这里的配置。因为首先,我选择的 GTK 主题未必是你喜欢的,其次,我安装的 GTK 主题你未必也安装了,因此务必根据你的个人习惯作相应的修改。

4.3 其它软件

完成以上配置后,整个系统就已经非常适合人类生活了,接下来我们再对部分程序做一些简单的微调。

4.3.1 QTerm

QTerm 有自己的字体配置,并不直接遵循系统字体来,根据自己的喜好配置一下就好。

4.3.2 Wine

Wine 默认的字体设置在中文环境下有很大的问题,很多软件的文字常常变得支离破碎,很多对话框经常出现扭曲变形的现象。针对这个问题,深度配置了一份字体替换列表,可以点击这里下载,然后在命令行运行 regedit Fonts-Replacements.reg 将配置导入注册表,这样 wine 下的软件就能获得相当不错的字体显示效果了。