第 14 章X Window 系统

目录

14.1. 手动配置 X Window 系统
14.2. 安装和配置字体
14.3. 更多信息

X Window 系统 (X11) 是 UNIX 中图形用户界面的实际标准。X 是基于网络的,可以使在一个主机上启动的应用程序显示在通过任何类型的网络(LAN 或 Internet)连接的另一个主机上。本章介绍了 X Window 系统环境的安装和优化,并提供了关于在 SUSE® Linux Enterprise Desktop 中使用字体的背景信息。

14.1. 手动配置 X Window 系统

默认设置下,以第 5.2 节 “Setting Up Graphics Card and Monitor” (第 5 章 Setting Up Hardware Components with YaST, ↑部署指南)中所述用 SaX2 界面配置 X Window 系统。或者可以通过编辑其配置文件手动配置它。

[Warning]错误的 X 配置可能会损坏您的硬件。

配置 X Window 系统时要小心。在完成配置前,切勿启动 X Window 系统。错误配置的系统可能会对您的硬件造成无法修复的损坏(此情况尤其针对于固定频率的监视器)。该书和 SUSE Linux Enterprise Desktop 的创建者不对导致的任何损坏负责。这里提供的信息已经仔细斟酌,但并不能保证所提供的所有方法均正确且不会对您的硬件造成任何损坏。

命令 sax2 会创建 /etc/X11/xorg.conf 文件。这是 X Window 系统的主配置文件。请在此查找与图形卡、鼠标和监视器有关的所有设置。

[Important]使用 X -configure

使用 X -configure 配置您的 X 安装(如果之前尝试 SUSE Linux Enterprise Desktop 的 SaX2 失败)。如果您的安装涉及专有的仅二进制驱动程序,则 X -configure 不起作用。

下面小节介绍配置文件 /etc/X11/xorg.conf 的结构。它由多个部分组成,每个部分处理配置的某个特定方面。每个部分都以关键字 Section <designation> 开头,以 EndSection 结尾。以下惯例适用于所有章节:

Section "designation"
  entry 1
  entry 2
  entry n
EndSection 

表 14.1 “/etc/X11/xorg.conf 中的部分” 中列出了可用的部分类型。

表 14.1. /etc/X11/xorg.conf 中的部分

类型

含义

Files

用于字体和 RGB 颜色表的路径。

ServerFlags

服务器行为的常规切换。

Module

服务器应装载的模块列表

InputDevice

在此部分中配置输入设备,如键盘和特殊输入设备(触摸板、游戏杆等)。此部分的重要参数有 Driver 以及定义 ProtocolDevice 的选项。对连接到计算机的每个设备,通常都有一个 InputDevice 部分。

Monitor

使用的显示器。此部分的重要元素是标识符(稍后在 Screen 定义中引用)、刷新率 VertRefresh 和同步频率限制(HorizSyncVertRefresh)。这些设置采用的单位为 MHz、kHz 和 Hz。通常,服务器拒绝不符合监视器规格的任何方式行。这样可防止意外地将过高的频率发送到监视器。

Modes

特定屏幕分辨率的方式行参数。可以根据用户给出的值由 SaX2 计算出这些参数,并且通常无需更改这些参数。您可以在此时进行手动干预,例如当要连接固定频率监视器时。HOWTO 文件(位于 /usr/share/doc/howto/en/html/XFree86-Video-Timings-HOWTO)提供了各个数字值含义的细节(在 howtoenh 包中提供)。要手动计算 VESA 方式,可使用工具 cvt。例如,要计算 1680x1050@60Hz 监视器的模式行,请使用命令 cvt 1680 1050 60

Device

特定的图形卡。系统通过其描述性名称来参考图形卡。本部分中的可用选项高度依赖于所用驱动程序。例如,如果使用 i810 驱动程序,请在手册页 man 4 i810 中查找有关各种可用选项的更多信息。

Screen

MonitorDevice 放在一起以组成 X.Org 的所有必要设置。在 Display 子部分中,指定虚拟屏幕 (Virtual) 的大小、用于此屏幕的 ViewPortModes

请注意,某些驱动程序要求 Display 部分中某个位置内必须存在所用的全部配置。例如,如果使用便携式计算机并希望使用比内部 LCD 更大的外部监视器,可能需要在 Modes 行结尾处添加内部 LCD 支持的更大分辨率。

ServerLayout

单个或多头配置的布局。此部分将输入设备 InputDevice 和显示设备 Screen 绑定在一起。

DRI

提供 Direct Rendering Infrastructure (DRI) 的信息。


下面详细介绍 MonitorDeviceScreenX.Orgxorg.conf 的手册页提供了有关其他部分的详细信息。

xorg.conf 中可以存在多个不同的 Monitor Device 部分。甚至可以存在多个 Screen 部分。ServerLayout 部分确定使用其中哪个部分。

14.1.1. Screen 部分

Screen 部分将 Monitor 部分与 Device 部分结合起来并确定要使用的分辨率和颜色深度。Screen 部分与例 14.1 “文件 /etc/X11/xorg.conf 的 Screen 部分” 类似。

例 14.1. 文件 /etc/X11/xorg.conf 的 Screen 部分

Section "Screen"1
  DefaultDepth  162
  SubSection "Display"3
    Depth       164
    Modes       "1152x864" "1024x768" "800x600"5
    Virtual     1152x8646
  EndSubSection
  SubSection "Display"
    Depth       24
    Modes       "1280x1024"
  EndSubSection
  SubSection "Display"
    Depth       32
    Modes "640x480"
  EndSubSection
  SubSection "Display"
    Depth        8
    Modes       "1280x1024"
  EndSubSection
  Device        "Device[0]"
  Identifier    "Screen[0]"7
  Monitor       "Monitor[0]"
EndSection

1

Section 确定该部分的类型,在本示例中是 Screen

2

DefaultDepth 决定默认使用的颜色深度(除非明确指定其他颜色深度)。

3

对每种颜色深度指定不同的 Display 子部分。

4

Depth 决定对本组 Display 设置使用的颜色深度。可能的值有 815162432,尽管并非所有 X 服务器模块或分辨率都支持所有这些值。

5

Modes 部分由可能的屏幕分辨率列表组成。X 服务器从左到右检查此列表。对于每个分辨率,X 服务器均会在 Modes 部分中搜索合适的 ModelineModeline 取决于监视器和图形卡的功能。Monitor 设置确定最终的 Modeline

找到的第一个分辨率是 Default mode。使用 Ctrl+Alt++(在数字小键盘上)向右切换到列表中的下一个分辨率。使用 Ctrl+Alt+(在数字小键盘上)切换到上一个。这使您能够在 X 运行时改动分辨率。

6

包含 Depth 16 Display 子部分的最后一行指出了虚拟屏幕的大小。虚拟屏幕的最大可能大小取决于图形卡中安装的内存量和所需的颜色深度,而不取决于监视器的最大分辨率。如果忽略此行,虚拟分辨率就是物理分辨率。因为目前的图形卡都具有大量视频内存,所以您可以创建非常大的虚拟桌面。但是,如果您将大部分视频内存用于虚拟桌面,则可能不能再使用 3D 功能。例如,如果图形卡有 16 MB 视频 RAM,则当采用 8 位颜色深度时,虚拟屏幕最多可以有 4096x4096 个像素。但建议不要将所有内存用于虚拟屏幕,因为图形卡的内存还要用于多种字体和图形缓存,对于加速卡而言尤其如此。

7

Identifier(这里是 Screen[0])为此部分指定一个定义的名称,在随后的 ServerLayout 部分中可以使用此名称唯一引用这个部分。行 DeviceMonitor 指定属于此定义的图形卡和监视器。这些行仅仅是通过 DeviceMonitor 部分的相应名称或标识符指向这些部分的链接。下面详细讨论这些部分。

14.1.2. Device 部分

Device 部分描述特定的图形卡。您可以在 xorg.conf 中包含任意多个设备项,前提是要使用关键字 Identifier 对这些项的名称进行区分。如果您安装了多个图形卡,通常按顺序对这些部分进行编号。第一个设备称为 Device[0],第二个设备称为 Device[1],依此类推。以下文件是从安装有 Matrox Millennium PCI 图形卡(由 SaX2 配置)的计算机的 device 部分摘出的一段:

Section "Device"
  BoardName     "MGA2064W"
  BusID         "0:19:0"1
  Driver        "mga"2
  Identifier    "Device[0]"
  VendorName    "Matrox"
  Option        "sw_cursor"
EndSection

1

BusID 是指安装图形卡的 PCI 或 AGP 插槽。它与使用命令 lspci 显示的 ID 相匹配。X 服务器需要采用十进制形式的详细信息,但 lspci 以十六进制形式显示这些信息。BusID 的值由 SaX2 自动检测。

2

driver 的值由 SaX2 自动设置,指定哪个驱动程序用于您的图形卡。如果此卡是 Matrox Millennium,则将驱动程序模块称为 mga。然后,X 服务器通过 drivers 子目录的 Files 部分中定义的 ModulePath 进行搜索。在标准安装中,有一个 /usr/lib/xorg/modules/drivers 目录或 /usr/lib64/xorg/modules/drivers 目录,用于 64 位操作系统目录。然后将 _drv.o 添加到名称中。因此,对于 mga 驱动程序,将装载驱动程序文件 mga_drv.o

还可以通过其他选项影响 X 服务器或驱动程序的行为。在 Device 部分中设置的选项 sw_cursor 就是这方面的一个示例。此选项取消激活硬件鼠标光标并使用软件显示鼠标光标。根据驱动程序模块,有不同的选项可用(它们位于目录 /usr/share/doc/packages/package_name 中驱动程序模块的描述文件中。通常还可以在手册页(man xorg.confman 4 <driver module>man 4 chips)中找到有效的选项。

如果图形卡有多个视频连接器,可以将这一个卡的不同设备配置为单一视图。使用 SaX2 以这种方式对图形接口进行设置。

14.1.3. Monitor 部分和 Modes 部分

Device 部分类似,MonitorModes 部分分别描述一个监视器。配置文件 /etc/X11/xorg.conf 可以包含任意多个 Monitor 部分。每个 Monitor 部分使用行 UseModes(如果可用)引用一个 Modes 部分。如果没有 Modes 部分可用于 Monitor 部分,X 服务器将根据常规同步值计算相应值。服务器布局部分指定相关的 Monitor 部分。

只有有经验的用户才可以设置监视器定义。modeline 是 Monitor 部分的重要部分。方式行设置相应分辨率的水平定时和垂直定时。Monitor 部分储存有监视器属性(特别是所允许的频率)。可以使用实用程序 cvt 生成 VESA 方式。有关更多信息,请参见 cvt man cvt 的手册页。

[Warning]

除非您对监视器和图形卡功能有深入了解,否则建议不要更改 modelien,因为这可能严重损坏监视器。

如果您要创建自己的监视器描述,则应非常熟悉 /usr/share/X11/doc 中的文档。安装包 xorg-x11-doc 以查找 PDF 和 HTML 页面。

现在,很少需要手动指定方式行。如果您使用的是最新的多频同步监视器,则通常由 x 服务器通过 DDC 直接从监视器中读取允许的频率和最佳分辨率,如 SaX2 配置一节所述。如果由于某种原因无法执行此操作,请使用 X 服务器中包含的 VESA 方式之一。这种方式可用于大多数图形卡和监视器的组合。

14.2. 安装和配置字体

在 SUSE Linux Enterprise Desktop 中安装附加字体非常简单。只需要将字体复制到位于 X11 字体路径中的任何目录即可(请参见 第 14.2.1 节 “X11 核心字体”)。要启用字体,安装目录应是 /etc/fonts/fonts.conf 中配置的目录的子目录(请参见第 14.2.2 节 “Xft”),或用 /etc/fonts/suse-font-dirs.conf 包含到此文件中。

以下是 /etc/fonts/fonts.conf 中的摘录。该文件是标准的配置文件,应适合大多数配置。它还定义包含的目录 /etc/fonts/conf.d。在此目录中,以两位数字开头的所有文件或符号链接均由 fontconfig 装载。有关此功能的更详细描述,请参见 /etc/fonts/conf.d/README

<!-- Font directory list -->
<dir>/usr/share/fonts</dir>
<dir>/usr/X11R6/lib/X11/fonts</dir> 
<dir>/opt/kde3/share/fonts</dir>
<dir>/usr/local/share/fonts</dir>
<dir>~/.fonts</dir>

/etc/fonts/suse-font-dirs.conf 会自动生成,以引入应用程序(多为第三方程序,如 LibreOffice、Java 或 Adobe Reader)随附的字体。以下是典型项:

<dir>/usr/lib/Adobe/Reader9/Resource/Font</dir>
<dir>/usr/lib/Adobe/Reader9/Resource/Font/PFM</dir>
 

要在整个系统安装其他字体,请手动将字体文件复制至适当的目录(如 root),例如 /usr/share/fonts/truetype。或者,可以使用 KDE 控制中心中的 KDE 字体安装程序来执行此任务。结果是一样的。

您还可以创建符号链接,而不复制实际字体。例如,如果已装入的 Windows 分区上的字体已获得许可并要使用,则可能要执行此操作。随后,运行 SuSEconfig --module fonts

SuSEconfig --module fonts 执行脚本 /usr/sbin/fonts-config,该脚本处理字体的配置。有关此脚本的更多信息,请参见其手册页 (man fonts-config)。

上面的过程同样适用于位图字体、TrueType 和 OpenType 字体以及 Type1 (PostScript) 字体。可以将所有这些字体类型安装在任何目录中。

X.Org 包含两个完全不同的字体系统:旧的 x11 核心字体系统和新设计的 Xft 和 fontconfig 系统。下面几节简要介绍这两种系统。

14.2.1. X11 核心字体

目前,X11 核心字体系统不仅支持位图字体,还支持可缩放字体(例如 Type1 字体)、TrueType 以及 OpenType 字体。X11 核心字体系统只在没有反锯齿处理和子像素显示的情况下支持可缩放字体,并且装载许多语言具有字形的大型可缩放字体可能需要较长的时间。也支持 Unicode 字体,但使用它们的速度比较慢,而且需要更多内存。

X11 核心字体系统带有一些固有缺陷。它已经过时,而且不再能以有意义的方式扩展。虽然为了实现向后兼容而不得不保留 X11 核心字体系统,但应尽可能使用更先进的 Xft 和 fontconfig 系统。

为了执行相应的操作,X 服务器需要知道它可使用的字体以及在系统中的哪些位置可找到这些字体。这由 FontPath 变量来处理,该变量包含所有有效系统字体目录的路径。在其中每个目录中,一个名为 fonts.dir 的文件会列出此目录中的可用字体。FontPath 由 X 服务器在启动时生成。它将在配置文件 /etc/X11/xorg.conf 的每个 FontPath 项中搜索有效的 fonts.dir文件。这些项位于 Files 部分。使用 xset q 可显示实际的 FontPath。运行时也可以使用 xset 更改该路径。要添加其他路径,请使用 xset+fp <path>。要删除不需要的路径,请使用 xset-fp <path>

如果 X 服务器已经处于活动状态,则可以使用命令 xsetfp rehash 使装入的目录中新安装的字体可用。通过 SuSEconfig--module fonts 执行此命令。因为命令 xset 需要访问正在运行的 X 服务器,所以只有当从可以访问正在运行的 X 服务器的外壳启动 SuSEconfig---module fonts 时,此命令才能发挥作用。实现此操作最简单的方法是通过输入 suroot 密码获得 root 许可权限。su 会将启动 X 服务器的用户的访问权限转移到 root 外壳。要检查是否正确安装了字体以及是否可以通过 X11 核心字体系统使用字体,请使用命令 xlsfonts 列出所有可用字体。

默认情况下,SUSE Linux Enterprise Desktop 使用 UTF-8 区域设置。因此,应首选 Unicode 字体(xlsfonts 输出中以 iso10646-1 结尾的字体名称)。可以使用 xlsfonts| grep iso10646-1 列出所有可用的 Unicode 字体。几乎所有在 SUSE Linux Enterprise Desktop 中可用的 Unicode 字体都至少包括欧洲语言所需的字形(以前编码为 iso-8859-*)。

14.2.2. Xft

从一开始,Xft 的编程人员就确保该系统可以很好地支持可缩放字体(包括消除锯齿)。如果使用 Xft,则是由使用字体的应用程序显示字体,而不是像 X11 核心字体系统中由 X 服务器显示字体。采用这种方式,相应的应用程序能够访问实际字体文件并完全控制如何显示字形。这就为正确显示多种语言的文本奠定了基础。直接访问字体文件对于用于打印的嵌入字体非常有用,因为这样可以确保打印输出与屏幕输出看上去完全一样。

在 SUSE Linux Enterprise Desktop 中,两个桌面环境(KDE 和 GNOME)、Mozilla 和许多其他应用程序均已默认使用 Xft。使用 Xft 的应用程序在数目上已经超过了使用以前的 X11 核心字体系统的应用程序。

Xft 使用 fontconfig 库来查找字体并影响字体的显示方式。fontconfig 的属性由全局配置文件 /etc/fonts/fonts.conf 控制。应向 /etc/fonts/local.conf 和用户特定的配置文件 ~/.fonts.conf 添加特殊配置。所有这些 fontconfig 配置文件的开头必须是

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

并且结尾必须是

</fontconfig>

要添加用于搜索字体的目录,请追加类似下面内容的一行:

<dir>/usr/local/share/fonts/</dir>

但通常没有必要这样做。默认情况下,已经在 /etc/fonts/fonts.conf 中输入了用户特定的目录 ~/.fonts。因此,要安装附加字体,只需将它们复制到 ~/.fonts 即可。

您还可以插入用来确定字体外观的规则。例如,输入

<match target="font">
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

来禁用所有字体的反锯齿处理,或输入

<match target="font">
 <test name="family">
  <string>Luxi Mono</string>
  <string>Luxi Sans</string>
 </test>
 <edit name="antialias" mode="assign">
 <bool>false</bool>
 </edit>
</match>

来禁用特定字体的反锯齿处理。

默认情况下,大多数应用程序使用字体名称 sans-serif(或等效的 sans)、serifmonospace。它们不是真正的字体,而只是可解析为合适的字体(取决于语言设置)的别名。

用户可以方便地将规则添加到 ~/.fonts.conf 中,以将这些别名解析为他们喜欢的字体:

<alias>
 <family>sans-serif</family>
 <prefer>
  <family>FreeSans</family>
 </prefer>
</alias>
<alias>
 <family>serif</family>
 <prefer>
  <family>FreeSerif</family>
 </prefer>
</alias>
<alias>
 <family>monospace</family>
 <prefer>
  <family>FreeMono</family>
 </prefer>
</alias>

因为几乎所有应用程序都默认使用这些别名,所以这几乎影响到整个系统。这样,您可以方便地在几乎所有位置都使用自己喜欢的字体,而无需在各个应用程序中修改字体设置。

使用 fc-list 命令可以查看已安装了哪些字体以及哪些字体可用。例如,命令 fc-list 返回所有字体的列表。要找出可用的可缩放字体 (:scalable=true) 中有哪些包含希伯来语 (:lang=he) 所需的所有字形、它们的字体名称 (family)、字型 (style)、粗细 (weight) 以及包含这些字体的文件的名称,请输入以下命令:

fc-list ":lang=he:scalable=true" family style weight

此命令的输出类似于下面:

Lucida Sans:style=Demibold:weight=200
DejaVu Sans:style=Bold Oblique:weight=200
Lucida Sans Typewriter:style=Bold:weight=200
DejaVu Sans:style=Oblique:weight=80
Lucida Sans Typewriter:style=Regular:weight=80
DejaVu Sans:style=Book:weight=80
DejaVu Sans:style=Bold:weight=200
Lucida Sans:style=Regular:weight=80

可以使用 fc-list 查询的重要参数包括:

表 14.2. fc-list 的参数

参数

含义和可能值

family

字体系列的名称,如 FreeSans

foundry

字体的制造商,如 urw

style

字型,如 MediumRegularBoldItalicHeavy

lang

字体支持的语言,例如 de 表示德语、ja 表示日语、zh-TW 表示繁体中文、zh-CN 表示简体中文。

weight

字体粗细,例如 80 表示常规粗细,200 表示粗体。

slant

倾斜,通常 0 表示不倾斜,100 表示斜体。

file

包含字体的文件的名称。

outline

true 表示外框字体,false 表示其他字体。

scalable

true 表示可缩放字体,false 表示其他字体。

bitmap

true 表示位图字体,false 表示其他字体。

pixelsize

以像素为单位表示的字体大小。与 fc-list 一起使用时,此选项仅对位图字体有意义。


14.3. 更多信息

安装包 xorg-x11-dochowtoenh 以更深入地了解 X11。有关 X11 开发的更多信息,请参见该项目的主页:http://www.x.org

手册页中详细描述了包 xorg-x11-driver-video 随附的多个驱动程序。例如,如果使用 nv 驱动程序,在 man 4 nv 中可以找到有关此驱动程序的更多信息。

有关第三方驱动程序的信息位于 /usr/share/doc/packages/<package_name> 中。例如,x11-video-nvidiaG01 的文档在安装包之后位于 /usr/share/doc/packages/x11-video-nvidiaG01 中。