第 7 章 X 窗口系统

目录

7.1. 关键软件包
7.2. 设置桌面环境
7.2.1. Debian 菜单
7.2.2. Freedesktop.org 菜单
7.2.3. 从 Freedesktop.org 菜单到 Debian 菜单
7.3. 服务器/客户端关系
7.4. X 服务器
7.4.1. X 服务器的(重新)配置
7.4.2. 连接到 X 服务器的方式
7.5. 启动 X 窗口系统
7.5.1. 使用 gdm3 启动 X 会话
7.5.2. 自定义 X 会话(经典方式)
7.5.3. 自定义 X 会话(新方式)
7.5.4. 通过 SSH 连接一个远程 X 客户端
7.5.5. 连接互联网的安全 X 终端
7.6. X 窗口中的字体
7.6.1. 基础字体
7.6.2. 其它字体
7.6.3. CJK 字体
7.7. X 应用
7.7.1. X 办公应用
7.7.2. X 实用应用
7.8. X 琐事
7.8.1. 剪贴板
7.8.2. X 中的键盘和鼠标按钮映射
7.8.3. 典型的 X 客户端
7.8.4. X 终端模拟器 —— xterm
7.8.5. 以 root 运行 X 客户端
[警告] 警告

本章是基于 2013 年发布的 Debian 7.0 (Wheezy) 编写的,所以其内容正在变得过时。

Debian 上的 X 窗口系统基于 X.Org 的源代码。

这里有一些用于简易安装的(元)软件包。


关于 X 基础知识,请参考 X(7)the LDP XWindow-User-HOWTO

一个 桌面环境 通常是一个 X 窗口管理器、一个文件管理器和一套兼容的实用程序组合而成。

你能够在 aptitude 的任务菜单下安装全部的桌面环境,例如 GNOMEKDEXfce 或者 LXDE

[提示] 提示

在Debian unstable/testing下,任务菜单可能与最新的软件包过渡状态不同步。在这种情况下,您需要取消选择aptitude(8)任务菜单下列出的一些(元)包。当取消选择 (元) 软件包时,您必须选择那些提供依赖项手动操作的软件包,避免它们被自动删除。

你也可以手动只建立一个 X 窗口管理器,例如 Fluxbox

关于 X 窗口管理器和桌面环境的介绍,参见 Window Managers for X

Debian 菜单系统menu 软件包中为带有 update-menus(1) 的文本和 X 程序提供了一个通用接口。每个软件包都会将它的菜单数据安装到 “/usr/share/menu/” 目录。参见 “/usr/share/menu/README”。

为了从遵从 Freedesktop.org 菜单的窗口管理器环境(例如 GNOME 和 KDE)访问传统的 Debian 菜单,你必须安装 menu-xdg 软件包。

X Window系统作为服务和客户端程序的组合被启动. 在这里,serverclient的意义需要和localremote区分开来.


现代X服务器具有 MIT 共享内存扩展 ,他们和本地X客户端通过本地共享内存进行通讯. 这就绕过了网络透明的Xlib进程间通讯通道,提升了大型图像的处理性能.

关于 X 服务器的信息,参见xorg(1)

X 窗口系统通常是作为 X 会话启动的,X 会话是 由 X 服务器和连接客户端组成的。对于常规的桌面系统,它们两个都是在一个工作站上运行的。

X 会话 由以下方式之一启动。

  • 从命令行用 startx 命令启动

  • 从 “/etc/rc?.d/”(“?” 对应运行级别)目录中的启动脚本末尾使用 X 显示管理器 后台守护进程(daemon)程序 *.dm 启动

[提示] 提示

显示管理器后台守护进程(daemon)的启动脚本在实际执行它们自己时会检查 “/etc/X11/default-display-manager” 文件的内容。这可以确保只有一个 X 显示管理器 后台守护进程(daemon)程序被激活。

[提示] 提示

关于 X 显示管理器的初始环境变量,参见 第 8.4.5 节 “只用于 X 窗口的特定语言环境”

本质上,所有的这些程序都是执行 “/etc/X11/Xsession” 脚本。之后 “/etc/X11/Xsession” 脚本通过 run-parts(8) 执行 “/etc/X11/Xsession.d/” 目录中的脚本。这本质上是通过 内建的 exec 命令执行按下面顺序第一个被找到的程序。

  1. X显示管理器调用"/etc/X11/Xsession" 的参数中指定的脚本, 如果他被定义了。

  2. ~/.xsession” 或 “~/.Xsession” 脚本,如果它被定义。

  3. /usr/bin/x-session-manager” 命令,如果它被定义。

  4. /usr/bin/x-window-manager” 命令,如果它被定义。

  5. /usr/bin/x-terminal-emulator” 命令,如果它被定义。

这个过程会受 “/etc/X11/Xsession.options” 的影响。“/usr/bin/x-*” 命令所指向的准确程序,是由 Debian 选择系统决定的,并且可以通过 “update-alternatives --config x-session-manager” 修改。

细节参见 Xsession(5).

gdm3(1) 让你从它的菜单中选择会话类型(或桌面环境:第 7.2 节 “设置桌面环境”),还有 X 会话的语言(或语言环境:第 8.4 节 “语言环境”) 。它在 “~/.dmrc” 中像下面那样设定选择的默认值。

[Desktop]
Session=default
Language=ja_JP.UTF-8

在2002年,人们创建了发行版独立的库Fontconfig 2.0用于配置和定制字体访问. squeeze 以后的Debian使用 Fontconfig 2.0 进行字体配置.

X 窗口系统中的字体支持可以概括如下。


你可以通过下列方法查看字体配置信息。

  • 使用 “xset q” 查看核心 X11 字体路径

  • 使用 “fc-match” 查看 fontconfig 的字体默认

  • 使用 “fc-list” 查看所有可用的 fontconfig 字体

[提示] 提示

The Penguin and Unicode” 很好地概述了现代的 X 窗口系统。在 http://unifont.org/ 中的其它文档提供了关于 Unicode 字体、支持 Unicode 的软件以及国际化的相关信息,还有 免费/自由/开源(free/libre/open source,FLOSS) 操作系统中的 Unicode 可用性问题。

计算机字体有两种主要的类型。

  • 点阵字体(低分辨率栅格化下表现良好)

  • 轮廓/笔画字体(高分辨率栅格化下表现良好)

缩放点阵字体会导致图像产生锯齿,而缩放轮廓/笔画字体则生成平滑的图像。

Debian 系统中的点阵字体通常由压缩的 X11 pcf 点阵字体文件 提供,它带有 “.pcf.gz” 文件后缀名。

Debian 系统中的轮廓字体由以下提供。

  • PostScript Type 1 字体文件,它带有 “.pfb”(二进制字体文件)和 “.afm”(字体规格文件)文件后缀名。

  • TrueType(或 OpenType)字体文件,通常带有 “.ttf 文件后缀名。

[提示] 提示

OpenType 是为了取代 TrueTypePostScript Type 1。

表 7.5. 相应的 PostScript Type 1 字体

字体软件包 流行度 大小 无衬线字体 衬线字体 等宽字体 字体来源
PostScript N/A N/A Helvetica Times Courier Adobe
gsfonts I:698 4439 Nimbus Sans L Nimbus Roman No9 L Nimbus Mono L URW (Adobe 兼容的大小)
gsfonts-x11 I:127 96 Nimbus Sans L Nimbus Roman No9 L Nimbus Mono L PostScript Type 1 字体支持的 X 字体。
t1-cyrillic I:23 4884 Free Helvetian Free Times Free Courier URW 扩展(Adobe 兼容的大小)
lmodern I:142 33270 LMSans* LMRoman* LMTypewriter* 基于现代计算机的可缩放 PostScript 和 OpenType 字体(来自 Tex)

表 7.6. 对应的 TrueType 字体

字体软件包 流行度 大小 无衬线字体 衬线字体 等宽字体 字体来源
ttf-mscorefonts-installer V:1, I:84 125 Arial Times New Roman Courier New 微软(Adobe 兼容的大小)(这会安装 non-free 数据)
fonts-liberation I:574 2093 Liberation Sans Liberation Serif Liberation Mono Liberation 字体项目(微软兼容的大小)
fonts-freefont-ttf V:38, I:368 10747 FreeSans FreeSerif FreeMono GNU 自由字体(微软兼容的大小)
fonts-dejavu I:500 39 DejaVu Sans DejaVu Serif DejaVu Sans Mono 覆盖了 Unicode 的 DejaVuBitstream Vera
fonts-dejavu-core V:314, I:745 2954 DejaVu Sans DejaVu Serif DejaVu Sans Mono 覆盖了 Unicode 的 DejaVuBitstream Vera(sans、sans-bold、serif、serif-bold、mono、mono-bold)
fonts-dejavu-extra I:523 7217 N/A N/A N/A 覆盖了 Unicode 的 DejaVuBitstream Vera(oblique、italic、bold-oblique、bold-italic、condensed)
ttf-unifont I:23 16946 N/A N/A unifont GNU Unifont,带有 Unicode 5.1 基本多文种平面(BMP)中所有的可打印字符

[提示] 提示

DejaVu 字体基于 Bitstream Vera 字体,并对其进行了扩充。

下面是一些主要关注 CJK 字符 的字体。


像 “VL PGothic” 这样带有 “P” 的字体名称是对应的 “VL Gothic” 字体修改宽度后的比例字体。

举个例子,Shift_JIS 的码表包含了 7070 个字符。它们可以像下面那样分类。

  • JIS X 0201 单字节字符(191 个字符,又名半角字符)

  • JIS X 0208 双字节字符(6879 个字符,又名全角字符)

使用修复宽度的 CJK 字体的双字节字符占用控制台终端的双倍宽度。为了应对这种情况,带有 “.hbf” 文件后缀名的 汉字点阵字体(Hanzi Bitmap Font,HBF)文件 被设计为包含了单字节和双字节字符的字体。

为了节省 TrueType 字体文件的空间,可以使用带有 “.ttc” 文件后缀名的 TrueType 字体集合文件。

为了覆盖复杂的编码字体空间, CID采用"%!PS-Adobe-3.0 Resource-CMap"开头的CMap文件作为PostScript类型1字体的关键字。这个几乎很少用在普通的X显示上,更多用于PDF等格式的文件渲染上。(参考 第 7.7.2 节 “X 实用应用”).

[提示] 提示

对于Han unification,一些Unicode编码点阵期望能够有多样化的glyphs。其中最令人讨厌的在中日韩三个国家“U + 3001顿号”和“U + 3002表意的句号”的字符位置各不相同。配置日文中心字体的优先级,中文用的是" 7~/.fonts.conf 8"能够让日本感到有所平衡。