字體美化,其實我自己看着這兩字我都麻木了,還是這老掉牙的東西,不過現在對 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
A. 首先來查看一下 X Server 使用的 DPI ,一看,完全正確, Ubuntu 拷貝過來的 Xorg.conf 設置得還是八錯的。
從一開始的工具鏈、 到后來的內核、X Server 、桌面環境、應用軟件基本上搞定后,花了一天時間來仔細研究關於 Linux 下的字體調整,總算是把 Gentoo 下搞得漂漂亮亮的了,現在已經基本上開始取代 Ubuntu 成為主要應用的操作系統了。不過 Ubuntu 也坐了一把順風車,嘿嘿。
一直以來,所做的幾次美化,都沒有關注 dpi (Dot Per Inch) 這個設置,通常把它設置為 96dpi ( Windows 上的默認設置 ),以前也知道這個設置對於字體的調整有很大關系,但是都沒有深入,這次惡補了幾下。
現在寫日志越來越懶了,還是照舊吧,寫重點,要了解具體的選項及作用,看文章結尾的相關鏈接吧。
在 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%
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
resolution: 107x107 dots per inch
假如這個地方不正確,可以通過修改 Xorg.conf 來解決,方法如下:
* 非常老實的拿一塊尺子,把你的顯示器長寬量下來,單位為毫米,例如我的 303×190,把它加到 /etc/X11/xorg.conf
* 什么,你真的拿尺子去了? 我敗給你了,如果仔細的話,在上面 Notebook LCD Display Comparison 里是可以查到的。
* 記得修改好了重啟一下 X ,然后執行下面的命令,看看是否生效
B.fontconfig/xft 也有一個 DPI 的設置,如果大家都做過美化的話,對 language-selector.conf /local.conf 等配置文件,再熟悉不過了,嗯,這個 DPI 就在這里設置。不過別問我這個設置對哪些地方有效,因為我…………也不清楚。
這個的設置非常簡單,在配置文件里面加上下面這么一段,就可以了。
* 非常老實的拿一塊尺子,把你的顯示器長寬量下來,單位為毫米,例如我的 303×190,把它加到 /etc/X11/xorg.conf
引用
# vim /etc/X11/xorg.conf 加入
Section "Monitor"
......
DisplaySize 303 190 # 1280x800 107dpi
......
EndSection
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%
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
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>
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
......
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 更新 -----------------------------
偷懶開始了,粘貼了事。
配置文件寫得非常簡單,去掉了一切可以去掉的東西,反正我的環境特簡單,中文用 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 等寬字體的讀取順序
-->
<!--
# 設置 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" >
<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>
</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="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. 系統設置。
<const>hintfull</const>
</edit>
<edit name="rgba" mode="assign">
<const>none</const>
</edit>
</match>
< /fontconfig>
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 里,你會發現明顯還是不如在 Ubuntu 下漂亮,為什么呢?
MOZ_DISABLE_PANGO=1
那是因為 Gentoo 官方源里的 Cairo 、libXft 兩個基礎庫都不帶次像素渲染,這個對字體的顯示有着重要影響,所以我們必須將 Cairo 、libXft 兩個基礎庫利用 overlay 進行升級。
# emerge -av layman
# layman -L
# layman -f -a xeffects # 需要 svn 支持
# 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 后,再看看,雅黑字體不模糊過頭了吧,清晰了吧,不會出現彩色光蘊的問題了吧。
# env-update && source /etc/profile
# euse -E newspr # 關鍵就在 newspr 這個 flag,官方源里的 Cairo 、 libXft 是沒有這個可選的 Flag , 所以需要 overlay 里的來進行升級
# emerge -av1 cairo libXft
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
Linux 字體微調 - windows 效果版
字體設置 (Arch Wiki)
http://www.linuxsir.org/bbs/showthread.php?t=317779
SubpixelHinting
這個地方可以測試一下微軟的字體
http://www.microsoft.com/typography/web/fonts/default.htm