X Window 用户 HOWTO

Christopher Yeleighton


     
    

Hal Burgiss


     
    

v4.0 1月 12日, 2010

修订历史
修订 v4.02010-01-12修订者: cy
转换为 XML docbook 格式并迁移到新域名。
修订 v3.12002-10-10修订者: hb
一些小的添加和更新。
修订 v3.02002-03-06修订者: hb
原始文档的重写。转换为 DocBook 格式。许多重大更改。

本文档为 Linux 用户提供关于理解和配置 X Window 系统的基础信息。本文档旨在作为入门级文档。假定读者具备软件配置的基本知识,并已安装并运行 X Window 系统。


目录
1. 引言
1.1. 新版本和更新日志
1.2. 待办事项
1.3. 反馈
1.4. 求助!
1.5. 致谢
1.6. 版权
1.7. 标准免责声明
2. XFree86
2.1. 硬件
2.2. XF86Config
2.3. xvidtune 和显示器调优
3. 运行 X
3.1. startx
3.2. 显示管理器
4. 更多 X 配置
4.1. X 资源
4.2. xmodmap,键盘和鼠标
4.3. xset
5. 字体和颜色
5.1. 字体揭秘
5.2. 颜色
6. 窗口管理器和桌面
6.1. 窗口管理器
6.2. 桌面环境
7. X 和命令行
7.1. xterm 和朋友们
8. X 网络和安全
9. 性能考量
9.1. 硬件
9.2. 内存
9.3. 网络上的 X
9.4. 其他提示
10. 附录
10.1. 术语和用法
10.2. 链接和其他参考资料

1. 引言

X Window 系统是一个先进的图形计算和网络环境,从一开始就被设计为一个多用户系统。X 最初发布于 1984 年。如果您不熟悉围绕 X 及其相关组件的基本概念,您应该首先阅读 X Window 系统架构概述 HOWTOhttp://linuxdoc.org/HOWTO/XWindow-Overview-HOWTO/index.html,以了解各个部分是如何组合在一起的。在附录中,我们还尝试定义各种与 X 相关的术语,如果您对本文中的 “显示器”“X 客户端” 等概念感到困惑。

本文档将介绍 Linux 上 X Window 的基本配置和用法。我们还将了解 X 在 Linux 中通常是如何启动的,以及如何配置启动以及相关问题。我们不会检查窗口管理器(例如 fvwm)或桌面环境(KDEGNOME)的配置。这些变量太多,变化速度也太快。当然,在很大程度上,用户与这些组件的交互比与 X 服务器本身的交互更直接,因此额外的阅读将是值得的。查看您本地安装的文档以及各自的主页以获取更多信息。

这里还有一些重要的要点需要记住

这里的讨论将仅限于 XFree86 项目公司在 Linux 上实现的 X。还有其他实现,包括商业实现。XFree86 v4.x 已经发布一段时间了,因此我们将以该版本为例进行讨论。大部分讨论也适用于之前的 3.x 版本,但偶尔会有一些差异。

还值得注意的是,可能有许多方法可以启动 X 并设置 Linux 系统。我们将重点介绍 Linux 发行版中常见的启动方法。此外,供应商可能会在配置文件存放位置以及命名方式上有所不同。如果您在本文档中看到此类差异,请记住这一点。如果这是一个问题,您的供应商肯定有他们自己的文档。并且与往常一样,希望 man 手册与您的安装相符。

此外,我们将在以下章节中查看各种配置文件。这些都是纯文本文件,可以使用您喜欢的编辑器进行编辑。在编辑重要文件之前,务必制作备份副本,以防墨菲定律发生作用(例如 “cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.bak”)。


1.1. 新版本和更新日志

本 HOWTO 的当前官方版本可以在 Linux 文档项目网站找到。

v3.1:这只是一些小的、次要的更新。包含指向 http://www.plig.org/xwinman/ 的链接,作为一个购买窗口管理器的良好资源。添加了 fluxbox 的链接,这是一个带有选项卡式窗口的窗口管理器。并添加了一个关于提高网络性能的简短章节。验证所有链接都有效。

v3.0:这是一个包含几个新章节的重大重写。删除了一些章节,现在的重点更多地放在 X 本身(而不是像窗口管理器这样的客户端)上。新的维护者也加入了 :-)

v2.0:包括 Guus Bosch、Brian J. Miller 和我自己的更正,以及大量新的更新和信息。

v1.4:包括 Anthony J. 的更正和补充,以及 Tomasz Motylewski 提供的一些非常好的安全提示。


1.2. 待办事项

一个基本的故障排除章节。可能在 v3.2 版本中加入。


1.3. 反馈

如果您对本文档有任何问题或意见,请随时通过电子邮件联系我 Hal Burgiss,邮箱地址为。我欢迎任何建议、更正或补充。如果您有希望在未来版本中看到的信息,或者您想为未来的修订做出贡献,请给我留言。


1.4. 求助!

我之所以承担本文档的维护工作,是因为它被遗弃了,而我想提出一个修改建议。简而言之,这导致了一次重大的重写。您可以通过纠正不准确之处、澄清不清楚之处和提出改进建议来帮助改进本文档。关于这个主题,有很多我可能不知道,或者没有解释清楚的地方。您的帮助将改进本文档并帮助其他用户。本文档需要您的帮助!


1.5. 致谢

感谢 XFree86 开发团队为提供强大而灵活的 GUI 所做的努力。并感谢整个 GNU/Linux 和开源社区使其成为可能。

还要感谢原始作者 Ray Brigleb。

感谢 comp.os.linux.x 上的各种用户,他们以这样或那样的方式提供了帮助,无论他们是否知道。

最后,感谢 http://google.com/linux,他们令人难以置信的信息库为我节省了大量时间。使用它来回答此处未解答的问题!


1.6. 版权

版权所有 © 2002, Hal Burgiss。

除非另有说明,Linux HOWTO 文档的版权归其各自的作者所有。只要在所有副本上保留此版权声明,Linux HOWTO 文档可以全部或部分地以任何物理或电子媒介复制和分发。允许并鼓励商业再分发;但是,作者希望收到任何此类分发的通知。

所有翻译、衍生作品或包含任何 Linux HOWTO 文档的聚合作品都必须受此版权声明的约束。也就是说,您不得从 HOWTO 生成衍生作品,并对其分发施加额外的限制。在某些条件下可以授予这些规则的例外;请联系 Linux HOWTO 协调员以获取更多信息。

简而言之,我们希望通过尽可能多的渠道来推广信息的传播。但是,我们确实希望保留 HOWTO 文档的版权,并且非常希望收到任何再分发 HOWTO(尤其是本文档)的计划的通知!

本文档中提到的一些术语是商标名称。除非另有说明,所有商标均为其各自所有者的财产。

“X Window 系统”是 X Consortium, Inc [现在是 OpenGroup?] 的商标。

“XFree86”XFree86 项目公司的商标。

“Linux”是 Linus Torvalds 的注册商标。


1.7. 标准免责声明

此处提供的信息和示例仅用于说明目的。使用风险自负。已尽一切努力确保本文档的内容在编写时是准确的。如果您发现不准确之处,请发送澄清说明给我。

提及任何特定的公司、产品或品牌名称不应被理解为认可。


2. XFree86

几乎每个 Linux 发行版都附带 XFree86 的 X Window 系统实现。当然,这个项目为我们提供了 X 服务器,但也包含了一套广泛的实用程序和应用程序,以帮助实现功能齐全的 GUI 环境。

事实上,要列出 XFree86 附带的所有内容,清单会太长。除了 X 服务器本身之外,以下是一些值得注意的实用程序

xdm - X 显示管理器。

xfs - X 字体服务器。

twm - 轻量级窗口管理器。

xterm - 最知名的终端模拟器。还有 xterm3dnxterm

xwd - 屏幕和窗口图像捕获器。

xf86config - X 服务器配置实用程序。

xdpyinfo - X 显示信息实用程序。它显示有关 X 服务器的详细信息。

xlsclients - 列出当前连接的 X 服务器客户端。

xlsfonts - 列出 X 可用的字体。

appres - 列出程序将使用的 X “资源”

xfontsel - 用于查看或选择字体的应用程序。

xprop - 用于显示窗口 “属性”的工具,例如客户端的类名。

xset - 设置用户对许多事物的偏好,包括鼠标、键盘、声音(铃声)等。

xsetroot - 用于更改 “根窗口”外观的程序,例如设置背景颜色。

xvidtune - 用于调整 X 服务器视频模式和显示器相关设置的应用程序。

xwininfo - 显示有关选定的 “窗口”的信息。

xmodmap - 用于操作键盘和鼠标按钮映射的实用程序。

许多许多字体。以及相当多的文档。

还有很多。我们在这里只简单介绍其中一些实用程序。但请随意探索其他实用程序。大多数应该都有自己的 man 手册。


2.1. 硬件

X 服务器控制输入(键盘、鼠标等)和输出(显示器、监视器)设备。

兼容硬件是一个棘手的话题,因为它非常具有动态性。我们在这里不得不避免具体细节,因为在您阅读本文时,这些细节肯定会发生变化。而且无论如何都会变得非常冗长。

因此,让我们满足于一些一般性原则。大多数 PC 类型硬件都在某种程度上得到支持。帮助很大 ;-)

经验法则:如果它是使用长期存在的通用协议(例如 PS/2)的设备,则应该得到很好的支持。相反,如果它是相对较新的、具有突破性技术的设备,那么可能性就不那么大。这只是开源开发与更迎合最流行平台的制造商之间的本质区别。一些制造商比其他制造商更配合。

现在,一些一般性指导原则

  • 显示器 - 这很容易。Linux 实际上不需要与显示器本身兼容。那是显卡的工作。任何您的显卡可以驱动的显示器都应该可以正常工作。包括平板显示器。

  • 显卡 - 这要困难得多。X 服务器由芯片组决定。支持许多许多芯片组。但不可避免地,总有一些较新的卡,甚至修订后的卡,不受支持。并且一些可能比其他卡具有更好的支持和更好的优化。多头显示器、3D、电视输出、DRI 等高级功能也获得了一些支持,尽管应首先对此进行研究,因为支持可能受到限制。支持的显卡列表:http://xfree86.org/cardlist.html

    开源驱动程序通常是逐步开发的。例如,特定的显卡可能在基本显示用途方面运行良好,但 3D 等特殊功能可能会在开发周期的后期才出现。这与制造商提供的专有驱动程序的开发模型截然不同。

  • 键盘 - 任何标准 PC 类型键盘都应该可以正常工作,包括 PS/2、USB 和许多红外设备。可能还有许多 “非标准” 键盘 ;-)

  • 鼠标和其他指针设备 - 大多数都应该得到支持,包括 PS/2、总线、串口、USB 和许多红外设备。光学鼠标也是如此。Unix 长期以来更喜欢三键鼠标,尽管也支持更多按钮的鼠标。许多滚轮鼠标通过 “IMPS/2” (IntelliMouse) 或其他特定协议获得 X 服务器支持,尽管可能需要为某些个别应用程序进行补充配置。(请参阅链接部分。)

  • 笔记本电脑有自己独特的问题,因为硬件往往非常特殊,并且通常与台式机风格系统中常见的硬件不同。X 得到了许多笔记本电脑的支持。请在 http://www.linux-laptop.net/ 上查看详细信息。

您也可以查看您的发行版网站上的 “硬件兼容性列表”。这应该很好地说明您的版本应该可以正常工作的硬件。

较新版本的 XFree86 显然会具有更好的硬件支持。如果您正在使用较旧的 Linux 版本并且没有完整的硬件支持,请考虑升级 XFree86。首先检查您的发行版是否为您的版本提供更新。


2.2. XF86Config

XFree86 的主要配置文件是XF86Config,它可能在您的系统中以XF86Config-4的形式存在,用于 XFree86 v4.x,或可能存在其他变体(请参阅 man 手册)。它通常位于/etc/X11/XF86Config,但同样,路径可能存在差异。如果两者XF86Config-4XF86Config都存在,则 XFree86 v4.x 将使用前者。这是一个必需的文件。

XF86Config文件定义了硬件设备和 X 服务器环境的其他关键组件。

虽然这是一个纯文本文件,并且可以编辑,但它通常是在安装过程中由您的供应商为此目的使用的任何实用程序创建的。XFree86 还包含 xf86config 实用程序用于此目的,但许多发行版都有自己的此类实用程序。如果需要,可以在安装后运行这些实用程序来更改配置,或者在安装新硬件时运行。首先阅读您本地安装的文档。如果您尝试手动编辑此文件,请务必先制作备份副本,因为如果此文件不符合 X 的要求,X 将无法启动 ;-)

此文件包含各种 “节”。每个节都定义了 XFree86 的一些基本方面,例如 “InputDevice”(鼠标、键盘、操纵杆等)、“monitor”“screen”XF86Configman 手册描述了每个节及其常用值。请注意,man 手册中列出的值并非详尽的列表。有许多特定于设备的 “选项”。请查看 http://xfree86.org 以获取有关您的硬件的注释和提示。

作者当前的XF86Config-4,由 Red Hat 的 XFree86 4.1 安装程序生成

Section "ServerLayout"
	Identifier "XFree86 Configured"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
   # The location of the RGB database.
   RgbPath     "/usr/X11R6/lib/X11/rgb"

   # Multiple FontPath entries are allowed (they are concatenated together)
   # By default, Red Hat 6.0 and later now use a font server independent of
   # the X server to render fonts.
   FontPath "unix/:7100"
EndSection

# Module loading section

Section "Module"
	Load  "dbe"		# Double-buffering
	Load  "GLcore"		# OpenGL support
	Load  "dri"		# Direct rendering infrastructure
	Load  "glx"		# OpenGL X protocol interface
	Load  "extmod"		# Misc. required extensions
	Load  "v4l"		# Video4Linux
#    Load  "fbdevhw"
     Load  "pex5"
     Load  "record"
     Load  "xie"
EndSection


Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "keyboard"
	Option      "XkbLayout"	"us"

#    Option  "AutoRepeat"    "500 5"

# when using XQUEUE, comment out the above line, and uncomment the
# following line
#    Option  "Protocol"      "Xqueue"

# Specify which keyboard LEDs can be user-controlled (eg, with xset(1))
#    Option  "Xleds"         "1 2 3"

# To disable the XKEYBOARD extension, uncomment XkbDisable.
#    Option  "XkbDisable"

# To customize the XKB settings to suit your keyboard, modify the
# lines below (which are the defaults).  For example, for a non-U.S.
# keyboard, you will probably want to use:
#   Option  "XkbModel"      "pc102"
# If you have a US Microsoft Natural keyboard, you can use:
#   Option  "XkbModel"      "microsoft"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option      "Device" "/dev/mouse"
	Option      "Protocol" "IMPS/2"
	Option      "Emulate3Buttons" "off"
	Option      "ZAxisMapping" "4 5"
EndSection

Section "Monitor"
	Identifier "Sylvania F74"
	VendorName "Unknown"
	ModelName  "Unknown"
	HorizSync   30 - 70
	VertRefresh 55 - 120
	Option "dpms"
#    Modelines go here if necessary. Use xvidtune to get proper values.
EndSection

Section "Device"
	Identifier "ATI Rage 128"
	Driver "r128"
	BoardName "Unknown"
EndSection

Section "Device"
	Identifier "Linux Frame Buffer"
	Driver "fbdev"
	BoardName "Unknown"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device "ATI Rage 128"
	Monitor "Sylvania F74"
	DefaultDepth 24
	Subsection "Display"
		Depth 24
		Modes "1400x1050" "1280x1024" "1152x864" "1024x768" "800x600"
	EndSubSection
	Subsection "Display"
		Depth 16
		Modes "1600x1200" "1400x1050" "1280x1024" "1152x864" "1024x768" "800x600"
	EndSubSection
	Subsection "Display"
		Depth 8
		Modes "1024x768" "800x600" "640x480"
	EndSubSection
EndSection

Section "DRI"
	Mode 0666
EndSection

 

您的配置可能看起来完全不同。这只是一个可能的配置,带有 Red Hat(和我)的附赠注释,并且适用于相当普通的设置。这里没有任何像多屏幕或显示器这样的奇异之处。

详细解释这一点超出了本文档的范围。请参阅XF86Configman 手册。此外,请考虑访问 xfree86.org 并查找可能适用于您的显卡或其他硬件的特定选项。

关于上面 “Screen” 部分的一个简短说明。请注意,有三个子节,标识为 “Display”。每个子节都有不同的 “Depth” 指定,(也称为 ColorDepth)。“Modes” 也根据各自的 “Depth” 设置而有所不同。将要使用的活动 “Display” 子节由 “DefaultDepth” 设置决定(除非被命令行选项覆盖)。本示例中的默认值定义为 “24”,因此将使用第一个子节。此外,此子节中列出的最高 “Mode” 将是默认模式(分辨率),这里是列出的第一个模式。第一个列出的模式也决定了可查看的屏幕区域,该区域可能小于模式(分辨率)本身。在这种情况下,您将拥有一个大于可查看屏幕的虚拟桌面。要使可查看的屏幕和分辨率匹配,请将最大值作为每个 “Mode” 的第一个列出的值。

关于此处 “Modes” 的另一个说明:您所看到的是我在 Red Hat 的 Xconfigurator 配置期间所做的选择的结果。这些是标准分辨率,但不必是!这仅受您的硬件可以支持的限制。您也不必使用标准的宽度 x 高度比率。类似1355x1112是有效设置(如果您的硬件支持并且您喜欢!)。

X 服务器将拒绝它认为无效的任何 “Modes”。您可以使用以下命令循环浏览有效模式以更改屏幕分辨率Ctrl-Alt-+Ctrl-Alt--(那是小键盘上的加号和减号键)。

在 v4.x 之前的版本中,您还会看到许多 “Modeline” 语句,这些语句试图定义显示器的功能。这些语句看起来像

 # 1024x768 @ 100Hz, 80.21 kHz hsync
 Modeline "1024x768"  115.5  1024 1056 1248 1440  768  771  781  802 -HSync -VSync

 

从 4.x 开始,不再需要显式的 “Modeline” 定义 ;-) 这有时需要手动编辑才能在早期版本的 XFree86 中获得最佳值,但在 v4.x 中通常不是必需的。XFree86 视频时序 HOWTO 对此进行了很好的、但相当技术性的解释。

如果您使用的任何配置实用程序都无法自动正确识别您的显卡或显示器规格,您不太可能获得最佳配置。在这种情况下,您可能必须手动提供正确的值。这应该可以从您的用户手册中获得(您保留了用户手册,对吗?)。或者,查看制造商的网站。

同样,通常不需要手动编辑此文件。如果您确实认为这是必要的,请小心。一个小错误可能会导致 X 失败。对此文件的任何更改都需要重新启动 X 才能生效。

使用别人的XF86Config文件通常不是一个好主意,因为他们不太可能拥有相同的硬件。


2.3. xvidtune 和显示器调优

您可能希望充分利用您的硬件。如果 X 未进行最佳配置,请考虑重新运行您的供应商的 X 配置实用程序,并尝试获得更好的结果。通过实验来改进配置不太可能损坏任何东西。现在大多数现代显示器都具有防止熔毁的安全措施 ;-)

但是,如果您过度操作,X 可能无法启动。因此,我更喜欢在 “实验” 时使用 “startx” 方式启动 X(见下文)。这样,如果 X 崩溃,显示管理器(GUI 登录)将不会循环并给您带来严重的麻烦。startx 只会优雅地返回到文本控制台屏幕,在那里可能会看到错误消息。

调整显示器相关设置的另一种方法是使用 XFree86 的 xvidtune 程序。这是交互式运行的,可用于调整各种设置(请参阅 man 手册)。简单的对话框具有滑块和按钮,允许用户输入和调整。顶部左侧是水平显示器设置,右侧是垂直设置。滑块正下方的按钮可用于调整每个设置。

这有时用于调整可查看的屏幕区域,例如将其居中,或增加其大小以填充显示器的视口。当启动 xvidtune 时,它默认为当前设置。

左下角有按钮,可以 “应用” 新设置,“测试” 新设置,或 “显示” 当前设置(即转储到屏幕),以及其他功能。在此处所做的任何更改都不会保存。如果 “应用” 了新设置,则仅适用于当前会话。 xvidtune “Show” 的示例输出

 Vendor: Unknown, Model: Unknown
 Num hsync: 1, Num vsync: 1
 hsync range 0:  30.00 -  70.00
 vsync range 0:  55.00 - 120.00
 "1400x1050"   122.00   1400 1488 1640 1880   1050 1052 1064 1082 +hsync +vsync

 

最后一行是用于驱动当前屏幕的 “Modeline”。有关 “Modelines” 的更多信息,请参阅 XFree86 视频时序 HOWTO

您可以测试修改,并将它们应用于当前会话。要使更改永久生效,必须手动将其添加到XF86Config“Monitor” 部分XF86Config-4对于 v.4.x)使用文本编辑器。

xvidtune 会尽职尽责地警告您玩弄显示器设置的危害。使用现代显示器不太可能损坏任何东西。但它最好用于进行细微调整。使用风险自负!


3. 运行 X

启动 X 会话通常通过两种方式完成:X 会话通过显示管理器(如 xdm)启动,用户在 GUI 屏幕上登录。或者,用户在登录到文本控制台后手动启动 X。后者通常使用 startx 命令完成,这是一个简单的 xinit shell 脚本包装器。在任何一种情况下,X 都以 root 权限运行,因为它需要对硬件设备进行原始访问。

通常,使用哪种方法取决于系统 “运行级别”。启动时启动的默认运行级别通常在/etc/inittab中设置,在 Linux 上

 # Run xdm in runlevel 5
 x:5:respawn:/etc/X11/xdm -nodaemon

 

这将启动 xdm,从而在运行级别 5 启动 X。如果它因任何原因终止或停止,它将 “respawn”。您还可以使用 init 命令在不重启的情况下更改运行级别(请参阅 man 手册)。

让我们简要地看一下这两种方法,然后是一些额外的配置来设置用户的工作环境。


3.1. startx

startx 将首先调用 xinit 来启动 X。单独使用时,这将使您处于一个空白、模糊、简陋的桌面,没有加载窗口管理器。xinit 基本上接受两组命令行参数:客户端规范(要运行的程序等)和服务器规范(X 服务器选项),用 “--” 分隔。如果在命令行上未指定客户端程序,xinit 将在用户的主目录中查找.xinitrc文件,作为 shell 脚本运行。如果找到,这将反过来运行用户指定的任何命令来设置环境,或启动文件中包含的程序。如果此文件不存在,xinit 将使用以下初始命令

 
 xterm -geometry +1+1 -n login -display :0
 
 

如果.xserverrc未在用户的主目录中找到,X 本身将使用以下命令启动

 X :0

 

如您所见,这并没有太大帮助,因为它只是启动了一个 xtermstartx shell 包装器为 xinit 提供了额外的功能和灵活性。startx 将为我们调用 xinit,并提供一些简单的配置选项。您还可以发出以下命令,例如

 
 startx -- -dpi 100 -depth 16   #force X to 100 dots per inch
                                #and colordepth of 16 (X v4 syntax)
 
 

双破折号后的任何内容都作为参数直接传递给 X 服务器,通过 xinit。在本例中,您可以强制 X 使用您偏好的分辨率,并且仍然可以使用我们稍后将在本文档中介绍的配置文件。有关更多命令行选项,请参阅 Xserver man 手册。

与其每次都发出相同的命令行,不如使用配置文件来存储此类信息,这样更方便。

如果您查看 startx 脚本(/usr/X11R6/bin/startx在我的系统上),您会看到它使用两个默认配置文件来帮助设置 X 环境xinitrcxserverrc。它首先在/etc/X11/xinit/中查找系统范围的文件。然后,它检查用户的主目录中是否有类似的文件,如果找到,这些文件将优先。请注意,后者是 Unix 风格的 “点” 文件(例如~/.xinitrc),并且是可执行的 shell 脚本。

您通常不希望编辑系统范围的文件,但您可以自由地将这些文件复制到您的主目录作为起点,或者只是从头开始。顾名思义,一个文件有助于设置 X 服务器,另一个文件通过执行命令、准备环境并可能启动客户端程序(如 xterm 或窗口管理器(是的,它也是客户端))来设置 xinit


3.1.1. xserverrc

与所有 XFree86 配置文件一样,这是一个纯文本文件,通常是一个简单的单行语句,用于启动 X 服务器。它可以包含您的 X 安装支持的任何有效命令行选项。如果您始终使用自己的选项启动 X,这将比每次都键入选项更容易。一个可能的~/.xserverrc:

 exec X :0 -dpi 100 -nolisten tcp

 

这将会在显示器 :0,即第一个“显示器”上启动 X,分辨率为每英寸 100 点,并禁用 TCP 连接。有关其他有效选项,请参阅 Xserver 手册页。这只是一个示例。


3.1.2. xinitrc

xinitrc用于设置合适的 X 环境,并启动其他程序,也称为 “客户端”,这些程序是我们希望在 X 启动后立即可用的。您可能有一个系统范围的xinitrc来启动一组预定义的程序。要自定义此设置,请在您的主目录中创建您自己的。将其命名为.xinitrc, 确保它是一个可执行脚本,并使用 chmod +x 命令。一个示例(略微修改自我系统上的原始文件)

#!/bin/sh
# $XConsortium: xinitrc.cpp,v 1.4 91/08/22 11:41:34 rws Exp $

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap

# merge in defaults and keymaps
if [ -f $userresources ]; then
    xrdb -merge $userresources
fi

if [ -f $usermodmap ]; then
    xmodmap $usermodmap
fi

if [ -z "$BROWSER" ] ; then
	# we need to find a browser on this system
	BROWSER=`which netscape`
	if [ -z "$BROWSER" ] || [ ! -e "$BROWSER" ] ; then
	# not found yet
		BROWSER=
	fi
fi
if [ -z "$BROWSER" ] ; then
	# we need to find a browser on this system
	BROWSER=`which lynx`
	if [ -z "$BROWSER" ] || [ ! -e "$BROWSER" ] ; then
	# not found yet
		BROWSER=
	else
		BROWSER="xterm -font 9x15 -e lynx"
	fi
fi

export BROWSER

# start some nice programs
if [ -f $HOME/.Xclients ]; then
    exec $HOME/.Xclients
else
    xclock -geometry 50x50-1+1 &
    xterm -geometry 80x50+494+51 &
    if [ -f /usr/X11R6/bin/fvwm ]; then
        exec fvwm
    else
        exec twm
    fi
fi

#eof

 

简而言之,这个脚本的作用是设置我们的工作环境,使用 xmodmap(键盘)和 xrdb(应用程序资源设置)。稍后会详细介绍这些。然后设置 shell 变量$BROWSER用于 GUI 环境(本例中为 Netscape),以便任何可能期望此变量的应用程序都有一个合理的选择。然后检查文件Xclients是否存在,包括作为系统范围的文件和用户主目录中的文件。在这个特定的示例中,这是启动任何客户端应用程序的地方,包括窗口管理器(见下文)。如果我们愿意,也可以很容易地在这里启动它们。如果一个Xclients文件找不到,那么将为我们启动一个窗口管理器。如果 fvwm 可用,则启动它,否则启动 XFree86 的极简主义 twm。如果由于某些原因,这两个都无法启动,脚本将退出,并且 X 将启动失败。


3.1.3. Xclients

到目前为止,一切都遵循了相当标准和可预测的事件序列。总结一下,我们调用了 startx,它反过来调用了 xinit,后者解析了xinitrc以进行初始设置。大多数 Linux 系统都应遵循相同的序列,尽管各种值和设置可能有所不同。

现在我们来到了链条中的最后一环,用户通常会在其中指定他或她的偏好,包括要使用的窗口管理器和/或桌面环境。如果用户没有这样做,系统将提供合理的,但可能无趣的默认设置。据推测,这就是您来到这里的原因 ;-)

窗口管理器或桌面环境通常是最后一个启动的应用程序。如果您想要启动其他程序(如 xterm),它们应该在窗口管理器之前启动,并使用 “&” “后台运行”。这一切都可以在用户的~/.xinitrc中完成。或者如上面的示例所示,实际的应用程序是从另一个脚本启动的。让我们看一个简短的、假设性的脚本,.Xclients:

 
#!/bin/bash
# ~/.Xclients, start my programs.

xset s off s noblank
xset m 30/10 4
xset r rate 200 40

xscreensaver & 
rxvt -geometry 80x50-50+150 &

echo Starting Window Manager...

if [ -x /usr/X11R6/bin/wmaker ]; then
  echo `date`: Trying /usr/X11R6/bin/wmaker... |tee -a ~/.wm-errors 2>&1
  exec /usr/X11R6/bin/wmaker >> ~/.wm-errors 2>&1
fi 

echo `date`: Failed, trying fvwm... |tee -a ~/.wm-errors 2>&1

# let's try regular fvwm (AnotherLevel doesn't work with fvwm1).
if [ -n "$(type -path fvwm)" ]; then
  # if this works, we stop here
  exec fvwm >> ~/.wm-errors 2>&1
fi

echo `date`: Failed, trying twm... |tee -a ~/.wm-errors 2>&1

# wow, fvwm isn't here either ... 
# use twm as a last resort.
exec twm >> ~/.wm-errors 2>&1

# Dead in the water here, X will exit as well, sigh...
echo `date`: Unable to start a Window Manager ... |tee -a ~/.wm-errors 2>&1

# eof

 

这与xinitrc所做的并没有什么不同。我们添加了一些小的改动,包括启动屏幕保护程序、用户更喜欢的不同终端模拟器 (rxvt),甚至使用 xset 进一步设置环境(监视器、鼠标和键盘),以及与系统默认设置不同的窗口管理器。这位于用户的主目录中,因此在升级期间也不会被覆盖。

实际上,X 此时已经启动,我们只是在对配置进行最后的润色。请注意,窗口管理器在这里没有使用 “&” “后台运行”。这很重要!必须有东西在前台运行,否则 X 将退出。在本例中,我们没有启动桌面环境,如 KDEGNOME,但如果我们这样做,则最后一个应用程序必须是 gnome-sessionstartkde。由于我们在这里是自己配置,如果我们要更改窗口管理器,我们所要做的就是编辑此文件,然后重启 X。供应商提供的配置可能比这更复杂,但原理是相同的。

作为后记,不要认为任何初始客户端应用程序必须像我们在这里所做的那样启动。这是传统的做法,有些人可能更喜欢这种方法。大多数窗口管理器都有自己的内置方法来启动初始程序,KDEGNOME 也是如此。请参阅各自的文档。


3.2. 显示管理器

另一种更常见的方法是 “GUI 登录”,其中 X 在登录之前运行。这是在 “显示管理器” 的帮助下完成的,显示管理器有多种实现方式。XFree86 包括用于此目的的 xdm(X 显示管理器),尽管您的发行版可能使用其他显示管理器,例如 gdm (GNOME) 或 kdm (KDE)。

显示管理器实际上做的远不止启用 GUI 风格的登录。它们还用于管理网络上的本地和远程 “显示器”。我们在这里不深入讨论细节,但在 Remote X Apps Mini HOWTOXDMCP HOWTO 中对此进行了很好的介绍(请参阅链接部分)。就我们这里的目的而言,它们提供了类似于 gettylogin 的服务,允许用户登录系统并启动其默认 shell,但在 GUI 环境中。

以下是 Diego Zamboni 提供的显示管理器可能用于其他用途的更高级用法的示例

我有两个 X 会话以不同的分辨率运行。我根据我的笔记本电脑是否连接到外部显示器或使用其自身的 LCD 显示器来在它们之间切换。

这是我的/usr/lib/X11/xdm/Xservers文件,它启动了两个显示器

 :1 local /usr/X11R6/bin/X :1 -layout 1024x768
 :0 local /usr/X11R6/bin/X :0 -layout 1600x1200

 

然后我在我的/etc/X11/XF86Config-4中将 “1024x768”“1600x1200” 定义为 “服务器布局”,如下所示

 Section "ServerLayout"
         Identifier     "1600x1200"
         Screen         "Screen0" 0 0
         InputDevice    "Mouse0" "CorePointer"
         InputDevice    "Keyboard0" "CoreKeyboard"
 EndSection
 
 Section "ServerLayout"
         Identifier     "1024x768"
         Screen         "Screen1" 0 0
         InputDevice    "Mouse0" "CorePointer"
         InputDevice    "Keyboard0" "CoreKeyboard"
 EndSection
 
 ## snip ...
 
 Section "Screen"
         Identifier   "Screen0"
         Device       "S3 Savage/MX"
         Monitor      "Monitor0"
         DefaultDepth 16
         
         Subsection "Display"
                 Depth  16
                 Modes  "1600x1200" "1280x1024" "1024x768"
         EndSubsection
 EndSection
 
 Section "Screen"
         Identifier   "Screen1"
         Device       "S3 Savage/MX"
         Monitor      "Monitor0"
         DefaultDepth 16

         Subsection "Display"
                 Depth  16
                 Modes  "1024x768" "800x600"
         EndSubsection
 EndSection

 

请注意此处 “标识符” 的使用。Diego 在这里启动了两个独立的 “显示器”。然后他可以在登录时选择他想要哪一个。

大多数显示管理器都源自 XFree86 令人尊敬的 xdm,并添加了他们自己的增强功能。让我们简要地看一下最流行的几个。


3.2.1. xdm

xdm 可以使用位于/etc/X11/xdm/, /usr/X11R6/lib/X11/xdm或类似位置的配置文件进行配置,具体取决于您的系统。这些是系统范围的文件。文件xdm-config是主配置文件,主要描述了在哪里可以找到辅助配置文件

 ! $XConsortium: xdm-conf.cpp /main/3 1996/01/15 15:17:26 gildea $
 DisplayManager.errorLogFile:	/var/log/xdm-errors
 DisplayManager.servers:		/etc/X11/xdm/Xservers
 DisplayManager.accessFile:	/etc/X11/xdm/Xaccess
 ! All displays should use authorization, but we cannot be sure
 ! X terminals will be configured that way, so by default
 ! use authorization only for local displays :0, :1, etc.
 DisplayManager._0.authorize:	true
 DisplayManager._1.authorize:	true
 ! The following three resources set up display :0 as the console.
 DisplayManager._0.setup:	/etc/X11/xdm/Xsetup_0
 DisplayManager._0.startup:	/etc/X11/xdm/GiveConsole
 DisplayManager._0.reset:	/etc/X11/xdm/TakeConsole
 !
 DisplayManager*resources:	/etc/X11/xdm/Xresources
 DisplayManager*session:		/etc/X11/xdm/Xsession
 !
 ! SECURITY: do not listen for XDMCP or Chooser requests
 ! Comment out this line if you want to manage X terminals with xdm
 DisplayManager.requestPort:	0

 

“!” 表示注释。启动 X 服务器的命令在/etc/X11/xdm/Xservers中,在这个特定的示例中,它由 “DisplayManager.servers” 定义,并且等同于xserverrc用于 startx X 服务器启动命令的命令,但这里的语法略有不同。/etc/X11/xdm/Xservers我的系统上的

 :0 local /usr/X11R6/bin/X 

 

的内容很简单

这会在第一个本地显示器(由 0 指定)上启动 X。您要添加的任何特殊命令行参数都放在末尾。下面是一个示例/etc/X11/xdm/Xsetup_0

 
 #!/bin/sh
 xconsole -geometry 480x100-0-0 -daemon -notify -verbose -fn \
   '-schumacher-clean-medium-r-*-*-10-*-*-*-*-*-*-*' -exitOnFail  &
 
 /usr/X11R6/bin/xv -quit -root /usr/share/pixmaps/Backgrounds/InDreams.jpg \
   || xsetroot -solid darkblue
 
 

/etc/X11/xdm/Xresources控制登录期间使用的 X “资源”。在此上下文中,“资源” 是用户对字体和颜色等项目的偏好设置(在下面更详细地描述)。下面是一个代码片段,用于为登录小部件设置字体

 #if WIDTH > 800
 xlogin*greetFont: -adobe-helvetica-bold-o-normal--24-240-75-75-p-138-iso8859-1
 xlogin*font: -adobe-helvetica-medium-r-normal--18-180-75-75-p-103-iso8859-1
 xlogin*promptFont: -adobe-helvetica-bold-r-normal--18-180-75-75-p-103-iso8859-1
 xlogin*failFont: -adobe-helvetica-bold-r-normal--18-180-75-75-p-103-iso8859-1
 #else
 xlogin*greetFont: -adobe-helvetica-bold-o-normal--17-120-100-100-p-92-iso8859-1
 xlogin*font: -adobe-helvetica-medium-r-normal--12-120-75-75-p-69-iso8859-1
 xlogin*promptFont: -adobe-helvetica-bold-r-normal--12-120-75-75-p-69-iso8859-1
 xlogin*failFont: -adobe-helvetica-bold-o-normal--14-140-75-75-p-82-iso8859-1
 #endif

 

正如您所看到的,这使用了 helvetica 作为首选字体,具有不同的磅值大小和每英寸点数,具体取决于屏幕尺寸。这是可以自定义的,以满足个人需求。(有关理解 X 字体命名约定的更多信息,请参见下文。)各种其他方面也可以类似地配置。

