Ubuntu下調整DPI達到字體美化


字體美化,其實我自己看着這兩字我都麻木了,還是這老掉牙的東西,不過現在對 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 里,你會發現明顯還是不如在 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM