第 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

[提示] 提示

Task menu may be out of sync with the latest package transition state under Debian unstable/testing environment. In such situation, you need to deselect some (meta)packages listed under aptitude(8) task menu to avoid package conflicts. When deselecting (meta)packages, you must select certain packages providing their dependencies manually to avoid them deleted automatically.

你也可以手动只建立一个 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 软件包。

The X Window System is activated as a combination of the server and client programs. The meaning for the words server and client with respect to the words local and remote requires attention here.


Modern X servers have the MIT Shared Memory Extension and communicate with their local X clients using the local shared memory. This bypasses the network transparent Xlib interprocess communication channel and gains performance for large images.

关于 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.3.5 节 “只用于 X 窗口的特定语言环境”

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

  1. The script specified as the argument of "/etc/X11/Xsession" by the X display manager, if it is defined.

  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.3 节 “语言环境”) 。它在 “~/.dmrc” 中像下面那样设定选择的默认值。

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

Fontconfig 2.0 was created to provide a distribution independent library for configuring and customizing font access in 2002. Debian after squeeze uses Fontconfig 2.0 for its font configuration.

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:708 4439 Nimbus Sans L Nimbus Roman No9 L Nimbus Mono L URW (Adobe 兼容的大小)
gsfonts-x11 I:135 96 Nimbus Sans L Nimbus Roman No9 L Nimbus Mono L PostScript Type 1 字体支持的 X 字体。
t1-cyrillic I:23 4882 Free Helvetian Free Times Free Courier URW 扩展(Adobe 兼容的大小)
lmodern I:152 33270 LMSans* LMRoman* LMTypewriter* 基于现代计算机的可缩放 PostScript 和 OpenType 字体(来自 Tex)

表 7.6. 对应的 TrueType 字体

字体软件包 流行度 大小 无衬线字体 衬线字体 等宽字体 字体来源
ttf-mscorefonts-installer V:1, I:92 125 Arial Times New Roman Courier New 微软(Adobe 兼容的大小)(这会安装 non-free 数据)
fonts-liberation I:577 2093 Liberation Sans Liberation Serif Liberation Mono Liberation 字体项目(微软兼容的大小)
fonts-freefont-ttf V:39, I:388 10747 FreeSans FreeSerif FreeMono GNU 自由字体(微软兼容的大小)
fonts-dejavu I:470 39 DejaVu Sans DejaVu Serif DejaVu Sans Mono 覆盖了 Unicode 的 DejaVuBitstream Vera
fonts-dejavu-core V:285, I:679 2954 DejaVu Sans DejaVu Serif DejaVu Sans Mono 覆盖了 Unicode 的 DejaVuBitstream Vera(sans、sans-bold、serif、serif-bold、mono、mono-bold)
fonts-dejavu-extra I:490 7217 N/A N/A N/A 覆盖了 Unicode 的 DejaVuBitstream Vera(oblique、italic、bold-oblique、bold-italic、condensed)
ttf-unifont I:23 16901 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 字体集合文件。

In order to cover complicated code space of characters, CID keyed PostScript Type 1 font is used with CMap files starting themselves with "%!PS-Adobe-3.0 Resource-CMap". This is rarely used for normal X display but used for PDF rendering etc. (see 第 7.7.2 节 “X 实用应用”).

[提示] 提示

The multiple glyphs are expected for some Unicode code points due to Han unification. One of the most annoying ones are "U+3001 IDEOGRAPHIC COMMA" and "U+3002 IDEOGRAPHIC FULL STOP" whose character positions differ among CJK countries. Configuring priority of Japanese centric fonts over Chinese ones using "~/.fonts.conf" should give peace of minds to Japanese.


Host by
Alair