/etc/X11/xdm/Xsession大致相当于 startxxinitrc。它将类似地为键盘等设置默认环境。并且还可以启动 KDEGNOME 以及其他 X 客户端程序。这是系统范围的配置文件。它还应检查用户主目录中的~/.xsession,以及可能的~/.Xclients,其中将包含用户首选的环境和启动程序,就像~/.xinitrc使用 startx 一样。同样,用户主目录中的文件可以由用户随时创建或修改,并且必须是可执行的 shell 脚本。

我们在此处不包含~/.xsession示例,因为它与上面的~/.xinitrc~/.Xclients示例非常相似。

我们只是简要地了解了主要的 xdm 配置文件。请务必阅读手册页,并查看本地安装的内容以获取更多信息。现在让我们看一下 gdmkdm。我们将仅突出显示显着差异,因为它们本质上提供相同的功能。


3.2.2. gdm

gdmGNOME 的默认显示管理器。gdm 是从头开始编写的,但功能类似于 xdm。主配置文件是gdm.conf,通常位于/etc/X11/gdm/gdm.conf。这与xdm-config看起来大不相同。注释用 “#” 表示,文件具有节,节标题用方括号括起来。启动 X 的命令在 “[servers]” 节中

 [servers]
 0=/usr/bin/X11/X
 #1=/usr/bin/X11/X

 

请注意,这可能设置了两个显示器,但第二个显示器被注释掉了。在此处添加任何其他 X 启动选项,例如 “-dpi 100”。登录屏幕和登录小部件在 “[greeter]” 节中配置。

启动客户端和程序由 “[daemon]” 节中的 “SessionDir” 语句确定。在我的安装中,这指向/etc/X11/gdm/Sessions/,其中包含几个简短的脚本。如果我查看我的Default脚本,它实际上执行/etc/X11/xdm/Xsession,而这反过来会执行~/.xsession,如果存在的话。因此,在最后阶段,gdm 的行为非常像 xdm

GNOME 包括 gdmconfig 实用程序来控制 gdm 行为的许多方面。


3.2.3. kdm

kdmKDE 的显示管理器。kdm 的主配置文件是kdmrc,通常安装为/etc/kde/kdm/kdmrc。与gdm.conf, kdmrc的情况一样,kdm 使用 “#” 表示注释,并且具有节,节标题也用类似的方括号括起来。kdm 配置也可以使用 kcontrol 实用程序进行编辑。

可见桌面在 “[Desktop*]” 节中配置,并通过 “Setup” 指令配置,该指令应指向类似于/usr/share/config/kdm/Xsetup下面是一个示例的文件。这将完成与 xdmXsetup_0相同的事情:即运行用户可能想要的任何程序,例如 xconsole

启动 X 服务器的命令是 “[General]” 中的 “Xservers” 指令。同样,这应该指向一个文件,例如/etc/X11/xdm/Xservers,并使用与 xdm 相同的语法

 :0 local /usr/X11R6/bin/X 

 

任何用于 X 服务器的命令行选项都放在此处。

登录小部件本身在 “[X-*-Greeter]” 节中配置。如果用户未指定任何内容,则使用编译的默认值。

KDE 包括 kdmdesktop 实用程序来控制 kdm 行为的某些方面,主要只是登录背景。


4. 更多 X 配置

在查看 X 服务器和客户端的各种配置机制之前,应该注意的是,像 KDE 这样的桌面环境的兴起部分原因是它们可以通过友好的 “用户友好” 的 GUI 控件来控制大部分用户交互配置。实际上,作为各自桌面一部分的兼容应用程序最好通过桌面的配置工具或应用程序自身的 GUI 配置方法进行配置。因此,例如,gtop,一个 GNOME 客户端应用程序,最好通过 GNOMEgtop 自己的菜单进行配置。但这并非适用于所有 X 应用程序。


4.1. X 资源

X 服务器可以为客户端程序存储各种配置值,以便在需要时随时可用。如果应用程序支持此功能,它将在每次调用该程序时将这些值用作默认值。这些被称为 “资源”,通常用于定义用户对每个应用程序的字体、颜色、屏幕位置(几何形状)和各种其他属性的偏好设置。这使得自定义应用程序变得容易。

资源被指定为文本字符串(例如 Netscape*blinkingEnabled: False),可以在 X 启动时从磁盘上的各种位置读取,甚至可以在命令行上交互式定义。程序组件以分层方式命名,层次结构中的每个对象都通过类名和实例名来标识。在层次结构的顶层是应用程序本身的类名和实例名。通常,应用程序的类名与程序名称相同,但首字母大写(例如 Vim 或 Emacs),尽管一些以字母 “X” 开头的程序也出于历史原因将第二个字母大写(例如 XTerm)。每个定义都将指定一个类(或实例),以及相应的资源和值。在此层次结构之下是构成应用程序可定义方面的各种属性。

传统上,大多数 X 程序都是以这种方式配置的。随着桌面环境的出现,它们通常有自己的配置机制,因此今天情况并非如此。

例如,假设我们喜欢使用蓝色背景运行 xterm。因此,如果我们从命令行运行它,我们将像这样运行它

 xterm -bg blue &

 

如果这是我们的偏好,那么将此偏好放在某个文件中的某个位置,并让系统使用我们的偏好会更容易。这样,每当我们启动 xterm 时,它都会使用我们的首选值,而我们不需要命令行选项(除非作为覆盖)。

基本的 X 资源语法表示为

 <program><binding><widget><binding><widget><...><resource>:<value>

 

在实际应用中,通常看起来像这样

 xterm*fontMenu*background: darkblue

 

它所做的应该很明显。定义中使用 “*” 称为 “松散绑定”,它充当通配符。这意味着小部件层次结构中可能存在间隙。例如

 xterm*background: darkblue

 

这也将为 xterm fontMenu 以及任何其他也具有 “background” 属性的 xterm 属性(例如窗口背景等)提供深蓝色背景,无论它们在小部件层次结构中的哪个位置。类似地

 *background: darkblue

 

这将为任何和所有支持它的程序定义背景 —— 而不仅仅是 xterm。使用 “.” 代替 “*” 会更精确,并且不允许层次结构中存在通配符间隙。此外,应用程序必须支持特定的窗口小部件属性。“Background” 是一个相当安全的选择,但许多应用程序将具有更多不那么明显的专用资源。最好查看本地文档(手册页等),或查看应用程序是否包含示例。例如,Netscape 通常附带一个Netscape.ad文件,其中包含可以自定义的大量资源定义。

X 资源通常存储在多个位置(见下文),并由 xrdb 命令处理(参见手册页)。


4.1.1. 应用程序默认值

存储首选应用程序资源的一种方法是通过 “app-defaults” 目录中以应用程序命名的文件。例如,在我的系统上,这些文件位于/usr/X11R6/lib/X11/app-defaults/,但这可能会因您的供应商选择的选项而异。此目录包含许多知名 X 应用程序的文件,例如 xtermxclockxcalcxload 等等。总而言之,在整体方案中,应用程序的数量相对较少。因此,并非所有应用程序都使用此方案。事实上,大多数应用程序都不使用此方案。

每个文件都将包含该应用程序的资源定义。X 服务器在启动期间自行加载这些文件。以下是来自XTerm-color:

 ! $XFree86$

 #include "XTerm"

 *VT100*colorMode: on
 *VT100*dynamicColors: on

 ! Uncomment this use color for underline attribute
 !*VT100*colorULMode: on
 !*VT100*underLine: off

 ! Uncomment this to use color for the bold attribute
 !*VT100*colorBDMode: on

 *VT100*color0: black
 *VT100*color1: red3
 *VT100*color2: green3
 *VT100*color3: yellow3
 *VT100*color4: blue3
 *VT100*color5: magenta3
 *VT100*color6: cyan3
 *VT100*color7: gray90
 *VT100*color8: gray30
 *VT100*color9: red
 *VT100*color10: green
 *VT100*color11: yellow
 *VT100*color12: blue
 *VT100*color13: magenta
 *VT100*color14: cyan
 *VT100*color15: white
 *VT100*colorUL: yellow
 *VT100*colorBD: white

 

的一个简短示例这主要是各种颜色定义。应用程序类名未明确声明,而是从文件名中假定的。因此,将每一行都视为以XTerm-color*开头。此外,请注意顶部的#include "XTerm"


4.1.2. Xdefaults

另一种读取资源首选项的常用方法是使用Xdefaults文件。或者,有时命名方案可能是Xresources。这可能作为系统范围的文件存在,例如/etc/X11/Xresources。当然,用户可以自由地在其主目录中创建个人版本,例如~/.Xdefaults。用户的版本将覆盖任何系统范围的设置,并在系统升级后保留。显然,这是放置您自己偏好设置的地方。

Xresources文件通过 xrdb 命令读入资源数据库。示例

 xrdb -merge ~/.Xresources

 

这可以在命令行上交互式完成,也可以放在脚本中并在 X 会话启动时自动运行。在系统范围的文件的情况下,这应该由供应商提供的启动脚本来处理。通常,此类脚本也会检查用户的主目录(请参阅上面的xinitrc示例)。因此,可能需要做的所有事情就是使用文本编辑器创建文件。

这是一个示例,说明可以使用.Xdefaults文件完成的许多事情中的极少数

 ! This is a comment ;-)

 #ifdef COLOR
 *customization: -color
 #endif

 !! Let's cast a wide net, for any app supporting these
 ! Blink instead of beeping
 *visualBell: True
 *scrollTtyOutput: False
 *scrollKey:       True

 ! See Netscape.ad for many settable resources
 Netscape*noAboutSplash:	True
 Netscape*documentFonts.sizeIncrement: 5
 Netscape*documentFonts.xResolution*iso-8859-1: 120
 Netscape*documentFonts.yResolution*iso-8859-1: 120
 netscape-navigator*geometry: 960x820+240+140

 emacs*Background: DarkBlue
 emacs*Foreground: Wheat
 emacs*pointerColor: Orchid
 emacs*cursorColor: Orchid
 emacs*bitmapIcon: on
 emacs*font: 10x20

 ! GVim colors, etc
 !! GTK versions of gvim will not use all these.
 Vim*useSchemes:         all
 Vim*sgiMode:            true
 Vim*useEnhancedFSB:     true
 Vim.foreground:         Black
 !Vim.background:        lightyellow2
 Vim*background:         white
 ! geometry: width x height
 Vim.geometry:  88x40
 Vim*font:  -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-15-*5
 Vim*menuBackground: yellow
 Vim*menuForeground: black

 rxvt*backspacekey: ^?
 rxvt*background: Black
 rxvt*foreground: wheat
 rxvt*cursorColor: Orchid
 rxvt*geometry: 100x18+40+300 
 rxvt*title: Linux
 rxvt*reverseVideo: false
 !rxvt*backgroundPixmap: ~/penguinitis.xpm
 rxvt*scrollBar: true
 rxvt*reverseWrap: true
 rxvt*font: -*-lucidatypewriter-medium-*-*-*-14-*-*-*-*-*-*-*
 rxvt*fullCursor: true
 rxvt*saveLines:  1500
 rxvt*menu: ~/rxvt.menu

 XTerm*saveLines:    1500
 ! Do not clear the screen after the program exits
 XTerm*VT100*titeInhibit: true

 ! Fix up xterm's keybindings 
 xterm*VT100.translations:	#override \
       <Key>BackSpace:    string(0x7F) \n\
       <Key>Insert:       string(0x1b) string("[2~")\n\
       <Key>Delete:       string(0x1b) string("[3~")\n\
       <Key>Home:         string(0x1b) string("[1~")\n\
       <Key>End:	     string(0x1b) string("[4~")\n\
       <Key>Page_Up:      string(0x1b) string("[5~")\n\
       <Key>Page_Down:    string(0x1b) string("[6~")\n\
       <KeyPress>Prior : scroll-back(1,page)\n\
       <KeyPress>Next : scroll-forw(1,page)

 ! Ghostview
 Ghostview*Font: *-helvetica-bold-r-normal--12-*-*-*-*-*-*
 Ghostview*BorderColor:  white
 Ghostview*Text*Font:    rk14
 Ghostview*Background:   #d9d9d9
 !Ghostview*Foreground:  white
 ghostview.form.pageview.page.background: white
 ghostview.form.pageview.page.foreground: black
 .ghostview.zoom.form.page.background: white
 .ghostview.zoom.form.page.foreground: black

 ! xscreensaver !
 ! Time out after 12 minutes, cycle mode after each 2
 xscreensaver.timeout: 12
 xscreensaver.cycle: 5
 ! Run low priority, and fade between modes
 xscreensaver.nice: 12
 xscreensaver.fadeSeconds: 2

 XFontsel.menu.options.showUnselectable: False
 
 

希望这些简单的示例能为您提供一些构建基础的想法。如果在更改后从命令行交互式使用 xrdb,则无需重启 X。效果是立竿见影的。

资源有时也可以作为命令行选项使用。请参阅下文。命令行选项将覆盖任何现有的资源定义。


4.2. xmodmap,键盘和鼠标

键盘和鼠标以及其他可能的输入设备在XF86Config“Monitor” 部分XF86Config-4中定义)。键盘布局是根据首选语言定义的

 Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "keyboard"
	Option      "XkbLayout"	"us"
 EndSection

 

这为我们提供了默认键盘布局。有效的布局标签在/usr/X11R6/lib/X11/xkb/symbols中列出。此外,setxkbmap 实用程序可用于交互式更改此设置。

X 是高度可定制的,我们可以修改键盘和鼠标指针映射以适应我们自己的偏好。执行此操作的实用程序是 xmodmap(参见手册页)。您不喜欢大写锁定键的位置?那就移动它 ;-)

xrdb 类似,xmodmap 可以从命令行运行。或者,首选设置可以存储在文件中。通常是~/.Xmodmap或类似的。如果您的 X 启动文件未解析此文件,请进行适当的编辑以使其解析(可能从~/.xinitrc~/.xsession).

您可以使用以下命令查看当前的键盘和鼠标映射:xmodmap -pk -pp |less。这将打印出所有活动的 “keycode” 值,以及相应的 “keysym” 值,以及 xmodmap 知道的任何 keysym 名称(例如 “BackSpace”)。并且还应该让您了解 xmodmap 如何理解键盘和鼠标事件。每个 keycode 有两个 keysym。第二个是 shift 值。XFree86 的 xev 实用程序可用于交互式转储有关按键和鼠标事件的大量信息。注意 “keycode” 值。这是您重新映射所需知道的。

xmodmap 通常用于进行小的键盘调整,例如正确的退格/删除映射。或者可以用于进行重大调整,例如用于国际映射。您只能重新映射键和鼠标事件 —— 您不能将宏分配给按键事件(您的窗口管理器或桌面可能具有此功能)。

关于 设置国际键盘的精彩讨论。此外,Google 搜索 将会找到许多创造性的示例。

手册页包含许多各种用法的简短示例。以下是一个假设的~/.Xmodmap可能看起来像这样的示例

 ! /home/hal/.Xmodmap, last change 10/03/01
 !
 ! Force backspace to 22 and Delete to 111
 keycode 22 = BackSpace
 keycode 111 = Delete
 !
 ! My keyboard handles right and left Alt differently. Make the 
 ! Right act like the Left to avoid digital gymnastics.
 keycode 63 = Alt_L
 keycode 113 = Meta_L
 !
 ! Hard-code the keypad to numeric values as if numlock is always on 
 ! since I never use it for anything else.
 keycode 79=7
 keycode 80=8
 keycode 81=9
 keycode 83=4
 keycode 84=5
 keycode 85=6
 keycode 87=1
 keycode 88=2
 keycode 89=3
 keycode 90=0
 keycode 91=period
 keycode 86 = plus
 ! deactivate Num_Lock key since we don't need it now.
 keycode 77 =
 !
 ! My capslock is next to tab. I hit it by mistake sometimes, 
 ! and don't use it anyway. So make capslock act like Tab.
 keycode 66 = Tab
 clear lock
 !
 ! Reverse mouse buttons for left-handed people
 pointer = 3 2 1

 

与许多 XFree86 文件一样,“!” 表示注释。另一种可能的用途是将那些令人讨厌的 “Windows” 键重新定义为有用的东西。希望这能让您了解可以做些什么来使键盘更适合我们。

说到Numlock键,X 通常会在启动时禁用它。无论您在 BIOS 中设置了什么,或者在 X 启动之前在 Linux 中设置了什么。因此,上面的技巧是一种方法。还有一个实用程序可用,要么是 numlockx,要么是 setnumlock,可以在 Internet 上找到,如果您的发行版不包含其中一个或另一个。这可以放在启动文件中以打开Numlock如果您愿意,可以自动打开。

窗口管理器和桌面环境也允许自定义键盘和鼠标(只要 X 正确识别)。这可能是配置某些自定义设置的更简单方法。


4.2.1. 特殊按键映射

XFree86 中传统上使用几种特殊按键映射。

Ctrl-Alt-退格键

将以有序的方式终止 X 服务器进程。这是一种快速、简单、合法的重启 X 的方法。请注意,它不会重启显示管理器(如果使用)—— 只是 X 本身。

Ctrl-Alt-Fn

其中n对应于有效的 TTY 号码(通常为 1–6)。这通常用于跳转到文本控制台登录,而 X 保持运行。要返回 X,请按 Alt-Fn。在这种情况下,n表示最后一个 TTY 加一(例如,如果有六个可用的 TTY,则为 Alt-F7)。

Ctrl-Alt-+Ctrl-Alt--

即小键盘上的加号和减号键。这将循环浏览任何现有的有效屏幕分辨率模式,例如 1024×768 → 600×800。请注意,实际屏幕尺寸是相同的 —— 只是视图和分辨率发生变化。对于大多数用途来说,并不是那么有用。您无法在不重启 X 的情况下永久更改屏幕分辨率。

您的窗口管理器、桌面环境或其他系统组件可能会捕获这些按键,并更改标准行为。此外,Ctrl-Alt-Delete 也可能被捕获。如果可用,这应该有序地关闭 X(和系统)。


4.2.2. 鼠标和指针

如前所述,Linux 和 Unix 大量使用三个鼠标按钮。如果鼠标只有两个按钮,则可以通过同时按下两个按钮来模拟第三个按钮(即中间按钮)。这是在XF86Config中设置为 “Emulate3Buttons” 指令的配置选项

 Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option      "Device" "/dev/mouse"
	Option      "Protocol" "PS/2"
	Option      "Emulate3Buttons" "on"
 EndSection

 

总而言之,第三个按钮非常方便,我个人建议使用一个。在滚轮鼠标上,如果按下 “滚轮”,则滚轮充当第三个按钮。许多标准滚轮鼠标似乎与 “IMPS/2” 协议选项一起工作。

具体来说,第三个按钮(中间按钮)几乎在所有 Linux 应用程序中都是 “粘贴” 按钮。复制和粘贴在 Linux 中的工作方式略有不同。左键是复制按钮。只需按住它,然后在文本上拖动。它会自动复制到 X “剪贴板”。然后,中间按钮将从那里粘贴。一个非常简单的过程。双击应复制单个单词,三击应复制文本的单行。如果由于某种原因,这不起作用,则要么是应用程序实现不佳,要么是某种错误。例如,某些旧版本的 Netscape 在这方面并不一致。要从键盘粘贴,应该是 shift+insert。

“拖放” 本身不受 X 的原生支持。但是,某些工具包和桌面环境实现了拖放。不应期望它与不兼容的应用程序一起使用(例如,KDE 中非 KDE 感知的应用程序)。


4.3. xset

xset 是另一个 XFree86 实用程序,用于设置用户首选项。xset 有点像万能工具,用于更改各种不相关的 X 服务器设置。这主要是配置XF86Config中定义的一些相同内容的命令行方法(但不是所有内容!)。

xset 的常见用法是打开或关闭 DPMS 并设置首选间隔,动态更改 FontPath 或重新读取它,控制键盘 LED,调整鼠标(或其他指针)移动速度,设置键盘 “自动重复”“重复” 速率,以及控制 X 的内置屏幕空白。当然,请参阅手册页以获取详细说明和其他 xset 用法。

同样,xset 可以从命令行交互式使用。但最常见的做法是将首选设置存储在启动配置文件之一中,例如.xinitrc.xsession。一个非常简单的例子

 # Turn off screen blanking
 xset s off
 
 # Enable DPMS energy saving
 xset +dpms
 
 # Tweak the rodent
 xset m 30/10 4
 
 # Speed up keyboard
 xset r rate 200 40

 

您的桌面可能有一个用于 xset 的 GUI 前端。


5. 字体和颜色

X 中理解字体和颜色可能比在其他平台上更复杂。


5.1. 字体揭秘

X 了解各种字体类型,包括位图、Type 1 和从 v4.x 开始的 TrueType。X 服务器可以自行处理字体,有时此职责会委托给字体服务器(有多个字体服务器)。xfs (X Font Server) 是 Linux 上最常用的字体服务器。

字体服务器不是必需的,因为 X 可以自行处理大多数字体渲染。字体服务器传统上用于为网络上的多台主机提供字体服务,但有时也用于提供增强的功能。此外,字体服务器可以通过将字体渲染卸载到单独的进程来适度提高性能。

X 根据 “FontPath” 中的字体来了解字体。这最初在XF86Config中设置。如果 X 服务器自行处理字体职责(即没有字体服务器),这将是包含字体文件的目录列表,例如

 FontPath        "/usr/X11R6/lib/X11/fonts/misc:unscaled"
 FontPath        "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
 FontPath        "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
 FontPath        "/usr/X11R6/lib/X11/fonts/Type1"
 FontPath        "/usr/X11R6/lib/X11/fonts/misc"
 FontPath        "/usr/X11R6/lib/X11/fonts/100dpi"
 FontPath        "/usr/X11R6/lib/X11/fonts/75dpi"

 

如果正在使用字体服务器,则 “FontPath” 将指向字体服务器正在服务的套接字(这只是一个可能的示例)

 FontPath "unix/:7101"

 

在后一种情况下,可用的实际字体目录将使用字体服务器进行配置(请参阅本地文档),该服务器将使用与XF86Config.

所示类似的目录类型方案。一旦安装了合适的字体,就必须 “准备” 它们。对于大多数字体,这意味着在字体所在的目录中(以 root 身份)运行 mkfontdir 实用程序(参见手册页)。Type 1 和 TrueType 需要额外的步骤(见下文)。您的供应商已为您发行版中包含的任何字体执行此操作。因此,这只需要为您添加的字体完成。为了使新添加的字体对 X 可见,您需要运行适当的 xset 命令来修改现有的 FontPath 或重新读取它(参见手册页)。或者,重新初始化您的字体服务器。

示例:准备字体,并在添加新字体后重新初始化字体服务器

 su 
 <password>
 mkfontdir /usr/X11R6/lib/X11/fonts/my_new_fonts/
 /etc/init.d/xfs restart

 

在较新的发行版上,第一个命令可能不是必需的(因为在某些情况下,它是由 init 脚本完成的)。如果这是一个新目录,则需要修改字体服务器配置。示例:在没有字体服务器的情况下重新初始化

 su 
 <password>
 mkfontdir /usr/X11R6/lib/X11/fonts/my_new_fonts/
 xset +fp /usr/X11R6/lib/X11/fonts/my_new_fonts/
 xset fp rehash

 

如果该目录已是 FontPath 的一部分,则 xset +fp 将不是必需的。

xlsfonts | less 可用于列出 X 及其客户端已知且因此可用的字体。运行 xlsfonts | less,您还可以了解 X 理解的字体定义。字体资源被非常明确地指定,乍一看可能很复杂。X 逻辑字体描述 (“XLFD”) 是任何给定字体的完整描述。XLFD 看起来像

 -adobe-helvetica-medium-r-normal-*-*-120-*-*-p-*-iso10646-1

 

其中从左到右的每个字段是

fndry- 字体铸造厂,制作字体的公司或个人。

fmly- 字体族,字体的常用昵称

wght- 字体粗细(粗体、中等粗细等)

slant- 字体倾斜度(斜体、倾斜、罗马体(正常)、等)

sWdth- 字体宽度(正常、压缩、扩展等)

adstyl- 附加样式(无衬线、衬线等)

pxlsz- 像素大小,字符的垂直像素数

ptSz- 文本的近似磅值大小(类似于 pxlsz)

resx- 水平分辨率,以 dpi 为单位

resy- 垂直分辨率,以 dpi 为单位

spc- 间距,显然仅在 Schumacher 字体中才有用

avgWidth- 字体的平均字符宽度

rgstry- 列出字体的已识别注册表

encdng- 国籍编码

“*” 充当通配符。实际上,如果未指定每个字段,X 服务器将采用它在 FontPath 中找到的第一个匹配项。这就是为什么最好按首选字体对 FontPath 进行排序的原因,因为某些程序会故意 “松散地” 指定字体,以便您的系统具有一定的自由裁量权。

程序 xfontsel (X 字体选择器) 可能很有用。现在尝试启动它。您最初会在主窗口中看不到任何有用的内容,但尝试按住左键fndry按钮。如果您的所有字体都井然有序,您将看到一个选择菜单,例如adobeb&hbitstream等等。选择一个,例如b&h你会注意到下方窗口中的字体变成了可识别的内容。这是使用此程序选择字体的方式;从最左侧开始,这是最通用的选择,然后向右移动,选择更具体的选项。例如,在选择字体厂商之前,选择最右端的选项意义不大,因为这些选项通常按照它们之间的依赖关系排序。

