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

字体配置实战

下面,将以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行:

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

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

英文的字体分类有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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字体
, 文件
, conf
, 系统
, 配置
, gtk liststore font
, linux 字体
, fonts
xserver
linux文件系统详解、linux系统分区详解、linux系统vi命令详解、linux系统结构详解、linux系统详解,以便于您获取更多的相关知识。

时间: 2024-11-03 21:50:07

Linux桌面系统字体配置详解(二)的相关文章

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

字体显示效果测试 这一段是为了测试宋体字的显示效果,包括宋体里面自带的英文字体,"This is english,how does it look like?".这一行是小字.后面几个字是加粗的宋体.标点符号",.::!" 这一段是为了测试黑体字的显示效果,包括黑体里面自带的英文字体,"This is english,how does it look like?".这一行是小字.标点符号",.::!".微软雅黑是什么样子的呢&

Linux下LVM的配置详解

LVM是Logical Volume Manager(逻辑卷管理器)的简写,它为主机提供了更高层次的磁盘存储管理能力.LVM可以帮助系统管理员为应用与用户方便地分配存储空间.在LVM管理下的逻辑卷可以按需改变大小或添加移除.另外,LVM可以为所管理的逻辑卷提供定制的命名标识.因此,使用LVM主要是方便了对存储系统的管理,增加了系统的扩展性. 一.准备lvm环境 1.硬盘的准备 添加了一块硬盘/dev/hdb. 准备了三个分区,方案如下:容量为100M,仅为了实验准备. /dev/hdb1 /de

linux获取系统启动时间示例详解_linux shell

1.前言 时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同.linux内核里面用一个名为jiffes的常量来计算时间戳.应用层有time.getdaytime等函数.今天需要在应用程序获取系统的启动时间,百度了一下,通过sysinfo中的uptime可以计算出系统的启动时间. 2.sysinfo结构 sysinfo结构保持了系统启动后的信息,主要包括启动到现在的时间,可用内存空间.共享内存空间.进程的数目等.man sysinfo得到结果如下所示: 复制代码 代码如下:

基于Linux的Gentoo系统安装配置详解

本文是本人整理的Gentoo系统安装配置,感兴趣的朋友可以看一下. thinkpad中键 平时习惯了使用小红点和中键模拟滚轮的效果,但是现在安装了gentoo的xorg之后,那个中键只能作为粘贴用了,不能再和小红点配合进行滚动. 使用opensuse时是没有这个问题的,所以应该还是xorg的配置问题.挂载了opensuse的root分区,发现opensuse中已经没有xorg.conf文件了(应该是跨版本升级到opensuse11.3的时候被我删除了,当时不删除这个文件,导致xorg-serve

Linux系统Memcache安装配置详解

安装Memcached服务端 memcached依赖于libevent,需要先安装libevent. 安装 libevent # tar zxvf libevent-2.0.21-stable.tar.gz # cd libevent-2.0.21-stable # ./configure --prefix=/usr/local/libevent # make && make install 安装memcached服务端 # wget http://www.memcached.org/fi

Linux下Tomcat catalina.out自动归档,以及logrotate 配置详解

Linux下Tomcat catalina.out自动归档 如果 catalina.out 日志达到 2GB 大小的时候,Tomcat 因为缓存问题,便没有办法继续输出日志了.  为了避免这种情况,你需要及时对 catalina.out  进行归档.  实际上 Tomcat 自身也会对日志内容进行归档,但是归档后,Tomcat 不会清理 catalina.out 的内容,这将会导致 catalina.out 越来越大.  下面的方法能够使用在 linux/unix 的机器上.  如果我们期望每天

Linux服务器下nginx的安全配置详解_nginx

Nginx是一个轻量级,高性能的Web服务器/反向代理和电子邮件 代理(IMAP/POP3),它可以运行在UNIX,GNU/Linux,BSD变种,MAC OS X,Solaris和Microsoft Windows上.根据Netcraft的调查数据显示,互联网上6%的域名都使用了Nginx Web服务器.Nginx是解决C10K问题的服务器之一,与传统服务器不一样,Nginx不依赖于线程处理请求,相反,它使用了一个更具扩展性的事件驱 动(异步)架构.Nginx在很多高流量网站上得到了应用,如W

Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)【转】

转自:http://blog.csdn.net/gatieme/article/details/51872659 版权声明:本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme   目录(?)[-] 前景回顾 1 Linux的调度器组成 2 调度工作 进程上下文 1 进程上下文的概念 2 上下文切换 context_switch进程上下文切换 1 context_switch完全注释 2 prepare_arch_switch切换前的准备工

RSync实现文件同步备份配置详解_服务器其它

一.什么是rsync rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 "rsync 算法"提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件. rsync 包括如下的一些特性: 能更新整个目录和树和文件系统: 有选择性的保持符号链链.硬链接.文件属于.权限.设备以及时间等: