星期四, 十二月 06, 2007

Gentoo 与 Ubuntu 下的字体调整 (12.06 更新)『转』

字体美化,其实我自己看着这两字我都麻木了,还是这老掉牙的东西,不过现在对 Linux 下字体的调整总算是入门了。

从一开始的工具 链、到后来的内核、X Server 、桌面环境、应用软件基本上搞定后,花了一天时间来仔细研究关于 Linux 下的字体调整,总算是把 Gentoo 下搞得漂漂亮亮的了,现在已经基本上开始取代 Ubuntu 成为主要应用的操作系统了。不过 Ubuntu 也坐了一把顺风车,嘿嘿。

一直以来,所做的几次美化,都没有关注 dpi (Dot Per Inch) 这个设置,通常把它设置为 96dpi ( Windows 上的默认设置 ),以前也知道这个设置对于字体的调整有很大关系,但是都没有深入,这次恶补了几下。

现在写日志越来越懒了,还是照旧吧,写重点,要了解具体的选项及作用,看文章结尾的相关链接吧。

1. 设置正确的 DPI (Dot Per Inch)
在 Linux 里,有很多地方都可以设置 DPI ,而且不同地方设置的 DPI 分别管理不同的地方(开始晕了)。不过,我可不管它哪里是管哪的,我只知道,我需要全部都使用正确的 DPI 不就行了,所以一个个的查看一下,再一个一个的改吧。

比较完整的各种显示器的 DPI 设置可以查看这里:
Notebook LCD Display Comparison
Desktop LCD Display Comparison

以我的为例讲解,14.1“ 的显示器,分辨率为 1280 x 800 ,可以查出正确的 DPI 应该是107.1

引用
Size Resolution Density Pixel Size Ratio Pixels Gain
14.1" 1280 x 800 107.1 ppi 0.2373 mm 16:10 0.98 MP 130%

A. 首先来查看一下 X Server 使用的 DPI ,一看,完全正确, Ubuntu 拷贝过来的 Xorg.conf 设置得还是八错的。
引用
# xdpyinfo | grep resolution
resolution: 107x107 dots per inch

假如这个地方不正确,可以通过修改 Xorg.conf 来解决,方法如下:
* 非常老实的拿一块尺子,把你的显示器长宽量下来,单位为毫米,例如我的 303×190,把它加到 /etc/X11/xorg.conf
引用
# vim /etc/X11/xorg.conf 加入
Section "Monitor"
......
DisplaySize 303 190 # 1280x800 107dpi
......
EndSection

* 什么,你真的拿尺子去了? 我败给你了,如果仔细的话,在上面 Notebook LCD Display Comparison 里是可以查到的。
引用
Size Diagonal Width Height Ratio Area Gain
14.1" 35.81 cm 30.37 cm 18.98 cm 16:10 576 cm2 127%

* 记得修改好了重启一下 X ,然后执行下面的命令,看看是否生效
引用
# xdpyinfo | grep dimensions
dimensions: 1280x800 pixels (303x190 millimeters)
# xdpyinfo | grep resolution
resolution: 107x107 dots per inch


B. fontconfig/xft 也有一个 DPI 的设置,如果大家都做过美化的话,对 language-selector.conf / local.conf 等配置文件,再熟悉不过了,嗯,这个 DPI 就在这里设置。不过别问我这个设置对哪些地方有效,因为我…………也不清楚。
这个的设置非常简单,在配置文件里面加上下面这么一段,就可以了。
引用
# vim /etc/fonts/local.conf 或 vim ~/.fonts.conf 加入
<!--
dots per inch
-->
<match target="pattern">
<edit name="dpi" mode="assign" >
<double>107</double>
</edit>
</match>

什么,你已经加入了? 其实,这个设置没多大用的,为什么?请看C

C. dpi in gnome/xfce
为什么说上面 B 所说的没多大用,是因为,现在的桌面环境都比较 BT 了,都提供接口来对 fontconfig/xft 程序设置 dpi ,就算你配置文件写好了,这里一改,配置文件还是瞎搞,所以还是图形化修改吧。
gnome 的设置在 Settings - Fonts 里
xfce 的设置在 Settings - User Interface Settings 里,自己填吧。
在 gnome 下,立即就可以看到效果,在 xfce 里,需要重启一下 X 。
查看 Xft.dpi 值的方法:
引用
# xrdb -query | grep Xft
......
Xft.antialias: 1
Xft.dpi: 107.00000
Xft.hinting: 1
Xft.hintstyle: hintfull
Xft.rgba: rgb

顺便对对用 KDE 的兄弟说声抱歉了,没环境。