当您从fmly选择时,您会看到大多数选项都灰显了,只剩下三个选项。这意味着这三个是该字体厂商制作的仅有的字体系列。有些系列出现在多个字体厂商下,例如,AdobeBitstream 都制作了 Courier 字体的变体。现在您可以选择wght,依此类推。在您深入到足够程度后,您将范围缩小到您想要的字体。您不一定需要填写所有选项才能选择单个字体,您的系统上没有那么多字体!您未选择的选项将由*表示,表明该位置可以使用任何选项,并给予 X 一定的自由度。

当您对字体选择感到满意时,点击选择按钮,您的选择将放入 X 剪贴板,准备粘贴到您的文档或您正在处理的任何内容中。例如,打开一个 xterm 窗口并键入类似这样的内容xterm -font后跟一个左引号。然后指向屏幕上的那个位置,并单击鼠标中键(如果您没有鼠标中键,则同时单击鼠标左右键)。这将从剪贴板粘贴选择,应该是您刚刚选择的字体。然后输入右引号,并点击Enter。例如,一个指定了 Courier 字体的漂亮的 xterm 大窗口看起来像这样xterm -font "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*".

如果您找到了首选字体,可以通过将字体定义放置在相应的配置文件中来永久使用它(请参阅上文)。

请注意,您还可以使用命令行选项 -pattern(后跟带引号的字体规范,如上所述)来限制您希望 xfontsel 显示的字体数量。

xfd 实用程序也有助于检查单个字体。如果使用类似 xfd -fn fixed 的命令行启动它,它将向您显示该字体的完整字符集。

KDEGNOME 都有它们自己的实用程序,这些实用程序没有那么晦涩难懂 ;-)


5.1.1. Type 1 和 TrueType 字体

考虑到您能找到这种字体的唯一地方,大多数情况下是在 X Window 系统本身中使用,因此 XFree86 提供的字体对我们许多人来说用途有限。不幸的是,许多媒体发烧友、网页设计师和字体爱好者在依赖其他格式的操作系统中工作。而且,似乎某些发行版也不太注重充分利用默认字体。

Type 1 字体,最常与 PostScript 文档格式结合使用,是 Unix 和 Linux 环境中的传统标准。您应该已经安装了一个相当不错的入门级选择。或者,可以在互联网上轻松找到更多免费字体,可以试试 ftp://ftp.cdrom.com/pub/os2/fonts/ 作为起点。 Type 1 是可缩放字体,并且具有许多与更知名的 TrueType 字体相同的优点。如果您没有安装好的 TrueType 字体选择,那么 Type 1 是您大多数 GUI 应用程序所需要的。但是,同样,这在其他平台上不是标准,并且在查看使用 "其他平台" 设计的文档(例如,网页)时可能会出现问题。

TrueType 字体最初由 Apple 开发,后来由 Microsoft 获得许可。因此,从非 Unix 平台迁移过来的人们已经熟悉这些高质量字体。不幸的是,在合适的许可下,高质量的 TrueType 字体不多,因此 Linux 发行版中包含的字体也不多。而且,已包含的字体通常质量也不高。同样不幸的是,TrueType 已成为 Web 和其他场合的某种标准,没有好的 TrueType 字体可能会成为一个缺点。 XFree86 似乎也比 Type1 更好地渲染 TrueType。

这是坏消息。好消息是,任何 Windows 版本或任何 Windows 应用程序中包含的任何 TrueType 字体都应该在 Linux 上工作。虽然您需要采取一些额外的步骤来集成它们。这尤其有助于网页浏览,因为 X 的位图字体无法很好地缩放。

我们将不在此处详细介绍安装和配置这些字体,因为其他文档中已深入探讨了这一点。有关常规字体信息和 Type 1 提示,请参阅 字体 HOWTO 。有关各种与 X 相关的字体提示,尤其是 TrueType,请参阅 字体去丑化迷你 HOWTO字体去丑化迷你 HOWTO


5.2. 颜色

让我们回到终端窗口并尝试一些操作。使用类似以下的命令行打开一个 xterm

 
 xterm -fg DarkSteelBlue1 -bg red3 &
 
 

哎哟!虽然这可能不太漂亮,而且您可能不会在其中完成很多最好的工作,但它演示了 X 配置的一个有趣方面 -- 颜色名称。虽然不是特别精确,但这是一种记住各种颜色的好方法。请注意,颜色名称永远不区分大小写。

X 服务器实际上将颜色值处理为十六进制的红-绿-蓝 (RGB) 颜色表示法。这在十六进制中看起来像 "#0aff0a" 。不太容易记住。但是 X 提供了一种更易于记忆的有效颜色定义方法。这些定义存储在文本表中,通常位于/usr/X11R6/lib/X11/rgb.txt,并在XF86Config"Files" 部分中定义。

如果您有兴趣,请使用文本编辑器查看一下。其中定义了许多许多色调。例如,我在我的文件中数出了八十三种蓝色阴影。简短片段

 176 226 255             LightSkyBlue1
 164 211 238             LightSkyBlue2
 141 182 205             LightSkyBlue3
  96 123 139             LightSkyBlue4
 202 225 255             LightSteelBlue1
 188 210 238             LightSteelBlue2
 162 181 205             LightSteelBlue3
 110 123 139             LightSteelBlue4
 191 239 255             LightBlue1
 178 223 238             LightBlue2
 154 192 205             LightBlue3
 104 131 139             LightBlue4

 

如果您需要,可以自定义此文件,但这对于我们大多数人来说很少需要。但拥有它很重要,因为某些应用程序依赖于它。

桌面环境将具有用于选择颜色的 GUI 实用程序。


6. 窗口管理器和桌面

我们将不深入探讨配置窗口管理器和桌面环境。要在一个文档中涵盖所有内容实在太多了。重要的是要认识到两者并非相同。有许多许多可用的窗口管理器。


6.1. 窗口管理器

窗口管理器是高度可配置的。用户交互的许多方面可以通过窗口管理器来控制。

一些最流行的窗口管理器

aewm: http://www.red-bean.com/~decklin/aewm/

AfterStep: http://www.afterstep.org/

BlackBox: http://sourceforge.net/projects/blackboxwm

Enlightenment: http://www.enlightenment.org/pages/main.html

Fluxbox: http://fluxbox.sourceforge.net/

fvwm: http://www.fvwm.org/

IceWM: http://www.icewm.org/

olwm (OpenLook 窗口管理器): http://www.plig.org/xwinman/olvwm.html

Sawmill: http://sawmill.sourceforge.net/

WindowMaker: http://www.windowmaker.org/

XFce: http://xfce.org/

还有许多许多不太知名的窗口管理器。 http://www.plig.org/xwinman/ 提供了窗口管理器和相关信息的更新列表。始终还有 freshmeat

GNOMEKDE 都有其默认窗口管理器,但也支持其他兼容的窗口管理器。您的发行版可能至少包含几个。如果您还没有喜欢的窗口管理器,请全部尝试一下。您的发行版可能还具有在窗口管理器(和桌面环境)之间动态切换的方法。


6.2. 桌面环境

桌面环境并不是真正的新事物,但随着两个大名鼎鼎的名称: KDEGNOME 的出现,它们的受欢迎程度有所提高。在某种程度上,桌面环境的功能与窗口管理器的功能重叠。它们都可以负责根窗口背景、根窗口菜单、图标、任务栏等。一般来说,如果桌面环境正在运行,它将控制这些方面。这是它们背后的主要思想 -- 将各种组件集成到一个有凝聚力、一致的整体中。桌面环境还添加了一些简单的窗口管理器无法提供的互操作性和易用性功能。

哦,另一点:桌面环境还试图尽可能多地完成 X 会话配置。它们的任何兼容客户端都很可能由桌面配置,或者具有符合桌面风格的自身配置。至少部分原因是避免我们在上述章节中看到的看似混乱的文本文件配置,并使用户的生活更轻松一些。

这种附加功能存在权衡,那就是它需要内存和系统资源来管理所有这些。如果您有足够的内存和快速的计算机,这不是问题。但是在内存不足的情况下,这可能会导致速度减慢(请参阅下面的 性能部分 )。对于 KDEGNOME 来说,64M 内存可能处于临界值。

那么您需要桌面环境吗?这取决于用户。它们当然不是运行 X 所必需的,但确实添加了许多用户想要或期望在 GUI 中看到的功能。哪个更好?啊,但这取决于您自己决定!

KDE 的出现时间早于 GNOME ,有些人可能会说它更成熟一些。 KDE 基于 QT 小部件工具包。以下是 KDE 主页 的引述

KDE 是一个功能强大的 Unix 工作站开源图形桌面环境。它将易用性、现代功能和出色的图形设计与 Unix 操作系统卓越的技术相结合。

KDE 是一个成熟的桌面套件,为不断增长的 Unix 工作站应用程序数量提供了坚实的基础。 KDE 为 Unix 开发了一个高质量的开发框架,可以快速高效地创建应用程序。

GNOME 基于 GTK+ 工具包。以下是 GNOME 主页 的引述

GNOME 代表 GNU 网络对象模型环境。 GNOME 项目旨在构建一个完全基于自由软件的完整、用户友好的桌面。 GNOME 是 GNU 项目的一部分,GNOME 是开源 (tm) 运动的一部分。桌面将由共享一致外观和感觉的小实用程序和更大的应用程序组成。 GNOME 使用 GTK+ 作为所有符合 GNOME 标准的应用程序的 GUI 工具包。

XFce 是一个更轻量级、功能较少的桌面环境,不如其他桌面环境那样受到关注。 XFce 也基于 GTK+ 工具包。以下是 XFce 主页 的引述

XFce 项目最初启动是因为我需要一个简单、轻便且高效的 Linux 系统环境。

我认为桌面环境应该旨在提高用户生产力。因此,目标是将大部分系统资源留给应用程序,而不是用桌面环境消耗所有内存和 CPU 使用率。

所有这些都有自己广泛的文档。如果您在系统上找不到所需内容,请查看各自的主页。


7. X 和命令行

如果没有命令行界面,类 Unix 操作系统会是什么样子?命令行可能很有用,并且在 X 中很容易获得。事实上,对于许多人来说,命令行是他们 X 工作环境不可或缺的一部分。

任何 X 程序都可以直接从命令行启动,只需在 xterm 或其他终端窗口的 shell 提示符下键入程序名称即可。大多数应用程序都将具有非常丰富的命令行 "选项" 集,例如背景颜色、字体、几何形状(屏幕位置)等。命令行选项会覆盖编译到程序中的默认值或其他系统启用的 "资源"

许多传统的 X 程序将对命令行选项使用相同的基本名称。所有使用 MIT X 工具包 Intrinsics (Xt) 编写的应用程序(例如 XFree86 随附的应用程序)都会自动接受以下选项。一些非 Xt 应用程序也使用这些选项或类似选项。例如, "geometry" 是一个几乎普遍接受的选项。

-display [主机]:显示器[.屏幕]

此选项指定要使用的 X 服务器显示器。这通常用于应用程序在一个系统上运行,并在另一个系统上显示的情况。应用程序需要知道在哪里显示。有时也可以通过设置 "$DISPLAY" 变量来实现,该变量使用相同的语法。

-geometry 几何形状

窗口的初始大小和位置,格式如下宽度 x 高度 +水平偏移量 +垂直偏移量+水平偏移量 -垂直偏移量。请注意,如果您输入负的水平或垂直偏移量,窗口将从屏幕的右侧或底部向后计数放置,而不是从左上角开始。

-font 字体名称

用于在窗口中显示文本的字体(请参阅下面的字体部分)。

-bg 颜色

用于窗口背景的颜色。通常这是一个 "颜色名称" (请参阅下文)。

-fg 颜色

用于窗口前景色(即字体等)的颜色。

-name 资源名称

用于指定将在此名称下找到此应用程序的资源(例如,如在.Xdefaults中指定的)。这对于区分同一应用程序的调用非常有用。例如,可以为两个 xterm "命名" 不同的名称,以便它们可以根据资源数据库中指定的名称继承不同的资源。

-title 字符串

这是用于窗口显示的标题,通常由窗口管理器用于在窗口顶部放置描述性标题。不要与 "-name" 选项混淆。

-iconic

以图标化状态打开窗口。

-xrm 资源字符串

此选项指定资源名称和值,以覆盖可能已设置的任何默认值(即通过.Xresources或类似文件)。也适用于设置没有显式命令行选项的 X 资源。例如,命令行 "xterm -xrm xterm*background: blue &" 在功能上与 "xterm -bg blue &" 相同。

这些是最值得注意的选项。还有其他选项。许多程序将具有自己的特定于应用程序的附加选项。如今,许多较新的应用程序不一定遵循 Xt 标准,并且将使用自己的选项或其各自工具包提供的选项。如果没有其他参考,手册页是命令语法的良好参考,并且在这里对您有帮助。或者,应用程序将具有 "--usage""--help" 命令行开关来列出可用选项

 $ gnome-terminal --usage
 Usage: gnome-terminal [-?] [--disable-sound] [--enable-sound]
   [--espeaker=HOSTNAME:PORT] [--version] [--usage] [--gdk-debug=FLAGS]
   [--gdk-no-debug=FLAGS] [--display=DISPLAY] [--sync] [--no-xshm]
   [--name=NAME] [--class=CLASS] [--gxid_host=HOST] [--gxid_port=PORT]
   [--xim-preedit=STYLE] [--xim-status=STYLE] [--gtk-debug=FLAGS]
   [--gtk-no-debug=FLAGS] [--g-fatal-warnings] [--gtk-module=MODULE]
   [--disable-crash-dialog] [--sm-client-id=ID] [--sm-config-prefix=PREFIX]
   [--sm-disable] [--tclass=TCLASS] [--font=FONT] [--nologin] [--login]
   [--geometry=GEOMETRY] [-e COMMAND] [-x COMMAND] [--foreground=COLOR]
   [--background=COLOR] [--solid] [--pixmap=PIXMAP] [--bgscroll]
   [--bgnoscroll] [--shaded] [--noshaded] [--transparent] [--utmp]
   [--noutmp] [--wtmp] [--nowtmp] [--lastlog] [--nolastlog] [-t TITLE]
   [--icon=ICON] [--termname=TERMNAME] [--start-factory-server]
   [--use-factory]

 


7.1. xterm 和朋友们

迟早,我们大多数人出于某种原因需要访问 "命令行" 。对于某些人来说,这甚至可能是 X 中常用的工作方式。除了能够从命令提示符启动 X 应用程序外,还有大量程序在 Linux 的 "文本模式" 下运行。

这可以通过 "终端模拟器" (例如 xterm )来实现。 Microsoft 最接近的对应物是所谓的 DOS 框,相比之下,DOS 框简直是小菜一碟。 Linux 终端支持颜色、完整的鼠标复制/粘贴(以及某些滚轮鼠标)、伪透明和像素图背景、滚动条、菜单以及通常大量其他功能。虽然 xterm 是最著名的此类终端模拟器,但还有许多类似的程序。列举几个: Etermrxvtatermkonsole ( KDE ) 和 gnome-terminal

在典型用法中,当打开终端模拟器窗口时,会为用户启动一个 shell 以进行交互。基本上所有 Linux 的默认 shell 都是 bash shell。因此,当一切都说完做完后,用户同时与 X 、终端和 shell 进行交互。每个都可能具有自己的影响。例如,击键如何处理,因为它们从硬件移动到 X 服务器,然后移动到终端,再移动到 shell,最后回显给用户。

快速简便的终端配置是通过 "$TERM" 变量完成的,该变量通常在用户的 shell 配置文件之一中设置。或者终端本身将具有编译到程序中的默认值。此变量的默认值通常是 "xterm"

 $ echo $TERM
 xterm

 

通常这已经足够了,因为您的供应商已经以合理的方式设置了它。 "$TERM" 变量实际上是对 "termcap" 数据库(man termcap)中的条目的引用,该数据库通常安装为/etc/termcap。除非您正在做一些非常不寻常的事情,否则您可能不需要更改此设置。可以使用 stty 命令完成一些额外的终端配置(请参阅手册页)。终端配置实际上超出了本文档的范围。

终端应用程序本身(例如 xterm )也将具有各种配置选项。对于那些支持此功能的应用程序,永久设置最好存储在~/.Xdefaults或类似文件中。一般来说,具有 GUI 配置的应用程序(例如 gnome-terminal )将通过其自己的菜单驱动配置进行配置。

此外,您还在与 shell 进行交互,这也会产生自己的影响,尤其是在 shell 提示符下如何处理击键方面。对于 bash ,可以在~/.inputrc中进行调整。同样,这超出了本文档的范围,但请查看本地或在线 bash (或其他 shell)参考资料。

xterm 这样的终端模拟器需要等宽字体。因此,请忘记 TrueType 或 Type 1 字体。


8. X 网络和安全

如前所述, X 本质上是一种具有图形显示功能的网络协议。这带来了一些有趣的用法可能性。并且还意味着存在固有的安全考虑,就像任何网络环境一样。如果您曾经连接到互联网,那么您就处于一个非常庞大、充满敌意的网络之中 ;-)

X 客户端通过各种网络协议(包括 TCP/IP)连接到 X 服务器。即使只是本地连接也是如此。这里的可能用途是在一台计算机上运行应用程序,并在另一台计算机上显示它。或者,实际登录到远程系统,并使其显示到您的本地屏幕,客户端应用程序使用远程系统的 CPU 和 RAM。

在没有任何预防措施的情况下,这可能会使您完全暴露于各种类型的恶作剧和滥用。例如,任何登录到您系统的人都可以访问您的 "显示器" ,这意味着如果他们愿意,他们可以看到您正在做什么。值得庆幸的是,大多数最新的 Linux 版本都启用了一些默认的安全预防措施。但最好自己确保您受到保护。

远程 X 应用程序迷你 HOWTO 很好地涵盖了 X 网络和安全性,因此我们无需在此处尝试重新讨论它。推荐阅读。请参阅下面附录的 链接部分 中的其他参考资料。

一些推荐的预防措施


9. 性能考虑因素

正如已经讨论过的,我们所说的 X 实际上是各种组件的融合:X 服务器、窗口管理器、桌面等。在 MS Windows 中,GUI 桌面与操作系统本身紧密集成。 Linux 中并非如此,Linux 遵循 Unix 的传统,即组合各种独立的组件来实现某些最终结果。因此,我们对每个组件及其相关的配置和实现都有选择。简而言之,非常灵活。这就是您的用武之地。您可以尝试各种可能性,并决定哪种可能性为您带来最大的性价比。

在低端硬件上,这为我们提供了很大的自由度来降低对可用系统资源的需求。这很好,因为如果给它机会, X 可能会非常贪婪地占用系统资源。如果您最近安装了新的 Linux 发行版,您可能已经获得了具有许多花哨功能的默认桌面。并且某些功能可能需要相当多的内存和 CPU 才能达到合理的性能水平。如果您有足够的马力,这应该不是问题。

人们经常说 Linux 在相对较少的内存下也能很好地运行。这在一定程度上是正确的。但这并不意味着每个可能的配置都将在低内存下运行。因此,如果您想使用内存密集型应用程序,那么您将必须拥有足够的内存。或者您将不得不做出牺牲以达到令人满意的性能水平。在 16 兆内存甚至更少的内存下以合理的性能运行 X 是完全可能的,但您将不得不忍受一些真正的限制。

让我们看一下一些组件以及降低系统资源需求的方法,以防您处于硬件低端,或者性能不符合预期。


9.1. 硬件

  • 毫不奇怪,但如果想要快速又花哨的系统,那么使用快速显卡、快速硬盘驱动器和大量内存将获得最佳的整体系统性能。

  • 显卡当然是必需的,并且 X 服务器的视频性能与显卡的芯片组以及相应的 XFree86 驱动程序相关联。仅仅因为给定的显卡受 XFree86 支持并不一定意味着它与其他显卡一样优化!它也可能在较低的颜色深度下表现更好(请参阅下文)。访问 xfree86.org 查看是否有任何关于您的显卡在性能或其他问题方面的说明可能是值得的。

  • 您可以尝试其他版本的 XFree86。目前,v4.2 刚刚发布。由于 v4.x 的增量开发方式,某些显卡可能仍然在 3.3.6 下表现更好。如果您正在使用 x4.x 并且性能不佳,请确保您正在使用最新的可用版本。


9.2. 内存

内存越多越好。 X 将进行大量缓存以帮助提高性能。但是缓存需要内存,如果一开始就没有多少内存,那么我们将需要降低内存需求。对于那些内存不足或性能有问题的人的一些提示

  • 使用 free 命令确保所有内存和交换空间都被识别。

  • 确保您没有其他系统服务占用大量内存或 CPU。使用 topps 查看正在运行的进程,并禁用您可以禁用的任何进程以释放内存和 CPU。同样,默认安装可能运行着许多您实际上不需要的东西。

  • 确保您有足够的交换空间。对于低内存甚至适度内存的情况,交换空间更为重要。一般的经验法则是交换空间是物理内存的两倍。对于低内存,这还不够。尝试实际内存的四倍。或更多。如果您无法创建更多交换分区,请参阅 mkswap 手册页,了解如何创建交换文件。持续的磁盘搅动是交换空间不足的症状,并且系统速度会因此而减慢,有时会非常严重。或者,这可能是内核 VM 系统表现不佳的症状(在这种情况下尝试另一个内核)。

  • 驱动器性能对于交换空间性能至关重要。确保您的驱动器启用了 DMA(如果驱动器支持),并且在其他方面进行了调整并达到最佳性能。请参阅 hdparm 手册页。慢速驱动器 + 慢速显卡 + 低内存 = 慢速系统。

  • 如果内存紧张,请不要使用 KDEGNOME 。这两者都需要大量内存,但仅仅运行 X 并不需要它们。将这些视为可用性增强功能。 32M 可能不够。 64M 可能还不错,具体取决于正在使用的其他应用程序和其他变量。 128M 应该在大多数情况下都足够了。 256M 或更多会更舒适。像 Nautilusgmc 这样的文件管理器也可能很消耗内存。

  • 使用轻量级窗口管理器。 WindowMakerBlackBoxIceWMfvwm (及其变体)、 XFce 都以在低内存下表现良好而闻名。肯定还有其他窗口管理器。尝试一下。 fvwm 通常被认为是其中最轻量级的。

    即使没有 KDEGNOME ,仍然可以拥有非常漂亮的桌面。事实上,即使 KDEGNOME 本身没有运行,大多数 KDEGNOME 应用程序仍然可以使用(假设安装了正确的库)。

  • 不要使用花哨的主题或背景。简单朴素更省资源。使用纯色背景。避免将像素图或渐变用于任何类型的背景,包括菜单、标题栏等。

  • 使用较小的屏幕尺寸和颜色深度。 800x600x16 不会像更高的值那样给 X 带来压力,并且更省系统资源。虽然首选 ColorDepth 为 24,但您可能不会注意到 16 与大多数应用程序之间的差异。

  • 某些应用程序比其他应用程序需要更多的内存。一些值得注意的内存占用大户是 NetscapeMozilla 、办公套件和 GimpNetscapeMozilla 更快(但不如它漂亮)。 Netscape-NavigatorNetscape-Communicator 使用更少的内存。在不使用这些应用程序时关闭它们。尽可能使用文本浏览器,例如 lynxw3m ,例如阅读本地安装的 HTML 文档。速度更快,并且需要的内存更少。

  • 此外,对于邮件( muttpine )和新闻( slrntrn ),请使用基于文本的客户端。同样,速度更快,使用的内存更少,而且这些毕竟都是基于文本的核心协议。

  • rxvtxtermkonsolegnome-terminal 使用更少的内存。

  • 如果您长时间(如几天或几周)运行 X 会话,请偶尔重启 X 以释放用作缓存的内存。

  • 禁用 "后备存储""保存下层窗口内容" 以减少内存使用(但会降低性能)。还要检查窗口管理器的设置。查看XF86Config"Modules" 部分中加载了哪些模块。您的安装可能启用了许多不必要的模块,或者您无法利用的模块(例如 "v4l" ,又名 "Video4Linux" )。

  • 字体服务器可以通过将字体渲染卸载到字体服务器,同时释放 X 服务器来做其他事情,从而略微提高性能。但是,字体服务器也将使用少量额外的内存。因此,您可以尝试两种方式,看看是否有区别。

  • 最后,现在 RAM 很便宜。买一些吧 ;-) 也买一个新的驱动器。

  • RAM 对于 X 来说仍然太低?查看 tinyXhttp://www.superant.com/smalllinux/tinyX01.html 。据报道,它可以在低至 4 兆内存下运行。


9.3. 基于网络的 X

X 并非特别适合网络环境。换句话说,它是一个带宽杀手。这在 LAN 环境中应该不是问题,但在尝试通过互联网使用 X 时可能会成为问题。

  • 低带宽 X 代理 lbxproxy 利用各种优化来提高低带宽或高延迟情况下的性能。请参阅手册页。

  • VNC(虚拟网络计算)具有与 X 相同的优点,可以在远程系统上显示应用程序,但更适合网络环境。您的 Linux 安装应该同时提供 VNC 客户端和服务器软件包。


9.4. 其他提示

其他提高性能的技巧

  • 使用 xset 加快键盘速度。即使系统实际上并没有更快,这也会使系统感觉更灵敏。对我来说,默认设置总是显得迟缓。

  • 使用 renice X 命令来赋予它更高的优先级。其他平台赋予 GUI 高调度优先级以获得更好的响应速度。但这会以牺牲其他进程的性能为代价。Linux 是一张白板。你可以将字体服务器(如果正在使用)以及关键的 KDEGNOME 进程也包括进来。

     nice -n -10 X :0
    
     

    这在大部分时间都处于空闲状态的系统上不会有太大作用。

    这对 startx 来说效果不佳,因为 X 以 root 用户身份运行,而你不是 root 用户,对吧?因此,你必须使用类似 sudo 的命令才能自动完成此操作。


10. 附录

10.1. 术语和用法

您应该熟悉一些基本概念和术语。这些术语将出现在这里、手册页以及其他帮助文件和文档中。

  • "X 服务器"是与您的显卡和其他系统硬件交互的底层驱动软件,并管理"显示"和连接到"显示"的各种组件(键盘、鼠标等)。当然,它也处理来自客户端的请求。不同的芯片组有不同的 X 服务器。

    X 服务器以以下形式引用:

    主机名.域名:显示编号.屏幕编号

    一个例子如下:my_computer:0.0

    如果省略主机名(和域名),则假定为本地主机。"主机"可以是远程主机。如果省略"屏幕",则假定为"0"(第一个屏幕)。在最短的形式中,X 服务器通常仅表示为":0",这将是第一个本地"显示"X 支持多个"显示"多个"屏幕"

    "屏幕""显示"在与 X 服务器相关的上下文中具有特殊的含义,除了它们更常见的用法之外。

  • 当调用 X 时,X 服务器将初始化一个或多个"显示"。是的,X 可以有多个可用的"显示"(尽管对于普通用户来说,这不是常见的配置)。每个"显示"都是"X"的一个独立实例。"显示"不仅包括明显的视频组件,还包括键盘、鼠标和其他输入类型组件。用户一次只能通过同一键盘和监视器访问一个显示"显示"可以位于本地,也可以位于网络主机"某处",或者两者兼而有之。如果多个"显示"可用,则用户可以在登录时选择他想要的显示。每个"显示"都可以有其自己独特的配置(例如分辨率)。但同样,最典型的配置只是一个"显示"和一个"屏幕",这也是我们大多数人使用 X 的方式。

  • 在引用 X 服务器时,"屏幕"是指您观看 X 的主要视频输出。并且可以有多个"屏幕",就像您可以有多个"显示"一样。例如,在"多头显示器"中使用额外的"屏幕"。事实上,您甚至可以有多台计算机从单个 X 服务器运行。这超出了本文档的范围,但您应该意识到这种程度的灵活性,因为它是 X 协议的重要组成部分。

  • "桌面"在不同的上下文中可能意味着不同的事物。通常,"桌面"意味着更恰当地称为"桌面环境"的东西。这方面的典型例子是 KDEGNOME 以及不太知名的 CDE,它们是高级应用程序,控制着用户与 X 会话交互的大部分方式。它们提供一致的外观和感觉,以及一致的配置,并捆绑了自己的一套用于常见任务的实用程序。

    "桌面"有时也只是指可查看的屏幕区域。这更像是 MS Windows 的含义。但是,X 环境能够拥有多个虚拟"桌面",可以根据需要进行切换。这有助于组织不同的任务。每个"桌面"都可以有其自己特定的窗口和客户端。现在我拥有七个 WindowMaker 桌面(WindowMaker 称它们为 "工作区"),其中一个桌面我专门用于编写本文档。目前,这个"桌面"有十三个独特的窗口(手册页、浏览器窗口、时钟、gvim、xterms 等)。

  • "客户端"是任何连接到 X 服务器的程序,并且需要 X 服务器来完成某些任务(例如,显示自身)。通常,这些程序显示在它们自己的"窗口"中,但并非总是如此。例如,如果我使用CTRL-N打开一个新的 Mozilla 窗口,这是一个 X 客户端,但有两个窗口。如果我运行一个命令行 X 实用程序(如 xev)来查看键盘和鼠标事件,它会在 xterm 的窗口中运行,因此没有自己的窗口,但仍然是一个 "客户端"。客户端可以是本地运行的应用程序,也可以是在网络上的另一个系统上运行但本地显示的应用程序。

  • "窗口管理器"是一种特殊的客户端应用程序,也是 GUI 的用户可定义组件。它是用户在很大程度上与之交互的东西。窗口管理器提供诸如窗口边框和装饰、菜单、图标、虚拟桌面、按钮栏、工具栏等功能,并允许用户自定义这些功能。从技术上讲,可以在没有窗口管理器的情况下运行 X(虽然功能不是很强大),但反之则不然。不应将窗口管理器与 "桌面环境"(如 KDE)混淆。桌面环境包括它们自己首选的窗口管理器,但这可以配置。窗口管理器和桌面环境之间存在一些责任重叠。

  • "根窗口"是您屏幕的背景。它仅在名称上被称为窗口,它的行为不像任何其他窗口,而是您在根窗口上运行应用程序,或在其上放置图像,或者只是纯色。所有其他窗口都是此父窗口的子窗口。从理论上讲,根窗口可以大于可查看的屏幕区域。

  • "指针"是箭头或任何给定形状的指示器,它表示鼠标或其他指点设备的位置。指针经常会改变,以便为您提供有关在该屏幕点使用鼠标时会发生什么情况的上下文反馈。

  • "窗口"是任何给定应用程序运行并在 "窗口管理器" 管理下的框架。这几乎包括除了所谓的根窗口之外的任何内容。即使看起来没有框架、标题或任何类型的普通边框的窗口也由您的窗口管理器管理。"活动窗口"是您当前正在使用的窗口。当您键入时,此窗口将响应键盘,并且传统上通过您的鼠标光标指向它来表示,尽管并非总是如此。据说活动窗口具有"焦点"。大多数窗口管理器会以某种方式突出显示"活动"或聚焦的窗口,以将其与其他窗口区分开来。

  • "菜单""图标""任务栏"X 中的行为方式与其他窗口系统中它们的行为方式类似,并且适用相同的通用原则。

  • 运行纯文本应用程序的窗口称为"终端模拟器",例如 xterm 和各种类似的应用程序。这是在 X 环境中众所周知的"命令行"。这些基本上模拟了控制台纯文本显示,并且由于它们在 X 中使用而具有一些优势。这些应用程序比 Windows 上的简单 DOS 窗口复杂和精细得多。

  • "小部件"是用于描述诸如按钮、滑块、菜单、滚动条、列表框、复选框等 GUI 控件组件的术语。"工具包"是包含具有相同外观和感觉的各种小部件的库。一些常见的例子是 GTK+(由 GNOMEMozilla 和其他应用程序使用)、Xaw(X Athena Widget set)、TkMotifQT(由 KDE 使用)。应用程序是使用一个工具包或另一个工具包构建的。有时,同一个应用程序可以使用不同的工具包构建,具体取决于编译时选项。

  • 窗口"几何"是表达窗口大小和屏幕位置的简写方式。这可能看起来像 "60x20+10+50",它是宽度 x 高度 + 垂直偏移 + 水平偏移。虽然通常指定这两个配对,但允许仅使用其中一个配对。

  • X 术语中,"资源"是可定义的应用程序属性。常用的"资源"是字体、颜色、大小、窗口标题等。


10.2. 链接和其他参考资料

注释

[1]



v4.x 的更改
- artheader 标签 已更改为 articleinfo
- graphic 标签 在 DocBook 5.x 中已被弃用。为了准备
  这一点, 您应该改为使用 mediaobject 标签。
- imagedata 的文件格式 必须 以大写字母 表示。
- 添加了对 PNG 的支持(DTD 中的表示法)


  --s+ [ser@metalab.unc.edu]
  
 aspell -H -c ~/ldp/x-user/LDP/howto/docbook/XWindow-User-HOWTO.sgml
 submit@linuxdoc.org
 
 export CVSROOT=:pserver:hal@cvs.linuxdoc.org:/cvsroot
 cvs -d $CVSROOT login
 pword: XXXXXXXXXXXXXX

 $cvs get LDP/howto/docbook/XWindow-User-HOWTO.sgml

 upload...
 $ cvs commit XWindow-User-HOWTO.sgml      !!!!!!!!!!!!!!!!
 (来自 LDP/howto/docbook/ 目录)

在此处检查: http://cvs.pld.org.pl/LDP/howto/docbook/XWindow-User-HOWTO.sgml

====================================
开始 3.1
 TODO

更改
    http://www.plig.org/xwinman (加上 freshmeat)
    VNC 与 X 在网络上的性能比较。
    lbxproxy, 性能。
    添加 fluxbox。

开始 重写 01/13/02 Hal Burgiss。

更改
 转换为 DocBook
 重写! 重写! 
 无数 更改。

待办事项
 $DISPLAY
 http://www.superant.com/cgi-bin/smalllinux.pl?smallX
 http://www.linuxgazette.com/issue27/kaszeta.html (xdm)
 http://www.linux.daphnis.com/RedHat/Custom-X-Tips.html#toc4 (Xclients, 等等)
 https://linuxjournal.cn/print.php?sid=5304 (X config, 等等)
 日志文件
 
http://www.linux.gr/cgi-bin/man2html/usr/X11R6/man/man7/X.7.gz
http://www.x-docs.org/

startx &> log

_X11TransSocketUNIXConnect: 无法连接: errno = 111 放弃。
xinit:  连接被拒绝 (errno 111):  无法连接到 X 服务器
xinit:  没有此类进程 (errno 3):  服务器错误。

## 用于将此文档构建为 HTML 和 TXT 的 Makefile ####################

# X Windows 用户 HOWTO Makefile
#
# Hal Burgiss hal@foobox.net
#

TITLE = XWindow-User-HOWTO
EXT = sgml
SRC_DIR = LDP/howto/docbook
HTML_DIR = X-USER
SRC = $(SRC_DIR)/$(TITLE).$(EXT)

BUILD = jade -t sgml -ihtml -d /usr/lib/sgml/stylesheets/ldp.dsl\#html
BUILD_TXT = jade -t sgml -i html -d /usr/lib/sgml/stylesheets/ldp.dsl\#html -V nochunks
SPELL_CMD = aspell -H -c
LINKS_CMD = /usr/bin/linkchecker *html
EDIT_CMD = /usr/bin/vim -g
TBROWSER = w3m
TMP_TXT = __tmp.sgml
WWW=/var/www/html/ldp/x-user
SRC_URL = http://feenix.burgiss.net/ldp/x-user/$(TITLE).$(EXT).gz

all: doc txt

doc: html

html
rm -fr $(HTML_DIR)
mkdir -p __tmp_htmls
mv -f *.html __tmp_htmls 2>/dev/null || 
mkdir -p $(HTML_DIR) 
$(BUILD) $(SRC) ||\
 (rm -f *.html && mv -f __tmp_htmls/* . || : && rm -rf __tmp_htmls && false)
mv -f *html $(HTML_DIR)
mv -f __tmp_htmls/* .  2>/dev/null || 
rm -fr __tmp_htmls

clean
rm -fr $(HTML_DIR) *~  __tmp_htmls

edit
$(EDIT_CMD) $(SRC)


spell
$(SPELL_CMD) $(SRC)

spellchecker: spell


links
cd $(HTML_DIR) && $(LINKS_CMD)

linkchecker: links

linkcheck: links

txt
$(BUILD_TXT) $(SRC) > $(TMP_TXT).html 
$(TBROWSER) -dump $(TMP_TXT).html > $(TITLE).txt && gzip -f $(TITLE).txt && rm -f $(TMP_TXT).html

text: txt

www
cp -fv $(HTML_DIR)/* $(TITLE).txt.gz $(SRC) $(WWW)
gzip -f $(WWW)/$(TITLE).sgml
rsync -auv $(WWW)/* feenix://$(WWW)/

submit
@echo "Updated and ready:  $(SRC_URL)" |\
mail -s "$(TITLE) update" submit@linuxdoc.org &&\
echo " $(TITLE) Submitted!"