[OpenBSD]

[索引]第十章 - 系统管理] [第十二章 - 硬件和特定平台问题]

11 - X Window 系统


目录


11.1 - 介绍 X

X Window系统(有时简称为"X", 其余时间被错误地称为"X Windows")是一个提供给OpenBSD和其它类Unix系统的图形服务环境。然而, 就X本身来说仅提供了有限的功能:其中一个也是必需的是"Window 管理器", 用来提供一个用户接口。很多有"个性"的人感觉X就是Window 管理器而不是X本身。OpenBSD配送一个自由版本的 fvwm(1) Windos管理器的, 可能您喜欢使用packages中的一些其它版本的Window 管理器, 搜索关键字 "window manager"可以得到许多 "window manager"。

X是一个被设计为"客户端-服务器"结构的协议, 但有时这个术语容易让人迷惑。在屏幕上输出图形的计算机是"X Server"(服务器), 直接指挥X server让它在自己的屏幕上显示内容的是"X Client"(客户端), 尽管它可能是数据中心的一台非常强劲的计算机。这种模型可以用于让具有巨型的、处理器密集型的应用程序(X clients)运行在一台非常强劲的计算机上, 用X server运行在您桌面上一个小型的、低性能的计算机上作为用户界面。

有可能让X clients运行在一个没有任何图形支持的系统上。例如, 一个人可能在mvme88k运行一个应用 ( X client) , 而显示则输出到一台 alpha's 的图形显示器上 (X server)。因为X是一个定义明确的, 跨平台的协议, 它甚至有可能在一个(比如)Solaris平台上运行而用一台OpenBSD的机器显示。

X的客户端和服务器还可以运行在用一台计算机上, 并且我们假设本章的的大部分内容就是这种情况。

11.1.1 - 我需要多少台计算机才能运行X?

X本身是一个很巨型的程序, 如果您需要定期启动和关闭X, 一台快速的计算机更合适。然而在最现代的计算机上一旦X开始运行它的性能还是很好的。要让一些平台具有良好的显示性能, 即使仅是显示字符, 可能您也想在这些平台上运行X, 这样的平台像 sparcsparc64被设计成使用图形界面, 而它们在控制台使用字符界面时性能低得可怜。

据说, 运行X的要点是运行X应用程序。有些X的应用程序很精巧, 其它的则看起来几乎可以用尽您能提供的所有处理器和内存。当然, 也有用户就喜欢使用X来提供大量的xterm(1), 这在最现代的硬件上完全没有问题。

11.1.2 - 如果没有X我能显示某些图形吗?

这里假设您说的不是ASCII graphics, 显示图形需要某种帧缓冲控制台驱动, 一些操作系统提供这个驱动, 但是当前OpenBSD没有提供, 开发人员对此也无兴趣。

11.2 - 配置 X

在各种平台上配置X有很大的区别。总的来说, 一个已经安装OpenBSD的系统在 /usr/X11R6/README 里有该平台和其它平台的安装指南。

有几个平台需要 xf86(4) X aperture 驱动, 它可以提供X servers所需的访问内存、VGA显卡I/O端口和PCI配置寄存器的功能。这个驱动必须在使用前激活。要么在安装过程中回答下列问题时选择 "yes"

Do you expect to run the X window System [no]yes

要么在 /etc/sysctl.conf 文件中将machdep.allowaperture设置为适合您平台的非0数值, 并且重新启动计算机(在启动过程完全结束后, sysctl因为安全原因不能被修改)。这个设定牵扯安全问题, 所以如果您不需要配置 X 就不要改动它。

 

11.2.1 - alpha

/usr/X11R6/README 文件是针对alpha平台的。

设置 /etc/sysctl.conf 文件内的 machdep.allowaperture=1

支持TGA和VGA显卡, 不需要设置更多参数。

11.2.2 - amd64

/usr/X11R6/README 是针对amd64平台的说明文件。

设置/etc/sysctl.conf 文件内的 machdep.allowaperture=2

在amd64平台上X的自动配置就非常理想, 多数情况下不需要更多的设置。如果还需要其它设置请使用下面的 X -configure 步骤。

11.2.3 - armish

没有X servers, 只有 X clients.

11.2.4 - hp300

/usr/X11R6/README 是hp300的说明。

11.2.5 - hppa

没有 X server, 仅有 X clients.

11.2.6 - i386

/usr/X11R6/README 是i386平台的说明。

/etc/sysctl.conf 中设置 machdep.allowaperture=2

在i386平台上因为有令人难以置信的众多各种各样的视频卡、鼠标、键盘及其它硬件设备, 所以在i386系统上运行X是令人兴奋的, 兴奋到我们需要分成单独一小节进行描述。

幸运的是, 事情并非总是看起来那样坏——多数情况下, 只需输入 "startx" 命令 X 就可以工作了。这种情况下, 您的硬件已经经过了检测和性能查询, 并且X也会正常的工作。

11.2.7 - landisk

没有 X servers, 仅有 X clients.

11.2.8 - luna88k

没有 X servers, 仅有 X clients.

11.2.9 - mac68k

没有 X servers, 仅有 X clients.

11.2.10 - macppc

/usr/X11R6/README 是macppc的说明。

/etc/sysctl.conf 中设定 machdep.allowaperture=2

被支持的Macintosh PPC 系统可以以两种方式运行:"加速模式"和"帧缓冲"(非加速模式)

在"帧缓冲"模式时, 系统将以每像素8 bits的方式运行, 并且由Macintosh环境控制视频分辨率, 所以您可能想在磁盘上保留一小部分MacOS section用来调整设定。这种模式的优点是肯定可以正常工作, 但有时也可能令人沮丧(例如, 改变分辨率需要启动MACOS)。

如果您的Macintosh有一个基于ATI的视频系统, 它就可以在加速模式下运行 X server, 它提供了更好的性能以及更丰富的OpenBSD环境控制。某些具有NVIDIA显卡的macppc系统也可以采用加速模式。README文件详细叙述了怎样配置加速驱动, 您可以从它的示例文件着手。

虽然README文件里详细叙述了在X中使用Apple单键鼠标, 不过除非您使用一台笔记本电脑, 我们建议您还是买一个现在的三键USB鼠标。

11.2.11 - mvme68k

没有 X servers, 仅 X clients.

11.2.12 - mvme88k

没有 X servers, 仅 X clients.

11.2.13 - sgi

没有 X servers, 仅 X clients.

11.2.14 - sparc

/usr/X11R6/README 是sparc的说明。

如果仅是单纯地运行在帧缓冲模式, 不需要任何配置。如果您需要multi-headed配置, 请参阅上面的说明文件。

分辨率在启动OpenBSD前由固件控制。

11.2.15 - sparc64

/usr/X11R6/README 是sparc64的说明。.

这款机型有不同的型号, 您需要确认您的系统总线(PCI 或 SBus)、鼠标的接口 (zstty, com, 或 USB/PS2)以及显卡的种类。从README中的示例文件xorg.conf着手, 然后根据您的实际情况进行调整。被指望示例文件不用修改就可以应用在您的机器上!

11.2.16 - vax

/usr/X11R6/README 是vax的说明。

X server目前仅能工作在一台具有lcg(4)lcspx(4) 帧缓冲功能的VAXstation 4000型计算机上。

11.2.17 - zaurus

/usr/X11R6/README 是zaurus的说明.

不用配置 X 就可以工作。

11.3 - 在 amd64 和 i386上配置 X

在amd64 和 i386平台上因为有大量不同的硬件使配置X的过程很"棘手"。

 

11.3.1 - 配置 X.Org

X.Org在可用性方面有重大的改进。很多情况下即使没有 /etc/X11/xorg.conf 文件它也可以正常的工作。但不总是这样, 有时后您需要配置一下它才可以正常工作, 不管怎么说, 有两个程序可以半自动的为X.Org的 i386 X server产生一个配置文件。遗憾的是这两个程序全不能保证产生可用的 xorg.conf 文件。

 

除了上面的两个程序, 这里还有一个配置 X 的历史悠久方法就是用您喜欢的搜索引擎在互联网上寻找已经解决了同样问题的那个人, 虽然这个方法不赖, 但我们就不在这里着重说明了。

 

11.3.2 - 我们的示例计算机

为了示范创建X, 我们使用一台旧的赛扬400MHz系统, 它有一个AGP的视频插槽, 视频显示卡式一个老的AGP卡, 从dmesg可以看:

 

vga1 at pci1 dev 0 function 0 "3DFX Interactive Banshee" rev 0x03
  

这块显卡以前属于高端显卡, 有16M RAM, 但是现在已经不被最新的"主流"操作系统支持了。系统采用的监视器是一台Sony Multiscan G400 19 CRT监视器, 它可以很好的运行在1280x1024的分辨率上, 具有非常好的刷新率及24bit的颜色质量。

首先, 安装OpenBSD与X后(并且确认内核已经激活了aperture驱动), 我们来看一下X.Org的自动检测和配置过程, 最终, 也许我们会成功。我们现在登陆系统并用 startx(1) 命令启动X, 屏幕会先黑一会儿, 然后进入"checkerboard"背景, 出现"X"光标, 最后是xtrem窗口。

它可以正常工作!

或多或少, X系统的功能完全正常, 只是看起来没有丝毫没有利用监视器的能力, 因为它运行在一个较低的分辨率下(640x480), 我们希望它可以在更高的分辨率下工作, 事实上这已经好多了, 但这意味着无论如何我们需要自己调整我们的xorg.conf文件。

我们开始先使用"X -configure"命令生成一个xorg.conf文件, 您需要以root的身份进行如下操作:

# X -configure
 [...]
Your xorg.conf file is /root/xorg.conf.new
To test the server, run 'X -config /root/xorg.conf.new'  

顺便说一下, 这个屏幕输出信息很严谨——虽然生成的文件位于默认的当前目录下, 但是屏幕信息还是用绝对路径描述了xorg.conf文件的位置。如果不使用绝对路径可能会导致在 X(7) 无法找到这个新配置文件, 也就意味着 X(7) 会默默地采用系统默认的配置文件, 而不会理睬您刚生成的配置文件, 这会拖延您解决问题的进度, 这点请相信我们。

我们按照屏幕提示操作, 看看会发生什么:

# X -config /root/xorg.conf.new
现在, 咦?我们看见了一个全黑的屏幕, 刚开始配置居然就如此"顺利".......

这种情况下我们正好讨论一下怎样退出X, 按优先顺序排列:

我们还挺幸运, CTRL-ALT-Backspace 就终止了X, 现在我们又回到了命令行提示符。所以现在我们要看一下可否处理这个错误, 首先, 我们应该看一下X是怎样工作的, 它记录在 /var/log/Xorg.0.log 文件内。本例中, log文件显示一切工作正常, 没有明显的错误(以"(EE)" 开头的行表示有错误)。

现在是了解您硬件的时候了, 反正您迟早要这样做。将这台计算机接上一台不同的监视器, 结果还是黑屏并在屏幕上显示了一条信息"Sync. Out of Range"(超出同步范围).所以, 很显然, 目前X的配置无法工作在这台监视器上, 而且可能不适合所有的监视器, 如果X选择的显示模式超出了显卡的显示范围(请记住, X 仅仅是通过查看显示卡上的芯片组和判断显卡的潜在能力来设定显示模式的, 但是它不能像制造商那样了解所有细节)。错误的配置在不同的监视器上会导致不同的结果, 有的监视器会用可能的方式显示, 有的则会进入节电模式, 有的会产生可怕的噪点, 有的会产生一些有用的提示信息, 但是我们使用的这台监视器似乎不是上述任何一种的情况, 产生的信息似乎对以后在这台监视器上初始化X没有一点作用。

通过查看生成的 xorg.conf.new 文件, 我们看到:

Section "Monitor"
        #DisplaySize      370   270     # mm
        Identifier   "Monitor0"
        VendorName   "SNY"
        ModelName    "SONY CPD-G400"
 ### Comment all HorizSync and VertSync values to use DDC:
        HorizSync    30.0 - 107.0
        VertRefresh  48.0 - 120.0
        Option      "DPMS"
EndSection  

作为测试, 我们尝试一下DDC("Data Display Channel"数据显示通道, 通过这种方式监视器可以告诉计算机和显卡它的显示能力), 看看会发生什么。这次我们看见了X的网状图案以及移动的光标, 正像我们调用X时期待的那样(我们再用CTRL-ALT-Backspace关闭X)。这次虽然分辨率很低, 但是好歹可以工作了, 所以我们可以确认是刷新率和分辨率的问题。我们将文件中"HorizSync" 和 "VertRefresh"这两行的内容复原, 因为我们已经通过在一些互联网上的搜索确认了这台监视器的规格。

我们强制Xorg使用一个指定的分辨率, 再看看我们的运气如何。在xorg.conf文件中的 "Screen" 这一小段, 我们加上了用黑色字体显示的两行, 如下所示:

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth   24
        SubSection "Display"
                Viewport   0 0
                Depth     1
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     4
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     8
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     15
        EndSubSection
        SubSection "Display"
                Viewport   0 0 
                Depth     16
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     24
                Modes	"1280x1024"
        EndSubSection
EndSection

新加的两行告诉X我们想使用24位的显示深度, 并且使用1280x1024的分辨率。因为在24位深度上没有其它的分辨率可选, 系统会强制使用这个分辨率。

我们测试上面的配置, 然后...........成功了!系统在高分辨看起来很完美。注意我们目前所有的期待就是一个网格图案(它看起来相当好, 具体多好要看您的监视器质量和LCD的校准程度, 被称为"root weave")和一个可移动的光标, 目前阶段我们暂且不考虑 X 的功能问题。

现在, 我们来安装这个xorg配置文件, 看看运行X时它到底工作地多好.

# cp xorg.conf.new /etc/X11/xorg.conf
我们使用常规的startx(1)命令启动 X, 它可以工作!

校验我们希望的分辨率和颜色深度和刷新速率也许是一个很好的工作。我们可以使用 xrandr(1)xdpyinfo(1) 命令, 除了其它信息, xdpyinfo(1) 告诉我们:

    [...]
screen #0:
  print screen:    no
  dimensions:    1280x1024 pixels (433x347 millimeters)
  resolution:    75x75 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32
  root window id:    0x44
  depth of root window:    24 planes
    [...]
所以, 我们确认X运行在分辨率1280x1024以及24位深度下。

xrandr(4) 告诉我们:

 SZ:    Pixels          Physical       Refresh
*0   1280 x 1024   ( 433mm x 347mm )  *85   75   60  
 1   1280 x 960    ( 433mm x 347mm )   85   60  
    [...]
系统运行在85Hz的刷新速率上, 这个刷新速率对多数用户来说很舒适。

11.3.3 - 如果没这样"简单"怎么办?

有时, 一些因素难以协调一致, 这里有一些提示:

11.4 - 启动 X

有两个常用的启动 X 的方法:

11.4.1 - 根据需要:

以正常方式登陆控制台, 需要时键入startx(1)

11.4.2 - 直接启动至 X:

这需要使用X显示管理器xdm(1), xdm(1)以root的身份启动, 通常通过rc, 并且提供一个login提示符。用户登陆成功后, 它为用户启动一个 X 会话。如果或当 X 会话终止后(包括按下了 CTRL-ALT-Backspace键), xdm(1)会退回, 提示用户重新登陆。基于这个原因, 除非您的 X 工作的很好, 或者您的计算机变得难于管理了, 否则不用使用 /etc/rc.conf.local 启动 xdm(1) ! (情况最糟糕时:例如忘记了密码, 启动至单用户模式, 编辑您的xdm_flags那行并保存在 /etc/rc.conf.local 文件。)

有些平台需要禁用控制台getty(8) 才可以使用 xdm(1)。

11.5 - 定制 X

11.5.1 - 介绍

OpenBSD默认的X环境是具有全部功能的, 但是你可能希望定制它。你可能希望改变背景图案或颜色, 或者你可能希望改变Window管理器(这个程序可以设定X环境绝大多数参数), 或者更改你的随X启动的应用程序。

OpenBSD中的默认window管理器是 fvwm(1)。Fvwm是一个优秀的、通用的window管理器, 但它绝非你唯一的选择;OpenBSD并非仅包含了Fvwm(请看 cwm(1)twm(1))。另外你还可以在 packages 中找到大量的widnow管理器。

就像 系统启动脚本, X也通过一个程序设置用户环境, 更确切地说是几个程序, 具体用哪个取决于你想怎样启动X , 理解X的启动原理可以帮助你按自己的设想定制X。

说明, 你可以将X定制为系统级或用户级, 最好方法是不要更改系统默认设置, 将X定制为用户级别, 因为用户的脚本储存在用户自己的目录里, 这样你可以在升级系统时减少文件的合并数量。X的系统级默认配置在 /etc/X11 里, 来自安装组件 xetcXX.tgz, 升级过程不会重新安装这个组件, 所以如果你更改了你的系统设置, 升级过程不会覆盖改动的部分, 但是你可能需要将这些改动应用于新版本的相应文件中。

11.5.2 - 用startx(1)启动X

startx(1) 在自己的目录内寻找 .xinitrc 文件, 这个文件通常是一个shell脚本, 无论你希望启动多少X"客户端"(使用X的应用程序)都可以用这个shell脚本进行设定。这个shell脚本执行完毕后, X服务器也随即关闭。通常情况下, 通过这个脚本启动的大多数程序在后台运行, 尽管最后一个应该在前台运行(例如:window管理器), 当最后一个程序退出后, 脚本也执行完毕, X也随即关闭。

最简单的情况, 你可以只输入window管理器的名字就可以调用它:

cwm  
或许你想发挥一下自己的想象力:
xconsole -geometry -0+0 -fn 5x7 &  oclock -geometry 75x75-0-0 &  xsetroot -solid grey &  cwm  

这样会启动 xconsole(1) , xconsole(1) 提供了一个内核发送给控制台所有文本的拷贝(现在掩盖在图形下面), 一个模拟的时钟, oclock(1), 并且在调用 cwm(1) 之前把背景设置成一个灰色实体。注意带 "&" 字符时仅有window管理器不在后台运行, 也就是说直到 cwm(1)退出时X才会退出。

如果用户的目录内没有 .xinitrc 这个文件, 系统会使用 /etc/X11/xinit/xinitrc 这个文件。你可以参照它设置你自己的 .xinitrc 脚本。

11.5.3 - 用xdm(1)启动

xdm(1) 通常由 系统启动脚本 启动, 但是出于测试的目的(推荐, 除非你知道怎样正确地配置X!), 可以用root的身份运行它。

xdm(1) 还有很多我们这里不讨论的其它功能, 但我们的目的是用 xdm 提供一个用户登录屏幕, 以校验用户名和密码, 然后向用户提供X环境。当X关闭时, xdm会重新启动自己, 这就是为什么你要在使用xdm或设置其随系统启动前确保已经正确地配置了X, 否则你可能无法控制你的机器。

当 xdm(1) 启动后, 它会运行 /etc/X11/xdm/Xsession 检查是否用户目录中存在一个 .xsession 文件, 所以, 如果你想改变你的默认window管理器, 只需简单地在.xsession 里调用它 (或是什么别的)。在强调一下, 你想在X中运行的任何程序(例如, 可能是三个 xterm(1)) 全可以放在这里, 但是所有放在这里的程序应该全是在后台运行的, 除了window管理器, 同样还要强调的是当windos管理器退出时X会话就终止了, 这时, xdm(1)将重新启动X, 然后把你带回一个登录屏幕。

11.5.4 - 尝试一个新的window管理器

你可以在不改变任何默认配置的前提下通过调用一个指定的window管理器来载入X, 像这样:
$ startx /usr/local/bin/fluxbox

一些window管理器(包括 cwm(1) 和 fvwm(1))可以在运行时被更换为其它的window管理器, 这种更换不用重新启动X或你的应用程序。 新的window管理器将取代那个旧的, 退出新管理器并终止X后, 系统不会回到你原先使用的window管理器。 使用fvwm(1)时你可以通过左键点击背景 ("root window")来启动一个不同的window管理器, 选择 "(Re)Start", 然后选择你喜欢的window管理器(然而, 注意你需要将你选择的window管理器添加到 .fvwmrc 文件 (系统级配置默认在 /usr/X11R6/lib/X11/fvwm/.fvwmrc))。 cwm(1) 里通过键入Ctrl-Alt-w来调用其它的window管理器, 然后输入你想切换的管理器的名称。

一旦你找到了自己喜欢的window管理器, 你可以下个上面描述的那样将它作为最终程序设置在启动脚本里。

 

[索引]第十章 - 系统管理] [第十二章 - 硬件和特定平台问题]


[back]www@openbsd.org
$OpenBSD: faq11.html, v 1.76 2008/11/12 02:59:41 nick Exp $