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)的设备,则应该得到很好的支持。相反,如果它是相对较新的、具有突破性技术的东西,那么可能性就不那么好了。这只是开源开发与更迎合最流行平台的制造商之间的本质。一些制造商也比其他制造商更合作。

现在,一些一般准则

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

较新版本的 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 "显示" 的示例输出

 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(或XF86Config-4对于 v.4.x)的 "Monitor" 节中。

xvidtune 将忠实地警告您玩弄监视器设置的危害。使用现代监视器不太可能损坏任何东西。但最好用于进行微小的调整。使用风险自负!