BBS水木清华站∶精华区

 
                   第20章  全部放在一起 -- xdm 
 
 
    现在我们已涵盖了你需要用到X的所有个别的项目,你知道如何启动系统, 
如何设定一个视窗管理器的执行,如何执行应用程式,如何从不同的角度定制 
系统,最後,如何退出系统。 
 
    本章中,我们把这些分开的部份放在一起,且描述一个完整的档案设定, 
用来定制涵盖所有的□例功能系统机器环境。在本章我们将看到我们所要介绍 
给你的最後一个X的工具:显示管理器(display manager) -- xdm,它提供一 
个精巧和清楚的方法在你的机器上启动X。 
 
 
20.1  我们需要做些什麽 
 
    当我们启动之後,我们需要安排萤幕,让一些我们在整个执行期间中都会 
使用的应用程式适得其所,让一些偶然用到的则以表徵图为开始时的表示方式。 
我们需要执行视窗管理器,对某些种类的功能做一些设定。详细来说,我们需 
要下列的程式: 
 
    .一个xterm 的主控台,在萤幕左上角。 
 
    .uwm 在背景下执行。 
 
    .一个我们的(正常)编辑器的全萤幕xterm 视窗,以表徵图启始。 
 
    .在右上角一个(较一般为小)的时钟。 
 
    .xbiff 在时钟之下。 
 
    .一个计算器在右下角。 
 
    .一个用到我们所有最小的字型的表徵图化的xterm ,它的高度为screen高。 
 
    .在xbiff 之下,排列我们使用远方机器的频率图。 
 
    除了程式之外的项目: 
 
    .设定背景视窗为亮灰色。 
 
    .启动键盘滴答(key-click) 的功能。 
 
    .从我们常用的网路主机存取到我们的server。 
 
    .载入我们对所有client用到的server设定的resource,在16章我们定义 
      的$HOME/.Xresources 档案中,根视窗RESOURCE_MANAGER性质之上。 
 
    .启动一个screen saver。 
 
    并且我们需要uwm 有选单让我们能够: 
 
    .容易地存取在网路上其它的主机。 
 
    .变更一些键盘和滑鼠的设定,且设定背景视窗的颜色。 
 
    .启动那些我们偶而会用到的应用程式。 
 
    .启动一些被选定的示□程式。 
 
    对这些我们自己的设定,在我们网路上其它的使用者需要不同的初始设定, 
所以我们需要安排每一个使用者依他们自己的喜好设定,理想上,使用者应能 
自行设定而毋需藉系统管理者的帮助,下一节我们来看程式xdm 如何能帮助我 
们达成这些目的。 
 
 
20.2  xdm  -- X显示管理器(X Display Manager)的概观 
 
    xdm 管理一或多个显示器,xdm 可在同一机器或远方的机器上执行。它可 
以做到所有xinit 能做到的,而且更多。它所隐含的概念为它应控制当你在X 
工作时的完整周期 (session),意即从你进入直到结束视窗系统的周期。(用 
xinit ,有效周期为当你执行xinit 开始,到你结束(logout)最初的xterm 
视窗和关闭server。) 
 
    xdm 较这更进一步:你可以用它执行一个不确定的周期。当一个结束,下 
一个便准备开始。实际上,如果你有需要,它让你不变地指定一个显示器。 
 
    xdm 完全取代xinit 。从现在起你可忘掉xinit ,而且不再需要使用它, 
我们在最初使用xinit 的原因为它较易观察和了解系统的运作。 
 
    xdm 是一个非常灵活的程式,你几乎可用它建构任何你所需要的,在进一 
步深入之前,让我们观察一个□例周期的预设行为,然後我们来看一看你如 
何改进当一个使用者进入X系统所看到的初始介面。 
 
 
  20.2.1  一个用xdm 的□例周期 
 
    我们将使用xdm 来设定在我们机器上执行的X。你的机器已经启动,但尚 
未有视窗系统在其上执行。用下列的命令启始xdm 
 
        xdm 
 
    xdm 开始执行,你几乎立刻又看到你的shell 提示。然後萤幕背景变更为 
通常灰色形式,且你看到一个大的X游标,所以你知道server已经启始。 
 
    接下来是一长段修止状态 -- 大约接续15秒或更久 -- 而後突然间一个带 