2. 配置文件
偷懒开始了,粘贴了事。
配置文件写得非常简单,去掉了一切可以去掉的东西,反正我的环境特简单,中文用 Microsoft YaHei (咳咳,什么什么?),英文用 Redhat 提供的开源字体 Liberation 。
在 Ubuntu 里,把这个保存到 /usr/share/language-selector/fontconfig/zh_CN
在 Gentoo 里,可以保存到 /etc/font/local.conf
当然你也可以保存到 ~/.font.conf ,不过这样就只对本用户有效而已。
---------------------- local.conf 12.06 更新 -----------------------------
引用
<fontconfig>
<!--
# 设置 serif 衬线字体的读取顺序
-->
<alias>
<family>serif</family>
<prefer>
<family>Liberation Serif</family>
<family>Microsoft YaHei</family>
<family>SimSun</family>
</prefer>
</alias>
<!--
# 设置 sans-serif 无衬线字体的读取顺序
-->
<alias>
<family>sans-serif</family>
<prefer>
<family>Liberation Sans</family>
<family>Microsoft YaHei</family>
<family>Simsun</family>
</prefer>
</alias>
<!--
# 设置 monospace 等宽字体的读取顺序
-->
<alias>
<family>monospace</family>
<prefer>
<family>Liberation Mono</family>
<family>Microsoft YaHei</family>
<family>Simsun</family>
</prefer>
</alias>
<!--
# 全局字体的设置
-->
<match target="font">
<test name="family" compare="contains">
<string>Tahoma</string>
<string>verdana</string>
<string>Arial</string>
<string>Times New Roman</string>
</test>
<edit name="globaladvance">
<bool>false</bool>
</edit>
<edit name="spacing">
<int>0</int>
</edit>
<edit name="hinting" mode="assign">
<bool>true</bool>
</edit>
<edit name="autohint" mode="assign">
<bool>false</bool>
</edit>
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
<edit name="hintstyle" mode="assign" >
<const>hintfull</const>
</edit>
</match>

<!--
# 单独设置微软雅黑字体的显示
-->
<match target="font">
<test name="family" compare="contains">
<string>Microsoft YaHei</string>
<string>微软雅黑</string>
</test>
<edit name="hinting" mode="assign">
<bool>true</bool>
</edit>
<edit name="autohint" mode="assign">
<bool>false</bool>
</edit>
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
<edit name="hintstyle" mode="assign" >
<const>hintfull</const>
</edit>
<edit name="rgba" mode="assign">
<const>gba</const>
</edit>
</match>

<!--
# 单独设置 Liberation Sans 字体的显示
-->
<match target="font">
<test name="family" compare="contains">
<string>Liberation Sans</string>
</test>
<edit name="hinting" mode="assign">
<bool>false</bool>
</edit>
<edit name="autohint" mode="assign">
<bool>false</bool>
</edit>
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
<edit name="hintstyle" mode="assign" >
<const>hintfull</const>
</edit>
<edit name="rgba" mode="assign">
<const>none</const>
</edit>
</match>

<!--
# 单独设置 Liberation Mono 字体的显示
-->
<match target="font">
<test name="family" compare="contains">
<string>Liberation Mono</string>
</test>
<edit name="hinting" mode="assign">
<bool>false</bool>
</edit>
<edit name="autohint" mode="assign">
<bool>false</bool>
</edit>
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
<edit name="hintstyle" mode="assign" >
<const>hintfull</const>
</edit>
<edit name="rgba" mode="assign">
<const>none</const>
</edit>
</match>
</fontconfig>

---------------------- local.conf 12.06 更新 -----------------------------
3. 系统设置。
gnome : Fonts 里,把 AA、 hinting (Full) 、 Sub-pixel hinting (RGB) 选上
xfce: User Interface Settings 里面把 AA、 hinting (Full) 、 Sub-pixel hinting (RGB) 全部选上

4. 后续
现在你会发现系统基本上已经显示得很完美了,除了 firefox ,firefox 有自己的一套管理方式,会跟你作对的。
For Ubuntu:
用 Ubuntu 可以用下面的方法关闭 firefox 默认使用的 Pango ,从而使用系统里的 fontconfig/xft 来控制
引用
# vi /etc/firefox/firefoxrc
MOZ_DISABLE_PANGO=1

---------------------- gentoo 下 firefox 安装 12.06 更新 -----------------------------
For Gentoo:
在 Gentoo 的 mozilla-firefox 包里,有一个 moznopango 的 USE ,加上这个 USE ,可以关闭 pango 的使用。
# echo " www-client/mozilla-firefox moznopango" >> /etc/portage/package.use
# emerge -av mozilla-firefox
---------------------- gentoo 下 firefox 安装12.06 更新 -----------------------------

如果你在 Gentoo 里,你会发现明显还是不如在 Ubuntu 下漂亮,为什么呢?
那是因为 Gentoo 官方源里的 Cairo 、libXft 两个基础库都不带次像素渲染,这个对字体的显示有着重要影响,所以我们必须将 Cairo 、libXft 两个基础库利用 overlay 进行升级。
# emerge -av layman
# layman -L
# layman -f -a xeffects # 需要 svn 支持
# echo 'source /usr/portage/local/layman/make.conf' >> /etc/make.conf
# env-update && source /etc/profile
# euse -E newspr # 关键就在 newspr 这个 flag,官方源里的 Cairo 、 libXft 是没有这个可选的 Flag , 所以需要 overlay 里的来进行升级
# emerge -av1 cairo libXft

重启 X 后,再看看,雅黑字体不模糊过头了吧,清晰了吧,不会出现彩色光蕴的问题了吧。

OK,顺便上个图看看吧,Gentoo Xfce4 下。
点击在新窗口中浏览此图片


相关链接:
Linux 字体微调 - windows 效果版
字体设置 (Arch Wiki)
http://www.linuxsir.org/bbs/showthread.php?t=317779
SubpixelHinting
这个地方可以测试一下微软的字体
http://www.microsoft.com/typography/web/fonts/default.htm

----------------------12.06 更新 -----------------------------
这次的更新,使英文字体显示更为完美,中文的雅黑无变动。
----------------------12.06 更新 -----------------------------

0 意見: