下载
第29章 定制X Window系统
29.1 使用X的字体和颜色
X支持多种的字体以及几乎无限多种变化的颜色。大多数的应用程序允许你指定应用窗口
中各个不同部分的颜色,而几乎所有的X程序均允许你指定你想要使用的字体。
X中的字体:
• 有固定的宽度(像哑终端机的字符)或成比例的间隙。
• 由文本字符或符号组成,或以上两者均有。
• 具有多种的磅尺寸。
• 可以修改以适应特定的屏幕分辨率(例如对于同一点尺寸的某一种字体,你可能对 75 dpi
的屏幕有一种版本,对100 dpi 的屏幕有另一种版本)。
• 有一种标准命名的传统。
• 可以以全名存取,也可以用通配符。
• 保存在特定配置的目录树中,只要服务器在执行,字体便可以加入或移出。
在系统间进行字体的交换有一套标准的格式,并且有工具程序可以将这个格式转换成你的
服务器能了解的格式,工具程序也包含了列出可用字体的目录、观察某一特定字体内容等功
能。
29.1.1 字体初步
本节的目的是让你尽快地能使用字体,我们将告诉你如何找出有哪些字体可用、指定你欲
使用的字体名、看字体的外观、如何在X应用程序中使用字体。
1. 字体命名
有些字体名太长以致使用不便,但很幸运,它们也不常使用,并且, X支持字体名可使用
通配符:
• ? 对应任何一个字符。
• * 对应从(字符)长度为零至长度若干的字符串。
这和UN I X 外壳传统的通配符文件名相同,使用通配符可使你更容易指定字体名。
注意 如果你在外壳程序的命令行指定一个通配符的字体名,需要把名称加上双引号 。
2. 观察特定的字体
xfd (X font displayer 的缩写) 程序由参数得到字体的名称之后,建立一个窗口并且在窗口
中显示此名称的字符字体,例如:
xfd -fn "*symbol*-180-*"
3. 以X程序使用字体
大多数的X程序使用文字,并且允许你指定使用的字体。如何使用的详细细节可能因不同
的程序而异,如果有问题的话可以看联机帮助。但是几乎都是以命令行中选项 -fn fontname 或
-font fontname 来指定字体名,b i t m a p、x c l o c k、x t e r m 、x l o a d 、xmb 和 x e d i t都是这样操作的。
例如假设你是为了展示的缘故,以很大的字体执行 xterm ,你可以用下列命令行:
xterm -fn "*courier-bold-r-*-240-*"
注意 如果你给程序的指定对应到一种以上的字体,则服务程序会随便在其中选取一个,
例如:如果你省略了上例中的 -r 的指定,则你会使用到斜体字体或反斜体字体,和原
来所指定的罗马字体的机会是一样的。
29.1.2 字体命名
在X中,字体可以取成任何名称,但几乎所有的字体均依照它们的本质来命名,这样的命
名方式,名字是由几个不相关的部分组合而成,而我们在使用应用程序时,光凭着字体名便可
以大略了解字体的内涵。
我们以一个字体名为例,逐一解释它的组件,组件之间是用短横线 ( - )分开的,而且可以包
含空白,字体名对字符大小写并不会区别,样例如下:
- a d o b e - t i m e s - b o l d - n o r m a l - - 1 2 - 1 2 0 - 7 5 - 7 5 - p - 6 7 - i s o 8 8 5 9 - 1
• adobe :字体的制造厂商。
• times :字型家族,其他尚包含c o u r i e r 、helvetica 和new century schoolbook。
• bold :粗体字,其他包含light (细)和m e d i u m (中等)。
• normal.字体。例如,r 是r o m a n(罗马体),i是i t a l i c ( 意大利体),o是o b l i q u e (倾斜体)。
• 12:字符的高度,单位为像素。
• 120 :字体的磅尺寸,为磅的1 0倍(120 意为1 2 磅)。
• 75-75 :字体被设计在显示设备上的水平和垂直的分辨率。
• p :字和字之间的间隙,p 是p r o p o r t i o n a l (成比例的),相对的是m (m o n o s p a c e d,固定
宽度)。
常用的项目为字型、字体粗细、何种斜体字以及字体大小,除了指定这几项的值外,其他
的项目不妨借助于通配符的方式去指定。
1. 通配符和字体名
我们曾经解释过通配符的规则:星号( *)表示对应零或多个字符,问号( ?)对应任意的
单一字符。
你可以随意地使用通配符。当你的设定对应一种以上的可用字体时,服务程序会随便挑一
种字体来用,如果你没有设定字体,通常会获得一行信息,而服务程序将会使用缺省字体。
你可以对字体的点尺寸使用通配符,而不是像素尺寸,因为在显示器上一个给定点尺寸的
字体对不同的分辨率有不同的像素尺寸,所以用通配符指定点尺寸可以造成与装备无关的效果,
上述的样例你可以这样设定:
* - t i m e s - b o l d - r - * - 1 2 0 - *
也就是说以- 1 2 0 -替换- 1 2 -
2. 列出可用的字体
—
x l s f o n t s
x l s f o n t s可列出在服务程序中可用的字体(如果你使用命令行中 - d i s p l a y选项,便可列出其
他服务程序中可用的字体)。缺省值是列出所有的字体,但是就如同 U N I X的l s命令一样,如果
你加上限制,便只会列出合乎限制的项目,例如:
xlsfonts "*-times-*-180-*"
列出所有1 8点Ti m e s的字体。
原则上,x l s f o n t s 试图在每行打出尽量多的字体名称,但实际上,大部分的字体名称都很
342计计第六篇 X Window 系统的内部结构和使用
下载
长,以致一次只能印一个名称,但是要小心,当字体名含有空格时,一行有数个字体名,常常
容易混淆。
注意 许多的字体名开头为一短横线(-) ,所以x l s f o n t s会误把此种状况当成命令行的选
项来解释以致发生错误,例如:
xlsfonts "-adobe-*"
会失败,你可以用选项-fn 加以区分,或者只要在设定之前加一个星号( *)即可:
xlsfonts "*-adobe-*"
xlsfonts -fn "-adobe-*"
29.1.3 观察特定字体的内容
—
xfd
xfd 是一个字体显示的程序,它建立一个窗口,而后在窗口中将字体的元素显示在长方格
中。窗口可能没有大到一次将字体中所有的字符显示出来(尤其是你可能对它重定过大小),
但你仍然可以存取它们:
• 向前移动:在xfd 窗口中按鼠标右按钮,窗口的下一页将会出现。
• 向后移动:按鼠标左按钮。
• 获取字符的信息:在字符上按鼠标中按钮, xfd 会给你字符号码,如果你在程序一开始
设定命令行选项 - v e r b o s e ,你将获得一些更多的信息,例如字符的大小以及它在字符
“c e l l”中的位置。
29.1.4 保存字体和位置
本节描述字体不同的格式,以及转换两种不同格式的工具,然后讨论服务程序是如何存取
字体和你如何更改对字体的选择。最后,我们会给一个完整的样例来说明如何为系统加入一种
新的字体。
1. 字体的格式
—
S N F (Server Natural Format)
字体在服务程序上是以SNF 方式保存,这种格式并不是一种标准,而且为服务程序所专用,
所以你不能将字体移到不同类型的服务程序中。
showsnf 程序输出保存在SNF 文件中字体的信息,对字体本身执行 xprop 可获得更多类似
的信息( s h o w s n f 的参数为文件名,xprop 则为字体名,字体名和文件名并不相关)。
(1) Bitmap Distribution Format(位图分布格式)
—
B D F
为了克服字体流传的问题,X协会对字体交换指定了一种格式,就是BDF ,BDF 以A S C I I
的方式表示字符的图形,并且只包含可输出的字符,所以它具有完整的可移植性。
在“Bitmap Distribution Format”文件中包含了对BDF 完整的描述。
(2) 从BDF 转换成S N F
—
b d f t o s n f
为了让BDF 能够有用,你必须能将BDF 字体文件转换成SNF 文件,目前X协会放弃让这
个需求成为X的产品。
在MIT 版中,你可以用b d f t o s n f 来完成转换。
(3) 由其他的格式转换
许多绘图机器拥有它们制造商自己开发的字体,通常特别适合它们的显示器。如果这些字
体能在X中使用,那是再好也不过了,但是因为格式的问题,你不能使用它们。
MIT core版并不管这个问题,但是 c o r e 版有许多工具程序可将制造商特制的字体转换成
BDF 格式,从BDF 你又可以用b d f t o s n f转换成你自己的S N F 。
第29章计定制X Window系统计计343
下载
2. 字体保存在何处
—
字体目录
字体保存在服务程序上某一个或多个字体目录中,字体目录由三个部分组成:
1) 一个普通的目录,为包含着字体的SNF 文件之所在。
2) 一个被X使用,将SNF 文件名对应到字体名称的数据库。
3) 一个可选择性的别名文件,可以让你用一个以上的名称参考到同一字体(不论你使用了
多少个目录,你只需要一个别名文件)。
3. 维护字体目录
—
m k f o n t d i r
mkfontdir 设定新的字体目录并且可以修改它:
1) 在文件目录中搜集了所有你要使用字体的文件,文件可以是 BDF 文件(通常文件名结
尾为 . b d f )、SNF 文件( . s n f )或被压缩的SNF 文件( . s n f . Z ),m k f o n t d i r会自动将非SNF 文件转换为
SNF 文件(被压缩的文件是被BSD 压缩程序执行过用以节省文件空间)。
2) 如果你要使用别名,需要在字体目录中建立(或编辑)一个名为 f o n t s . a l i a s e 的文件。有
关此文件格式的细节部分在联机帮助中有说明。简单地说,它的格式为每行以空白间隔出两个
栏位,第一栏是别名的名称,第二栏则是字体的名称(可包含通配符),例如:
tbi12 *-times-bold-i*-120*
注意 你对字体定义的第一个别名将造成该字体真正的名称无法使用,以上例而言,你
只能以tbi12 来存取字体,这种情形也许下一版会改进,但目前你可以在第二行将第一
行反过来即可(但不可使用通配符)。
tbi12 *-times-bold-i*-120*
-adobe-times-bold-i-normal--12-120-75-755-p-68-iso8859-1 tbi12
3) 执行mkfontdir ,需把文件名当成参数输入,以你使用缺省的 X配置为例 :
mkfontdir /usr/lib/x11 / f o n t s / m i s c \
/ u s r / l i b / x 11 / f o n t s / 7 5 d p i \
/ u s r / l i b / x 11 / f o n t s / 1 0 0 d p i
(如果文件目录中没有包含字体数据库,mkfontdir 会忽略它。)
注意 建立字体目录并不会导致服务程序注意它,你必需重新启动服务程序或重设字体
搜索路径。
4. 字体搜索路径
—
x s e t
你可以使用任何数目的字体目录,但如果它们有任何和缺省配置不同的地方,你需明确地
告诉服务程序,这些字体目录的列表称之为字体搜索路径或字体路径,你可以设定这个一连串
以逗点分隔的文件目录。
• 查看目前的字体路径:使用命令xset q,这样会输出一大堆信息,其中有一行包含着你的
字体路径如下:
Font Path : /usr/lib/x11 / f o n t s / m i s c / , ( c o n d . )
/ u s r / l i b / x 11 / f o n t s / 7 5 d p i / , / u s r / l i b / x 11 / f o n t s / 1 0 0 d p i /
• 设定不同的字体路径:使用命令 xset fp new-path,例如,如果你有大量的本地字体且不
想使用多数的标准字体:
xset fp /usr/local/xfonts, /usr/lib/x11 / f o n t s / 7 5 d p i
注意 fp之前并无一短横线(-) ,是fp而非 -fp(-fp 的意义不同,见下述)。
• 当你想重新设定服务程序对字体路径的缺省值时,使用命令:
xset fp default
344计计第六篇 X Window 系统的内部结构和使用
下载
• 告诉服务程序重新读入字体的目录,使用命令:
xset fp rehash
它告诉服务程序你可能已经改变了字体目录的内容而和它必须重读字体数据库,现在新加
入的字体可以开始存取了。
• 在现存的路径加入新的字体目录,使用命令:
xset +fp dirlist
• 在现存路径的左面加入一行由逗号分隔的目录列表,而
xset fp+ dirlist
则将目录列表加到路径的右面。
• 将字体目录自路径移去:下两个命令行
xset -fp dirlist
xset fp- dirlist
均可将在dirlist 中的目录自现有路径中移去。
注意 字体路径由服务程序所掌握,而被所有使用该服务程序的客户程序所应用。
字体路径的次序是重要的,我们曾经提过字体设定可以对应一个或多个字体,服务程序会
自行选择,但如果对应的字体是在不同的目录中,则服务程序会选择在路径中较早出现者。
你可以利用这个原则来安排最适合你的显示器分辨率的字体。假设你的显示器分辨率为
1 0 0 d p i,则将1 0 0 d p i字体设在75dpi 之前,例如:
xset fp /usr/lib/x11 / f o n t s / 1 0 0 d p i / , \
/ u s r / l i b / x 11 / f o n t s / 7 5 d p i /
如果你指定字体为
* -times-bold-r-*-120-*
虽然字体有75dpi 和1 0 0 d p i两种版本,但你会用到1 0 0 d p i的字体,这正是你所需要的。
29.1.5 例子:在你的服务程序中增加新字体
现在我们将说明如何在你的服务程序中增加一个新的字体的完整样例。为了真实起见,我
们以S u n所提供的字体为例,将它转换至BDF ,然后安装它,字体开始时在以下目录:
/ u s r / l i b / f o n t s / f i x e d w i d t h f o n t s / s c r e e n . r. 7
欲将Sun 的字体转换成BDF ,我们需使用contrib 版的软件程序v t o b d f(其他系统也有类似
的工具)。v t o b d f 有两个参数,分别是输入文件文件名和欲建立的 BDF 文件文件名,我们可以
事先从contrib 磁带中取得此程序,编译它,而后加入到我们可执行的目录中,我们就可以使
用它了,我们将或多或少依据 X的标准来命名这个新字体,我们喜欢把输出文件的文件尾名
用. b d f,但由于v t o b d f会在字型名后自动产生. b d f ,所以可以省略它,但以后要重定名称时,则
不可省略。
venus% cd/tmp
venus% vtobdf /usr/lib/fonts/fixedwidthfonts/screen.r. 7 \
- s u n - s c r e e n - - r - n o r m a l - - - 7 0 - 7 5 - 7 5 - m - - -
现在重新命名文件,并将其搬入字体目录:
venus% mv- -sun-screen--r-normal---70-75-75-m---\
/ u s r / l i b / x 11 / f o n t s / m i s c / - s u n - s c r e e n - - r - n o r m a l - - - 7 0 - 7 5 - 7 5 - m - - - . b d f
最后,执行mkfontdir 和告诉服务程序重新读入字体目录以便能使用此字体:
venus% mkfontdir
venus% xset fp rehash
第29章计定制X Window系统计计345
下载