著欢迎标题的视窗出现了,要求你的登录名称(login name)和密码(password), 
如图20-1(这是xdm 的authentication widget )。输入你的使用者名称和密 
码,又过了一会儿,你可以看到一个xterm 视窗在左上角出现,就如同图5-3 
一般,从现在起,你工作的方式和以前相同 -- 启动你的视窗管理器,执行应 
          。 
 
          ┌——————————————————————┐ 
          │   FIG 20.1        P.251                    │ 
          │                                            │ 
          │  图20-1  xdm 的 authentication widget      │ 
          └——————————————————————┘ 
 
 
    当你需要结束时,你也可用像以前相同的方式结束:logout最初始的xterm 
视窗。但这里xdm 和xinit 有不相同的地方,代之关掉server的是,回到非X 
的环境,萤幕回到最初始灰色的背景,过一下子之後,你又再度看到X的登录 
视窗。事实上,xdm 是执行一个循环的周期。 
 
    注意:就像许多的Unix程式,最大的登录名称长度为8 个字元 -- 如果超 
过这个长度,login 将会失败。(如果你的实际login 程式允许你使用较长的 
名称,这种限制也许让你感到奇怪。) 
 
关闭xdm 
 
    有时你可能需要完全地关闭X。为了做到这点,你需要关闭xdm 。 
 
何改在MIT 版中的server,会依循如果收到Unix讯号SIGTERM ,便会执行中止 
程序。xdm 利用到这点:如果你送给它一个SIGTERM ,它将中止所有它所控制 
的server後离开。这就是你中止系统的方法。 
20.2.1  □    欲实际地中止xdm ,可以在一个xterm 视窗(在你的机器上)用ps来找出 
xdm 的process-id,而後用kill送给它SIGTERM (你将看到数个xdm 处理的执 
行:那个最年轻的便是你要的,也就是说,最低的process-id)。例如,在我 
们的机器上执行中止的动作: 
 
    venus% ps ax 1 grep xdm 
    1997 ? IW 0:00 xdm 
    1998 ? IW 0:00 xdm 
    2000 ? IW 0:00 xdm 
    2078 p0 S 0:00 grep xdm 
    venus% kill -TERM 1997 
 
    你所有的应用程式将被强迫中止,server也随之关闭。 
 
    注意:当相关於X的每一件事都结束後,你的萤幕可能只显示通常X背景 
的灰色形式,没有任何的shell 提示或任何事。不要被愚弄了:你的shell 已 
准备好接受你的命令 -- 按下RETURN键你将会看到。(因为在,以交谈式下 
xdm 命令之後,shell 已将提示号送出,所以不再重覆 -- 除非你按下RETURN)。 
 
 
20.3  有关xdm 的更多 
 
    我们在前所述为xdm 的预设模式的操作,所以看起来并没有比xinit 提供 
得更多,如果你使用一个正常的工作站或显示器,一些外貌将不是很有趣。无 
论如何,X终端机(x-terminal)是一个日渐增加的大众化设备,而xdm 可大量 
地简化管理类似的系统。X终端机通常没有它自己的档案系统,且不能支援一 
般目的的程式,必需在网路的某处执行包含视窗管理器和显示管理器的控制终 
端机软体,xdm 正是符合此需要的软体。 
 
xdm 在下列这些场合较xinit 为优: 
 
    .它可控制数个server,也暗示说,其中有一些为远方的server,也许是 
      在X终端机或相当小的工作站上。 
 
    .它提供密码来存取系统,同样地,在X终端机上非常有用(但在一个你 
      已经login 的工作站会有一点困扰。) 
 
    .它提供无限期的X的周期。你可以建构显示器经常性地以X操作,所以 
      使用者毋需担心如何启始系统。 
 
    .它具有高度的建构性,系统管理者可以设定依机器特性的启始和结束程 
      序,掌握这些项目以供记帐(accounting),授权(authorization) ,档 
      案系统等之用,且能让每一个个别的使用者全□围性地修定他们所需的 
      自己的环境。 
 
    .从使用者的观点,它提供一个乾净而简单的方法来启动系统。 
 
    所以大体上正是符刑要是一个系统管理工具,但它也提供让一个普通使用 
者定制他所希望的一致和一贯地系统架构。 
 
    xdm 的指南页包含了大量的有关如何使用系统的教学资讯和指引,在此我 
们不再重覆,我们将在以下的章节说明如何正确地建构xdm 以提供在本章一开 
头所描述的环境。 
 
    xdm 真的非常有弹性,且你可以用许多不同的方式选择设定,我们将使用 
    最简单的处理,并试著大致和指南页的描述保持一致,偶而我们在一些档 
案中使用不同的名称,用以强调此名称并非硬性的规定。 
 
    在我们工作的周期中,请对我们事实上在扮演两个不同的角色保持概念: 
第一是系统管理者,对於使用系统的任何人来设定xdm ,第二是一般的使用者 
,为我们自己的需求设定xdm 。 
 
 
  20.3.1  系统管理者对xdm 的建构 
 
    预设xdm 先查看档案 
 
        /usr/lib/X11/xdm/xdm-config 
 
如果它存在,会把它当成多设定几个其它参数的resource档案。我们将使用它, 
因为它可简化我们的工作。 
 
    指南页会列出所有你能藉xdm-config档案设定的参数,但我们较有兴趣的有: 
 
    .包含一个server的目录的档案名称。 
 
    .当任何错误发生时,xdm 用来记录的档案名称。 
 
    .包含和启始系统有关的档案系统名称。 
 
    .当server启动後执行程式的名称,这个程式定义了你的”周期” -- 当 
      这个程式中止时,xdm 视其意义为你的周期已结束,且回到它login 时 
      的顺序,预设这个程式为xterm ,就和使用xinit 一样,你的周期持续 
      直到你logout你初始的xterm 。 
 
    这是我们已在系统上定义的设定: 
 
        DisplayManager.severs:   /usr/lib/X11/xdm/our-server 
        DisplayManager.errorLogFile:   /usr/lib/X11/xdm/errors 
        DisplayManager*resources:   /usr/lib/X11/xdm/our-resources 
        DisplayManager*session:   /usr/lib/X11/xdm/our-session 
 
(我们已选择保持所有xdm 相关的档案在目录/usr/lib/X11/xdm,这只是代表 
名称,你可以用任何你喜欢的目录。) 
 
    所以你可以看到我们使用xdm-config,实际上是一个两步骤的处理方法, 
首先我们定义在xdm-config中的一些档案名称,接著我们来设定方才命名的档 
案。现在我们来看一下我们在xdm-config中定义的每一个resource。 
 
xdm 的server的名单 
 
    这个被DisplayManager.servers设定的档案的resources 包含了一个xdm 
能管理的server的名单。每一列中包含了server的名称(也就是显示器), 
server的型态(type),和型态有关的项目。 
 
    型态指出了显示器是本地的或远方的。和是否为无限或单一的周期(详见 
xdm 指南页)。我们将使用型态localTransient -- 单一周期在本地显示器上 
 -- 因为以此方式,如果发生任何错误,我们不致於陷入无穷回圈中。稍後, 
当我们每件事都设定好且执行无误的话,我们会将型态改为本地而循环的周期。 
 
    对本地的显示器而言,和型态相关的讯息是在此显示器上执行的server程 
式的名称及其任何所需的引数。对远方的显示器,此讯息可被忽略,但你仍需 
输入一个假的(dummy) 程式名称。 
 
    所以,在我们所建立的档案/usr/lib/xdm/our-servers包含这一行: 
 
        :0 localTransient   /usr/bin/X11/X  :0 
 
(如果我们喜欢执行循环周期,此档案便不再需要 -- 预设设定会做到我们所 
需要的 -- 所以我们在建构档中不需定义DisplayManagers.servers resource。) 
 
xdm 的错误登录档案 
 
    此档案从xdm 和xdm 的周期程式接收所有错误的讯息,且如果你的xdm 设 
定工作发生问题的话,这是第一个需要查看的地方。 
 
    当你开始设定你的系用,对此档案设定任何人均可写入,否则,有问题的 
程式可能因没有写入许可而无法在档案中记录。 
 
启始时的resource档案 
 
    此档案包含一个resource的名单,在Authentication Widget 启始之前被 
xrdb载入。因此,你能用它来为那些widget设定resource。(你当然也能放置 
任何其它的resource规格,但通常周期程式的使用者设定载入时会凌驾其上, 
所以通常不把其它的规格放在这里。) 
 
    authentication widget resource的预设设定在某些情况是很细的,但为 
了举例,我们只设定和bunner不同的标题,我们建立我们的档案 
 
        /usr/bin/X11/xdm/our-resources      包含一行: 
 
xlogin.Login.greeting:X-Window on the Plants network 
 
xdm 的"Session(周期)"程式 
 
    你可以指定任何程式为你周期中所需的程式,可是当周期结束,你通常选 
择一个程式让你能启始其它的程式,你能依赖xdm 的预设设定执行xterm ,但 
这种方式每当xterm 执行时你仍必需手动所有你的设定。我们需要定义我们的 
周期程式来做所有我们的设定,且保持活动(active)的状态直到我们结束它为 
止,但记住,我们希望使用者如果需要能定义他们自己的周期程式,所以我们 
将使用两阶段的处理,如果是系统管理者,我们将设定一个一般性目的,基础 
的,周期程式来召换一个使用者自己的程式(如果它存在),但其它方面将执 
行一个合理预设。当个别的使用者,我们将定义我们自己的设定周期,它将被 
xdm 的一般目的程式执行(我们在另外一节讨论它)。 
 
    我们的基本的site-wide 周期程式非常简单,如果使用者有设定档案 
$HOME/.Xsession 的常规我们便使用之,否则,我们将执行合理的预设 -- 启 
动uwm 而後传递控制到一个xterm(xterm为我们指定在萤幕左上方的那一个) 
。但在做之前,我们先检查是否使用者设定了档案$HOME/.Xresources(其它的 
常规),如果有的话,我们用xrdb载入它。一个完整的程式名单如图20-2。 
 
          ┌——————————————————————┐ 
          │   FIG 20.2        P.257                    │ 
          │                                            │ 
          │  图20-2  程式/usr/lib/X11/xdm/our-session  │ 
          └——————————————————————┘ 
 
  20.3.2  我们自己对於xdm 的建构 
 
    现在我们改变角色:我们不再是系统管理者,而是一个使用者。我们可以 
依赖系统管理者已定义之预设周期,但我们比较喜欢定义自己的周期,所以我 
们要获取那些说明我们所需的起始设定。 
 
我们的实例.Xsession 
 
        已建立我们自己的$HOME/.Xsession,如图20-3,且此萤幕初始的建构 
在它执行之後会如图20-4。此程式的操作十分直接,但当你自行设定时有一些 
要点需要注意,且当你建立site-wide 周期程式也是一样。我们假设你的周期 
          shell :虽非必定,但通常都是(除非你要写一个xetrm 的复杂的 
代替品)。 
 
          ┌——————————————————————┐ 
          │   FIG 20.3        P.258                    │ 
          │                                            │ 
          │  图20-3 $HOME/.Xsession 程式               │ 
          └——————————————————————┘ 
 
          ┌——————————————————————┐ 
          │   FIG 20.4        P.259                    │ 
          │                                            │ 
          │  图20-4 我们初始化後的萤幕                 │ 
          └——————————————————————┘ 
 
    .档案中的命令依序排列,所以最後一行所执行的是一个程式,它可以持 
      续整个你的周期。(因为,当此程式结束,则周期程式结束,且每一件 
      事也均将结束)。 
 
    .除了在背景中最後的命令所有的命令均被执行,也就是说,在命令列最 
      後加一个ampersand(&)  号。如果你不这样做,此周期将从不获取过去 
      的任何不确定地执行的程式。例如:在我们的实例程式,如果我们在uwm 
      那一行省略"&" 号,uwm 会启动,但在uwm 结束时,它的下一行将不会 
      继续执行,绝不! 
 
    .最後的命令必为exec的命令,所以它继续执行且保持你的周期继续活动。 
      (如果你像其它命HO一样在背景中执行它,它会好好的执行,但此周期 
      程式执行至档案结束将会中断,而结束周期。如果你不用exec,且省略 
      "&" 号,则它会执行且此周期将完美地持续工作,你只是较你所需的多 
      执行了一个处理,就如同你仍有最後的程式(last program)和周期程式 
      本身。) 
 
      对所有的程式建立视窗时设定geometry规格 -- 否则当它们启动时你将 
      以”手动”方式指—它们的位置。 
 
    .在档案中最後一行的程式通常用来启动xterm ,因为它定义了你周期的 
      生命期,在你执行X时此视窗总是存在,所以你通常设定两个特别的选 
      项: 
 
      1 .使用-C选项使得xterm 为一个”主控台”,所以系统讯息会在它的 
          视窗显示。 
 
      2 .设定-ls 选项使它的shell 为login shell 。如此使得shell 读入 
          你的.login或.profile,所以你的环境变数会适当地设定。(如果 
          你不这样做,你只有一点儿定义:DISPLAY,HOME,USER,PATH和SHELL.) 
 
      3 .此周期程式档案必需有执行许可。使用上述site-wide 周期程式, 
          这对使用者周期script不是绝对需要,它实际是对site-wide 程式 
          本身。(如果那不能执行,你只能获得xdm 的预设设定。) 
 
    在装设你的.Xsession 和依赖它启始你的视窗周期之前,最好能够从一个 
xterm 视窗启动你的.Xsession 以严格测试它。 
 
20.4  我们自己的uwm 建构 
 
    我们需要设定四个uwm 选单:一是连接到其它的主机,二是执行一些X的 
应用程式,三是设定一些键盘和滑鼠参数(有点儿像预设的Preference选单), 
四是执行展示程式。 
 
    对我们的”主机”选单,我们现在希望只要藉著从选单中选取主机名称便 
可在任何主机上启动xterm 。我们常常需在mars上做一些系统管理,所以我们 
将设定选择在其上为超级使用者(super user),我们将在左下角建立一个超级 
使用者视窗,但对一般的xterm ,我们省略geometry规格,所以当它建立时, 
我们可以明确地定位它。我们将以META-SHIFT-LEFT 系结 (bind) 此选单。所 
以在我们的$HOME/.uwmrc中我们包含了此列。如图20 - 5. 
 
          ┌——————————————————————┐ 
          │   FIG 20.5        P.260                    │ 
          │                                            │ 
          │  图20-5  在$HOME/.uwmrc的主机选单          │ 
          └——————————————————————┘ 
 
    其它三个选单我们不常用,所以我们均以META-SHIFT-MIDDLE 系结它们, 
这没什麽特别,但注意Misc. 不包含一个内建的混杂的uwm 和shell 命令。这 
          wmrc的项目如图20 - 6。 
 
          ┌—————————————————预————┐ 
          │   FIG 20.6        P.261                    │ 
          │                                            │ 
          │  图20-6  在$HOME/.uwmrc中其它的选单        │ 
          └——————————————————————┘ 
 
    uwmrc 剩馀的部份 (见图20 - 7),我们用以设定定制系结和一般视窗建构 
操作的参数。注意下列几点: 
 
    .我们选择一个较预设稍大的字型 (用"menufont=fixed"),降低选单选项 
      中的空白空间 (用"vmenupad=1"),所以选单不会很大。(menufont 可能 
      未在指南页中描述) 
 
    .我们设定所有的选单,系结和变数可被重设(用resetmenus等等),这 
      清除了uwm 的建构,所以我们不用混杂的预设建构和我们自己的建构做 
      结束。 
 
    .如果可能,我们较愿意使用滑鼠的UP事件函数而非DOWN:这种方式你能 
      藉著在松开按钮之前按下其它的按钮,来改变你的主意或中止操作。 
      (但你不能将move操作系结到一个UP事件。) 
 
          已包含一些定义uwm 选单的功能 -- 一个是杀掉应用程式视窗,另 
      一个是重新启始uwm 。它们不是必要的,但当你对系统很有经验时会很 
      有用。 
 
          ┌——————————————————————┐ 
          │   FIG 20.7        P.262                    │ 
          │                                            │ 
          │  图20-7  在$HOME/.uwmrc中系结和参数的设定  │ 
          └——————————————————————┘ 
 
20.5  结论 
 
    你已涵盖了core版中所有使用者层次的程式和如何使用它们。 
 
    你现在能够自行设定和修订成你所需的系统。大部份的修订局限於你的家 
目录(home directory)中的三个档案 -- .Xsession, .Xresources和.Uwmrc 
-- 所以它很容易控制你的环境,且可在你的系统管理者所设定的任何设计下 
执行。 
 
应用我们涵盖了一大堆的材料,且有许多的新观念包含进来,所以你尚未能完 
全吸收它,这不是我们所预期的,现在因为你已用过系统一段期间,所以回头 
重读系统的观念概观,你将发现你了解更多,且你可看到在系统表面之後的动 
机。 
 
    当你使用系统越多次,你将发现有一些面貌是你不喜欢的,但这些系统并 
没有。有一些工具和视窗相关程式可简化你的工作,且有一些应用程式对X提 
供介面有大利益,但不包含在此版本中,别失望! -- 看contrib 版软体来取 
代它。现在你知道基本系统的限制和能力,看一看其他的人利用它们做了什麽 
,这也是你可能需要系统做的。 
 
    本书的目的是让你有一个开始 -- 它并无意当一本完整的参考手册。在某 
些地方我们忽略了一些程式不常用的细节和那些对初学者易产生混淆和较复杂 
的部份。但现在你能回头重读系统提供的文件,指南页和其它的资料是非常庞 
大的,如果你知道你要做什麽和只是要某一点复习一下你的记忆,或找出某些 
事如何正确的执行,你将在其中的某处找到它们。现在你已会使用系统和中止 
系统,你能明白参考手册的意义,为了帮助你找出你自己贯通文件的方法,我 
们有一个附录包含了在这个版本中的资料名单,告诉你在何处找到它们,和如 
何更进一步的去探讨系统。 
 
应用所以,现在我们只剩下一句话给您:祝一切顺利! 
 
 

BBS水木清华站∶精华区