加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux桌面系统字体配置详解(二)

发布时间:2016-09-07 18:53:49 所属栏目:Linux 来源:站长网
导读:字体配置实战 下面,将以Fedora 20为例,自己动手将它配置为正确的显示效果。目前,在Linux系统上配置字体的工具是Fontconfig。 为什么是Fontconfig 感谢这个时
副标题[/!--empirenews.page--]

字体配置实战

下面,将以Fedora 20为例,自己动手将它配置为正确的显示效果。目前,在Linux系统上配置字体的工具是Fontconfig。

为什么是Fontconfig

感谢这个时代,曾经混乱不堪的字体配置方法终于被Fontconfig一统江湖。在Linux中,字体配置曾经各自为政、混乱不堪,XServer、Xft、GTK、GTK2、QT等等各自采用不同的配置手段,字体引擎也有Type1、FreeType等。目前,可以认为在Linux系统中只需要配置FontConfig即可。

XOrg的官方网站上的文档说明:XOrg中有两种字体系统,一种字体系统是XServer自带的字体系统,另一种就是Xft,而且XOrg官方建议所有的界面库的开发者首选Xft字体系统;对于字体引擎,现在只剩下FreeType了,Type1的功能已经合并到了FreeType中。FreeDesktop.org的官方网站上有Xft、Freetype以及Fontconfig的文档,虽然很简略,但是也提到:Xft1.0及以前的版本,需要通过XftConfig文件来配置字体,从Xft1.1以后,都采用Fontconfig来配置字体;Fontconfig的文档也说它只负责字体的配置,不负责字体的显示。

So,配置Linux中的字体,我们只用理会Fontconfig,还有疑问吗?

学习Fontconfig

学习Fontconfig的最佳方式是阅读man fonts.conf手册页,其次,就是阅读/etc/fonts/conf.d目录下的配置文件,从实例中学习。

Fontconfig的功能就是帮助应用程序选择字体并指导字体的显示效果(只能说指导,因为具体的显示由Xft、Freetype等说了算),用什么策略选择字体及用什么选项显示字体,通过配置文件来指定。Fontconfig对配置文件进行两遍扫描,第一遍对应用程序传递给Fontconfig的字体列表(称为pattern)进行操作,通过添加、删除、替换pattern中的字体名,让应用程序得到相应的字体;第二遍对已经选择的字体进行操作,这时一般不改字体名了,而是对抗锯齿(antialias)、微调(hinting)、自动微调(autohint)、微调级别(hintstyle)以及次像素平滑(rgba)等属性进行控制。

Fontconfig配置文件的语法,这个不用我在这里唠叨,看man fonts.conf手册页即可,一点也不难,它的很多元素,如match、target、test、edit、string、bool、double、const等,本身就是自解释的,看到这个单词就知道它是什么意思。它的原则就是对每一个<match...>...</match>,通过<test...>...</test>来选择要编辑的元素,然后使用<edit...>...</edit>来对该元素进行编辑。

配置Fedora 20

Fontconfig首先读取的配置文件是/etc/fonts/fonts.conf,然后,根据/etc/fonts/fonts.conf里面的<include>...</include>信息来加载其它的配置文件。Fedora 20默认是加载/etc/fonts/conf.d目录下的所有文件。当然,/etc/fonts/conf.d目录下的文件太多了,引入了很多其实没有必要的复杂性。对于我这种追求简洁的人,我直接就把它改了,让/etc/fonts/conf.d下的文件去见鬼,从我自己的主目录的fonts.conf.d目录下加载配置文件吧。如下图,我注释掉了第71行,增加了第72行:

Linux桌面系统字体配置详解(二)

下面正式开始写配置文件。

第一步:将不标准的字体分类命名更改为标准的字体分类命名

英文的字体分类有serif、sans-serif和monospace,中文的分类有“宋体”和“黑体”,但我们不能保证别人在请求字体的时候拼写都是准确的,比如有可能拼写成“sans serif”或“sans”、“mono”等,中文也可能写成繁体“宋體”、“黑體”或者拼音“SongTi”、“HeiTi”等,为了后面配置文件的简洁,这些不标准的分类名要先替换成标准的分类名。

英文的分类名的标准化/etc/fonts/fonts.conf这个主配置文件(就是我上面截图的那个文件)已经做了,其完整代码如下:

  1<?xml version="1.0"?>  2<!DOCTYPE fontconfig SYSTEM "fonts.dtd">  3 <!--  /etc/fonts/fonts.conf file to configure system font access  -->  4<fontconfig>  5  6 <!--  7     DO NOT EDIT THIS FILE.
  8     IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
  9     LOCAL CHANGES BELONG IN 'local.conf'.
 10 11     The intent of this standard configuration file is to be adequate for
 12     most environments.  If you have a reasonably normal environment and
 13     have found problems with this configuration, they are probably
 14     things that others will also want fixed.  Please submit any
 15     problems to the fontconfig bugzilla system located at fontconfig.org
 16 17     Note that the normal 'make install' procedure for fontconfig is to
 18     replace any existing fonts.conf file with the new version.  Place
 19     any local customizations in local.conf which this file references.
 20 21     Keith Packard
 22 --> 23 24 <!--  Font directory list  --> 25 26<dir>/usr/share/fonts</dir> 27<dir>/usr/share/X11/fonts/Type1</dir><dir>/usr/share/X11/fonts/TTF</dir><dir>/usr/local/share/fonts</dir> 28<dir prefix="xdg">fonts</dir> 29 <!--  the following element will be removed in the future  --> 30<dir>~/.fonts</dir> 31 32 <!-- 33   Accept deprecated 'mono' alias, replacing it with 'monospace'
 34 --> 35<match target="pattern"> 36<test qual="any" name="family"> 37<string>mono</string> 38</test> 39<edit name="family" mode="assign" binding="same"> 40<string>monospace</string> 41</edit> 42</match> 43 44 <!-- 45   Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
 46 --> 47<match target="pattern"> 48<test qual="any" name="family"> 49<string>sans serif</string> 50</test> 51<edit name="family" mode="assign" binding="same"> 52<string>sans-serif</string> 53</edit> 54</match> 55 56 <!-- 57   Accept deprecated 'sans' alias, replacing it with 'sans-serif'
 58 --> 59<match target="pattern"> 60<test qual="any" name="family"> 61<string>sans</string> 62</test> 63<edit name="family" mode="assign" binding="same"> 64<string>sans-serif</string> 65</edit> 66</match> 67 68 <!-- 69   Load local system customization file
 70 --> 71 <!--  <include ignore_missing="yes">fonts.conf.d</incllude>  --> 72<include ignore_missing="yes">~/fonts.conf.d</include> 73 74 <!--  Font cache directory list  --> 75 76<cachedir>/var/cache/fontconfig</cachedir> 77<cachedir prefix="xdg">fontconfig</cachedir> 78 <!--  the following element will be removed in the future  --> 79<cachedir>~/.fontconfig</cachedir> 80 81<config> 82 <!-- 83   These are the default Unicode chars that are expected to be blank
 84   in fonts.  All other blank chars are assumed to be broken and
 85   won't appear in the resulting charsets
 86 --> 87<blank> 88<int>0x0020</int> <!--  SPACE  --> 89<int>0x00A0</int> <!--  NO-BREAK SPACE  --> 90<int>0x00AD</int> <!--  SOFT HYPHEN  --> 91<int>0x034F</int> <!--  COMBINING GRAPHEME JOINER  --> 92<int>0x0600</int> <!--  ARABIC NUMBER SIGN  --> 93<int>0x0601</int> <!--  ARABIC SIGN SANAH  --> 94<int>0x0602</int> <!--  ARABIC FOOTNOTE MARKER  --> 95<int>0x0603</int> <!--  ARABIC SIGN SAFHA  --> 96<int>0x06DD</int> <!--  ARABIC END OF AYAH  --> 97<int>0x070F</int> <!--  SYRIAC ABBREVIATION MARK  --> 98<int>0x115F</int> <!--  HANGUL CHOSEONG FILLER  --> 99<int>0x1160</int> <!--  HANGUL JUNGSEONG FILLER  -->100<int>0x1680</int> <!--  OGHAM SPACE MARK  -->101<int>0x17B4</int> <!--  KHMER VOWEL INHERENT AQ  -->102<int>0x17B5</int> <!--  KHMER VOWEL INHERENT AA  -->103<int>0x180E</int> <!--  MONGOLIAN VOWEL SEPARATOR  -->104<int>0x2000</int> <!--  EN QUAD  -->105<int>0x2001</int> <!--  EM QUAD  -->106<int>0x2002</int> <!--  EN SPACE  -->107<int>0x2003</int> <!--  EM SPACE  -->108<int>0x2004</int> <!--  THREE-PER-EM SPACE  -->109<int>0x2005</int> <!--  FOUR-PER-EM SPACE  -->110<int>0x2006</int> <!--  SIX-PER-EM SPACE  -->111<int>0x2007</int> <!--  FIGURE SPACE  -->112<int>0x2008</int> <!--  PUNCTUATION SPACE  -->113<int>0x2009</int> <!--  THIN SPACE  -->114<int>0x200A</int> <!--  HAIR SPACE  -->115<int>0x200B</int> <!--  ZERO WIDTH SPACE  -->116<int>0x200C</int> <!--  ZERO WIDTH NON-JOINER  -->117<int>0x200D</int> <!--  ZERO WIDTH JOINER  -->118<int>0x200E</int> <!--  LEFT-TO-RIGHT MARK  -->119<int>0x200F</int> <!--  RIGHT-TO-LEFT MARK  -->120<int>0x2028</int> <!--  LINE SEPARATOR  -->121<int>0x2029</int> <!--  PARAGRAPH SEPARATOR  -->122<int>0x202A</int> <!--  LEFT-TO-RIGHT EMBEDDING  -->123<int>0x202B</int> <!--  RIGHT-TO-LEFT EMBEDDING  -->124<int>0x202C</int> <!--  POP DIRECTIONAL FORMATTING  -->125<int>0x202D</int> <!--  LEFT-TO-RIGHT OVERRIDE  -->126<int>0x202E</int> <!--  RIGHT-TO-LEFT OVERRIDE  -->127<int>0x202F</int> <!--  NARROW NO-BREAK SPACE  -->128<int>0x205F</int> <!--  MEDIUM MATHEMATICAL SPACE  -->129<int>0x2060</int> <!--  WORD JOINER  -->130<int>0x2061</int> <!--  FUNCTION APPLICATION  -->131<int>0x2062</int> <!--  INVISIBLE TIMES  -->132<int>0x2063</int> <!--  INVISIBLE SEPARATOR  -->133<int>0x206A</int> <!--  INHIBIT SYMMETRIC SWAPPING  -->134<int>0x206B</int> <!--  ACTIVATE SYMMETRIC SWAPPING  -->135<int>0x206C</int> <!--  INHIBIT ARABIC FORM SHAPING  -->136<int>0x206D</int> <!--  ACTIVATE ARABIC FORM SHAPING  -->137<int>0x206E</int> <!--  NATIONAL DIGIT SHAPES  -->138<int>0x206F</int> <!--  NOMINAL DIGIT SHAPES  -->139<int>0x2800</int> <!--  BRAILLE PATTERN BLANK  -->140<int>0x3000</int> <!--  IDEOGRAPHIC SPACE  -->141<int>0x3164</int> <!--  HANGUL FILLER  -->142<int>0xFEFF</int> <!--  ZERO WIDTH NO-BREAK SPACE  -->143<int>0xFFA0</int> <!--  HALFWIDTH HANGUL FILLER  -->144<int>0xFFF9</int> <!--  INTERLINEAR ANNOTATION ANCHOR  -->145<int>0xFFFA</int> <!--  INTERLINEAR ANNOTATION SEPARATOR  -->146<int>0xFFFB</int> <!--  INTERLINEAR ANNOTATION TERMINATOR  -->147</blank>148 <!--149   Rescan configuration every 30 seconds when FcFontSetList is called
150 -->151<rescan>152<int>30</int>153</rescan>154</config>155156</fontconfig>

/etc/fonts/fonts.conf

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读