ArchLinux TTY 中文字体渲染
ArchLinux 的 User Centrality 原则中提出, 该发行版意图满足贡献者的需求,而不是吸引尽量多的用户。 正是这一原则使得 ArchLinux 吸引了大量的开发者, 其 AUR 也成为了更新最为迅速的 Linux 软件包仓库,几乎可以满足开发者的任何需求。
这一原则也会造成一些准入门槛, 因为在 ArchLinux 中几乎所有软件都需要用户安装和配置。 对于新手而言,字体渲染就成了一个重要的问题。在此分享一种简单的配置方式,让 ArchLinux 下中英文字体都能比较漂亮地显示。 因为我的 ArchLinux 没有安装桌面系统,就只给出终端(TTY)字体的配置。
The Arch Way
在诸多 Linux 发行版中,系统提供了很漂亮的默认字体渲染效果(比如 Ubuntu 的文泉驿正黑)。 与此同时,要在这些发行版中自定义字体则会需要大量的配置更改。 因为不同字体的最佳渲染方式是不一样的。这也是为什么微软雅黑只在 Windows 上非常漂亮:)
因此 ArchLinux 不提供系统默认字体及其渲染效果, 把选择字体的权利和责任都交给用户。 要做到漂亮的字体渲染需要学习大量的知识,尤其是国人还要求有漂亮的中文字体, 这一配置过程可能非常耗时。
下文中给出一种在终端(TTY)显示中英文的方式,以及相应的字体渲染配置。
TTY 显示中文字体
Shell 配置文件:.profile, .bashrc, .login 一文详细介绍了终端、终端模拟器、Shell 等概念的区别。
TTY 是字符终端只接受键盘的字符输入并显示字符输出,
并未提供 Unicode 字符的渲染和显示。这时我们需要一个终端模拟器。
恰恰有一个可以在很好地显示中文的终端模拟器:fbterm
,
以及中文输入法软件 fcitx
的 fbterm
插件叫做:fcitx-fbterm
。
安装相关软件:
yaourt -S fbterm fcitx fcitx-fbterm
# To run fbterm as a non-root user, do:
sudo gpasswd -a YOUR_USERNAME video
# To enable keyboard shortcuts for non-root users, do:
sudo chmod u+s /usr/bin/fbterm
设置 X11 的默认输入法,配置文件为 .xprofile
(KDM, GDM, LightDM 或 SDDM)或
.xinitrc
(startx 或 Slim)。
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
配置 FBTerm
fbterm
的配置文件在 ~/.fbtermrc
,在里面配置一下该终端(Terminal)的输入法,
以及字体大小和光标形状:
# 输入法
input-method=fcitx-fbterm
# 字体大小
font-size=20
# 光标形状: 0 = 下划线, 1 = 块
cursor-shape=1
# 光标闪动时间: 毫秒计,0 = 不闪动
cursor-interval=500
20 号字非常适合老年人观看屏幕,你可以适当调小一点。
登录 Shell 启动 FBTerm
在登录 Shell 时,自动运行 FBTerm 这个终端模拟器,同时启动 fcitx
中文输入法:
file: ~/.bash_login
if [[ $(tty) = /dev/tty1 ]] ; then
fcitx > /dev/null 2>&1 &
exec fbterm
fi
~/.bash_login
是用户登录时会执行的 Bash 配置文件,参见 Shell 配置文件:.profile, .bashrc, .login 一文。
字体渲染相关概念
反锯齿(Anti-aliasing)
显示矢量字体时,需要把它变成格点才能输出到显示器上。 这一过程叫做 光栅化,在光栅化过程中,字体可能会出现锯齿。 为了提高显示效果,往往需要开启字体渲染的反锯齿功能。
因为不是所有字体都需要进行反锯齿,ArchLinux 中反锯齿是默认禁止的。
字体微调(Hinting)
Hinting 是通过数学指令去调整字体显示的外形, 使得字体更加鲜明和易读。同样地,并不是所有字体都需要 Hinting。
Autohinter
Autohinter 是指自动进行字体微调,而无视既有的字体微调规则。 同样地,Autohinter 并不是总是产生好的效果。 ArchLinux 也默认禁止了 Autohinter。
Subpixel Renderering(亚像素渲染)
亚像素渲染使得字体更加圆滑,但 ArchLinux 需要知道显示器的类型才能正确地进行亚像素渲染。 在字体渲染配置中,需要给出的是显示屏的类型。 多数显示器都采用 RGB 标准,但也存在 BGR、V-RGB、V-BGR 等其他标准。 同样,亚像素渲染也是默认禁用的。
LCD Filter
使用亚像素渲染时需要启用 LCD Filter 来消除色差,ArchLinux 提供了多种过滤器:lcddefault
,lcdlight
,lcdlegacy
等。
安装和配置字体
安装字体文件
字体文件是一种包含了某种字体的符号、形状、字母等信息的电子文件。 ArchLinux 中每一种字体都需要单独安装, 但 AUR 中有成千上万的字体供你选择。 比如可以使用 Adobe 字体来显示中文,dejavu 来显示英文:
yaourt -S adobe-source-han-sans-cn-fonts ttf-dejavu
注意:安装何种字体与下面的渲染配置是对应的。
配置文件路径
字体渲染的配置文件为 /etc/fonts.conf
(系统级别),
在 /etc/fonts/conf.d
中包含了更多的按优先级载入的字体配置文件。
用户级别的配置文件为 ~/.fonts.conf
。
ArchLinux 虽然不提供默认字体,但给出了很多预设配置文件来支持不同的需求。
这些文件在 /etc/fonts/conf.aval/
下。如果要使用这些预设,可以直接创建软链接,比如:
cd /etc/fonts/conf.d
ln -s ../conf.avail/10-sub-pixel-rgb.conf .
下文中我们只对当前用户做配置,配置的文件是 ~/.fonts.conf
。
字体渲染配置
经过无数次的尝试,我发现 Adobe 和 Dejavu 这两种字体只需要进行反锯齿和 LCD Filter 配置即可很好地显示。这是我的 ~/.fonts.conf
:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
<edit name="lcdfilter" mode="assign">
<const>lcddefault</const>
</edit>
</match>
</fontconfig>
扩展阅读
- Fontconfig:https://wiki.archlinux.org/index.php/Font_configuration#Presets
- The Arch Way: https://wiki.archlinux.org/index.php/Arch_terminology#The_Arch_Way
本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2016/06/13/archlinux-tty-font.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。