发信人: youyy.bbs@210.34.48.50 (ooo), 信区: Unix
标  题: X Windows使用指南(2) raner
发信站: FZU_BBS (Wed Dec  9 10:27:50 1998)
转信站: sjtubbs!sjtunews!FZU_BBS
Origin: bbs.fzu.edu.cn

BBS水木清华站∶精华区
 
寄信人: <bbs@captain.net.tsinghua.edu.cn>  
标  题: 2 -- Alex 整理 
发信站: 华南理工大学 BBS木棉站 
日  期: Tue Aug 20 08:32:29 1996 
 
        ┌———————————————————┐ 
        │      43 页 , 图 4 - 2                │ 
        │                                      │ 
        │                                      │ 
        │                                      │ 
        │图 4 - 2  滑鼠拖拽的图形表示法        │ 
        └———————————————————┘ 
 
键盘的术语: 
 
    标准的终端机键: SHIFT, DELETE, BACKSPACE, ESC 或 ESCAPE, RETURN, 
            CAPSLOCK. 
 
    游标控制键: 采有上下左右箭头的键, 如 UP, DOWN, LEFT, RIGHT. 
 
    特殊键: 压住CTRL或CONTROL 键, 再按其它的键 (例如 A键),用CTRL-A 
            表示, 有些终端机有META键, 也同样的用META-A表示. 
 
 
 
4.2 符号 
 
连续数列 
 
    在一些情况下, 你输入的命令列或系统输出的文字, 因为太长而无法在 
同一列而必需分为数列, 如果它是shell 命令, 或是一段 C语言程式码, 我 
们在第一列的最後加上一个倒斜线(backslash"\")後, 在下一列继续, 例如: 
 
    mkfontdir/usr/lib/X11/fonts/misc\ 
    /usr/lib/X11/fonts/15dpi\ 
    /usr/lib/X11/fonts/100dpi 
 
然而极少数的情况下, 我们用符号 "(contd.)" 表示本列因排版限制的缘故 
在下列继续,如: 
 
    PID TT STAT  TIME COMMAD 
    1901 c0 S 0:01 x :0 
    1902 c0 S 0:01 xterm -geometry +1+1 (contd.) 
         -n login -display unix:0 -c 
    1903 p1 S 0:00 -sh (csh) 
 
    当X装设时, 需要定一些目录树 (directory tree). 我们把目录树的 
顶端定为$TOP, 在我们的系统中, $TOP对应的目录为 /usr/local/src/X11 
,相同地,家目录 (home directory) 参考自 $HOME。 
 
 
 
4.3 本书范例的场景 
 
    本书使用大量的范例来说明,这些范例是假设我们在一个拥有下列机器 
的网路下工作: 
 
    venus     彩色萤幕,普通解析度 
    saturn  单色萤幕,普通解析度,档案工作站(file server) 
    mars   彩色萤幕,高解析度 
    neptune   非图形萤幕,拥有磁碟储存装置,电脑工作站(computer server) 
 
我们所拥有的工作站是 venus,大部分的时间我们使用它,当我们需要更高 
的解析度或在单色萤幕检查某些情况时,我们会使用 mars 或 saturn,当然 
,我们会在我们自己的工作站,以远端(remote)的方式使用所有的机器. 
 
    saturn是 venus和 mars 的档案工作站, 三者之间共享相同的档案系统 
,( 例如,它们存取档案 $HOME/.login 时,实际上是同一个档案) .neptune 
拥有它自己的档案系统,不和其他的工作站共享. 
 
 
 
4.4 本书使用的工作站架构 
 
    在本书中,所讨论的一些范例、程式名称、程式码的片段可能和你系统 
的有些差异,那是因为系统不同的关系,本书假设使用的系统为: 
 
    .硬体:SUN 3/50  工作站,三个按钮的滑鼠,萤幕大小为 1152x900个 
      像素,单色萤幕。 
 
    .作业系统:SunOS 3.4, 以 BSD 4.2 Unix 为基础。 
 
    .视窗软体:X的 MIT标准版,第11版第3 次发行。 
 
===== 
 
第5章 启动和关闭退出X 
 
在本章, 我们将学到: 
 
  .如何在自己的机器上启动X. 
 
  .如何在视窗上做一些基本操作. 
 
  .如何关闭退出X. 
 
    我们在此假设你的系统管理者已经在你的系统上装设好了X, 事实上即 
使不曾用过或不熟悉X, 装设X也不会很困难. 因此如果你有必要自己装设 
X, 本书的附录将给你一些提示. 
 
    在还未开始前, 我们需要先知道已装设好的X, 它的执行程式在那里, 
MIT 版预设的目录为 /usr/bin/X11,但很多地方是用 /usr/local/bin 或 
/usr/local/bin/X11, 当你知道了之後, 把它加到你的搜寻路径 (search 
path) 里, 如果你使用 C-Shell, 可以在你的.login档 (或者可能是.cshrc 
档) 设定路径, 如果你使用Bourne Shell, 则在.profile档中设定. 例如, 
在.login档中使用C-Shell 的命令列设定路径: 
 
    set path = (. /usr/local/bin/X11 /usr/ucb /usr/bin /bin) 
 
    如果你不设定路径, X将无法正常启动, 当你设好之後, 为了确定起见, 
先logout再login 一次, 检查路径是否设定正确 (用 echo $PATH 指令). 
 
 
5.1 启动X 
 
    在你的显示器启动X,键入命令: 
 
        xinit 
 
则会依序发生: 
 
    1.  你的整个萤幕会被设定成灰色。 
 
    2.  一个巨大的 "X" 游标出现(见图 5 - 1 ) 
 
         ┌————————————————┐ 
         │         p48   fig 5.1          │ 
         │                                │ 
         │                                │ 
         │                                │ 
         │图 5 - 1 大的 "X" 游标         │ 
         └————————————————┘ 
 
        你可以用滑鼠将它在萤幕上移动,但按滑鼠按钮或键盘都对它无影响。 
 
    3.  一个xterm 终端机模拟器的视窗出现在萤幕左上角,当游标移到这个 
        视窗时,会改变成本文游标,(见图 5 - 2),xterm 准备接受你的 
        命令。 
 
         ┌————————————————┐ 
         │                                │ 
         │        p48   fig 5.2           │ 
         │                                │ 
         │                                │ 
         │                                │ 
         │图 5 - 2 xterm 的本文游标       │ 
         └————————————————┘ 
 
 
    系统启动的画面见图 5 - 3。X现在已被启动,你可以把xterm 这个视 
窗当成一个普通的终端机来使用,执行一些普通的指令,不过它最大的价值 
在让你可以开始执行其它的X程式,我们将於稍後告诉你,现在先来让你了 
解一下X的启始动作做了些什麽。 
 
 
         ┌————————————————┐ 
         │                                │ 
         │        p49   fig 5.3           │ 
         │                                │ 
         │                                │ 
         │                                │ 
         │图 5 - 3 系统启动的画面         │ 
         └————————————————┘ 
 
 
5.1.1 xinit 的内部操作: 
 
    首先, xinit 启动Xserver程式在你的显示器上执行, server建立一个 
它自己的根视窗, 并把视窗的背景色设定成灰色, 把游标设定成一个大 "X". 
 
    在server执行的期间, server一直控制著键盘及滑鼠, 这就是你能在萤 
幕上移动游标的原因, 但是因为目前没有任何client程式要求告知键盘和滑 
鼠 "事件",所以server只是追踪滑鼠游标的移动, 而所有其它的键盘或滑鼠 
输入虽然都经过server处理但均被放弃, ( 因为没有client程式有兴趣 ), 
这就是按键盘或滑鼠按钮没有反应的原因. 
 
    接下来, xinit 启动xterm 程式执行, xterm 对server而言是一个client 
程式, xterm 要求server建立一个视窗, 而且保持告知在这个视窗中的滑鼠 
和键盘事件, xterm 设定在视窗中执行一个shell , 当指标移至视窗之内便 
准备接受输入. 
 
    键盘输入被送至shell 就如同在一部真的终端机上输入一般, 从shell 
( 及其副程式 )的输出藉著xterm 显示在视窗上, xterm 也接受滑鼠输入, 
使得你能设定不同的程式操作参数和进行本文的剪贴 (cut and paste ) . 
 
    你可以观察到系统执行这些动作的步骤, 例如当在系统启动後, 在xterm 
视窗内执行 ps a 命令: 
 
    PID TT STAT TIME COMMAND 
    1900 C0 S 0:00 xinit 
    1901 C0 S 0:01 X:0 
    1902 C0 S 0:01 xterm -geometry +1+1 -n login -display unix:0 -c 
    1903 p1 S 0:00 -sh (csh) 
    1904 p1 R 0:00 ps 
 
以上的显示说明xinit 在主控台(console )显示器上被启动,它初始化server 
,X显示为零。接著xterm 在一个虚拟(pseudo)的终端机上执行,xterm 启 
动一个shell 执行,使得它能处理你在xterm 视窗所下的命令。最後,我们执 
行ps命令产生上述的列表。 
 
    我们将在第8章讨论更多的xterm 细节, 从现在起, 我们假设xterm 被视 
为一个DEC VT102 的终端机, 我们把重点转移到系统启动之後, 我们能做些什 
麽. 
 
 
5.2 如何执行一些X程式 
 
    你目前有一个X server 控制的显示器,一个叫xterm 的client程式,允 
许你输入命令,本节告诉你如何执行其它的X程式。 
 
    因为X的client程式和X server 完全独立,所以不需要特别的动作启动 
它们,你可以像执行一般的程式一样执行它们。但是这些client程式需要确实 
知道它们用的是那一个显示器。实际上因为xterm 一开始设定了DISPLAY 环境 
变数,给定了它使用的显示器名称,而其它的client程式用此当作预设显示器 
,因此你不需多做其它的事。 
 
 
5.2.1 如何执行X的时钟,xclock 
 
    我们用X的时钟当作一个简单的范例,先确定指标停在xterm 视窗中,然 
後输入命令: 
 
    xclock 
 
一个小的时钟影像出现在萤幕左上角,覆盖了第一个视窗一部份,如图 5 - 4 
 
         ┌————————————————┐ 
         │                                │ 
         │        p51   fig 5.4           │ 
         │                                │ 
         │                                │ 
         │                                │ 
         │图 5 - 4 xclock 启动後的画面    │ 
         └————————————————┘ 
 
现在有三个问题要克服: 
 
    第一个问题:由於xterm 这个 "终端机" 已经有一个程式(xclock)在执 
行,所以我们无法再输入其它的命令,该怎麽办? 
 
    唯一的办法就是停掉xclock,但当你按下ctrl-c或DEL 键时,xclock便会 
消失,要克服这种状况,你需要非同步(asynchronously)执行xclock,用命令: 
 
        xclock  & 
 
则目前xterm 至少能接受你输入其它的命令。 
 
    第二个问题:如何中止xclock? 
 
    X server 本身没有提供直接的介面中止应用程式,但是有一个叫xkill 
的client程式可让你杀掉应用程式,在xterm 视窗内输入xkill 命令便可启动 
这个程式,xkill 会显示一个覆盖性的方形游标(draped box cursor ),见 
图5-5 ,移动这个游标到任何你想杀掉的应用程式的视窗中,碰触左按钮,应 
用程式的视窗会消失且应用程式和xkill 会一起结束,你也会得到如下的讯息: 
 
    xkill:killing creator of resource 0x40004d 
    XIO:fatal IO error 32 (Broken pipe) on X server "unix:0.0" 
    after 207 requests (178 known processed) with 0 events remain- 
    ing. 
    The connection was probably broken by a server shutdown or kill- 
    client. 
 
         ┌—————————————————┐ 
         │                                  │ 
         │        p52   fig 5.5             │ 
         │                                  │ 
         │                                  │ 
         │                                  │ 
         │图 5 - 5 xkill的覆盖性的方形游标  │ 
         └—————————————————┘ 
 
如果为了某些缘故你无法进到应用程式的视窗内用xkill 中止它,你通常可以用 
UNIX的办法:找出process 的ID,然後杀掉它,例如: 
 
    $ps a | grep xclock 
    1907 p2 I 0:00 xclock 
    1909 p2 S 0:00 grep xclock 
    $kill 1907 
    [1] Terminated xclock 
    $ 
 
    第三个问题:如何避免时钟和xterm 视窗重叠? 
 
    这个问题换个问法是:你如何安排应用程式视窗的位置? 
 
    你可以用前一章说明过的 "geometry" 的参数来解决,例如输入命令: 
 
        xclock -geometry 200x300+400+500 & 
 
这个命令告诉xclock建一个宽200 高300 个像素的视窗,位於萤幕左上角右边 
400 个像素,下边500 个像素。 
 
    以上的三个问题都解决了,下一章会介绍更巧妙的解决方法。 
 
使用彩色 
 
    如果你拥有彩色显示器,那麽不妨以xclock进行你指定和使用彩色的实验, 
xclock有数种选项做彩色识别: 
 
    -bg color   设定背景颜色 
 
    -fg color   设定前景颜色 
 
    -hd color   设定时钟指针的颜色 
 
    -hl color   设定时钟指针边线的颜色 
 
输入指令: 
 
    xclock -bg turquoise -fg red -hd magenta 
 
你可以看到一个彩色的钟,稍後我们会再说明颜色的正确使用名称。 
 
    xclock启动之後,便不再需要和使用者交谈(interaction ),下一节我 
们将介绍另一个需要从键盘和滑鼠输入的小程式。 
 
 
5.2.2 xcalc - 桌上型计算器 
 
    xcalc 是一个X的计算器,移动指标到xterm 视窗,输入命令: 
 
      xcalc - geometry +700+500 & 
 
一个像TI-30 型计算器的视窗出现了(如图 5 - 6),你可以用滑鼠或键盘 
来操作它。 
 
         ┌————————————————┐ 
         │                                │ 
         │        p54   fig 5.7           │ 
         │                                │ 
         │                                │ 
         │                                │ 
         │图 5 - 6 xcalc 桌上型计算器     │ 
         └————————————————┘ 
 
    使用滑鼠时,你可以移动指标到你需要的计算器按钮,按滑鼠左按钮表示 
按下按钮。如果是用键盘时,键盘上的一些键明显的对应计算器按钮,例如依 
序按键盘键1 ,+ ,2 ,+ ,3 和 =键,代表了算1 ,2 ,3 的总和,由於至 
少目前你可以用指标指到计算器的任一按钮,因此键盘和计算器那些比较不明 
显的对应关系,在此不作进一步说明。 
 
    xcalc 比 xclock 有一个优点,那就是容易中止它。在计算器AC按钮上碰 
触滑鼠右按钮即可中止,大部份的X应用程式均有类似的中止设备。 
 
 
5.3 关闭X 
 
    要关闭X视窗,只要移动指标到最初xterm 的视窗,输入: 
 
        logout 
 
则视窗消失,server终止,X也被关闭。 
 
    详细点说,xterm 查觉到shell 终止时,也终止自己,而xinit 一查觉xterm 
已经结束,便杀掉server後离开。 
 
 
5.4 总结 
 
    你现在已能启动系统、执行程式和关闭系统,所以你可以自行做一些实验 
执行xclock一小段时间,给不同的geometry设定,极度放大或缩小时钟,摆在 
萤幕的任何位置(甚至萤幕之外!) 
 
    在本章中,我们看到了如何启动程式,如何执行一些视窗应用程式,如何 
结束视窗系统。换句话说,你已经能使用系统。 
 
    但是,有许多的功能没有提供,例如: 
 
    . 重定视窗大小 
 
    . 在萤幕任意移动视窗 
 
    . 将一个视窗从另一个视窗之下移出摆在案头上(或者把它堆到下面) 
 
    . 用较方便的方法启动视窗应用程式 
 
    这些以及其它更多的功能并非由基本的X系统提供,而是由下一章我们要 
讨论的视窗管理器提供。 
 
===== 
 
第6章  视窗管理器基础  -- uwm 
 
    前一章我们看到了X系统只提供基本的视窗功能,但是实际上系统应该需 
要更多更方便及容易使用的功能,在X中,这些由视窗管理器 (Window manager) 
提供,本章告诉你什麽是视窗管理器,以及如何使用MIT core版所提供的唯一的 
视窗管理器 -- uwm  。 
 
 
6.1 什麽是视窗管理器 
 
    我们很快的摘要说明以便让你了解视窗管理器的功能。系统最基本的部份 
 -- 也就是server,它只提供最基本的视窗功能,如建立视窗、在视窗中写入 
文字或画图形、控制键盘和滑鼠的输入和去掉视窗等,Server它不提供使用者 
介面,它只提供建立介面的基本结构。 
 
    我们把使用者介面分为两个部份 -- 管理介面和应用介面,本章讨论管理 
介面,管理介面由视窗管理器控制,提供管理 "案头" 的功能,例如建立应用 
视窗,在萤幕上移动它们,重定大小等等。 
 
    你也需要能够: 
 
    . 使一个原来被遮住的视窗重新显现 
 
    . 方便地启动或中止应用程式 
 
    . 更新 (refresh)萤幕 
 
    . 表徵图化 (iconify)和解除表徵图化 (de-iconify) 
 
 
6.2 启动 uwm 
 
    当X被启动後,你可以在萤幕上的任何shell 视窗启动uwm ,因为视窗管 
理器也只是一个普通程式而已,你可以在执行X的任何期间内启动uwm ,但通 
常是在一开始时。 
 
    现在你可以先启动X,接著在xterm 视窗内输入下列命令: 
 
        uwm & 
 
uwm 执行後会让终端机的喇叭发出哔声表示它已初始化且准备为你工作,但你 
在萤幕上看不到有任何改变,执行一个ps a,你可以看到现在有一个uwm 程式 
如下: 
 
     PID TT STAT TIME COMMAND 
    1900 co S 0:00 xinit 
    1901 co S 0:01 x:0 
    1902 co S 0:01 xterm -geometry +1+1 -n login -display unix:0 -c 
    1903 p1 S 0:00 -sh (csh) 
    1904 p1 I 0:00 uwm 
    1905 p1 R 0:00 ps 
 
现在我们有一个视窗管理器了,接下来我们将利用它完成一些基本的操作。 
 
 
6.3 基本视窗操作 -- uwm 的选单 
 
    uwm 有一个选单的功能,可用来管理选单,其存取的方法如下: 
 
    1.  将指标移到灰色萤幕背景的任何地方。 
 
    2.  按住滑鼠的中按钮且保持按住,一个标头为 "WindowOps" 的下拉式 
        选单将会出现,如图 6 - 1 
 
              ┌————————————————┐ 
              │                                │ 
              │  p59    fig 6.1                │ 
              │  ( 合并 p60  fig 6.2)          │ 
              │                                │ 
              │                                │ 
              │                                │ 
              │图 6 - 1  uwm 的 WindowOps 选单 │ 
              └————————————————┘ 
 
    3.  继续按住按钮,上下移动指标,被指标指到的选项会以高亮度或反白 
        表示,当你放松按钮,表示此高亮度的选项被选择。 
 
    如果你不想选择,那就按一下滑鼠其它的钮,或者将指标移到选单的边框 
外面,则选单将会消失。 
 
    现在□试选择Refresh Screen (更新萤幕) ,并且放松按钮,则萤幕闪动 
一下并完全重画 (re-drawn) 。 
 
    本章剩馀的部份,将让我们了解如何利用其它的选项,满足在上一章总结 
中所述我们所需的功能。 
 
 
6.4 移动视窗 
 
    在萤幕上移动一个视窗步骤如下: 
 
    1.  将指标移至背景,按住滑鼠中按钮,叫出uwm 的下拉式选单。 
 
    2.  选择 "Move" 选项并松开按钮,此时游标改变成 "手指" (pointing hand) 
        形,见图 6 - 2 
 
              ┌——————————————┐ 
              │                            │ 
              │  p60    fig 6.3            │ 
              │                            │ 
              │                            │ 
              │                            │ 
              │图 6 - 2 手指形游标         │ 
              └——————————————┘ 
 
    3.  将 "手指" 移动到你打算移动的视窗中,按下任何按钮,保持按住的 
        状态,视窗上出现了九宫格,且游标变成十字箭头 (arrow cross)形, 
        见图 6 - 3 
 
              ┌——————————————┐ 
              │                            │ 
              │  p60    fig 6.4            │ 
              │                            │ 
              │                            │ 
              │                            │ 
              │图 6 - 3 十字箭头形游标     │ 
              └——————————————┘ 
 
    4.  继续保持按住按钮,移动游标,将九宫格拖拽至你想摆放视窗的新位 
        置。 
 
    5.  松开按钮,视窗会跳到新的位置,同时九宫格消失。 
 
    以上步骤的示意图见图6 - 4 ,现在你可以自己□试将视窗移至萤幕右下角。 
 
              ┌——————————————┐ 
              │                            │ 
              │  p61    fig 6.5 (???)      │ 
              │                            │ 
              │                            │ 
              │                            │ 
              │图 6 - 4 移动视窗示意图     │ 
              └——————————————┘ 
 
    注意:你可以移动视窗使其部份因超过萤幕边框而消失,如果纯属意外的 
          话,再作一次 "Move" 动作即可。 
 
 
6.5 重定视窗大小 
 
    你可以在一度空间 (one dimension)或两度空间重定视窗大小,例如:你 
可以只把视窗加宽,或同时将视窗变高及变窄。重定视窗大小步骤如下: 
 
    1.  叫出uwm 的下拉式选单,选择 "Resize" 选项,如同移动视窗,你的 
        游标变成 "手指" 形。 
 
    2.  移动游标到欲重定大小之视窗的右下角。 
 
    3.  按住滑鼠按钮,保持按住状态,有三种变化发生。 
 
          . 游标变成 "十字箭头" 形 
          . 九宫格出现,但不像前节和视窗一样大,它比较小。 
          . 出现一个长方盒,显示目前视窗的大小 (见图6 - 5) 
 
              ┌——————————————┐ 
              │                            │ 
              │  p62    fig 6.6            │ 
              │                            │ 
              │                            │ 
              │                            │ 
              │图 6 - 5 重定视窗大小操作时,│ 
              │       显示视窗大小的长方盒 │ 
              └——————————————┘ 
 
    4.  移动游标,延展或挤压九宫格直到大小合乎需求。 
 
    5.  放松滑鼠按钮,视窗改变大小将和九宫格一致,同时九宫格消失。 
 
    以上步骤的示意图见图 6 - 6,你亦可用xterm 视窗练习重定大小。 
 
              ┌——————————————┐ 
              │                            │ 
              │  p63    fig 6.7 (???)      │ 
              │                            │ 
              │                            │ 
              │                            │ 
              │图 6 - 6 重定视窗大小示意图 │ 
              └——————————————┘ 
 
 
6.5.1 九宫格的目的 
 
    在重定大小的操作中,九宫格具有让你预先看到重定视窗的大小,而当你 
在步骤 3按下按钮时,当时游标在九宫格的位置决定了你的动作: 
 
    . 当你在九宫格的四个角的格子或最中间那一格按下按钮,你可以任意水 
      平或垂直改变视窗的大小。 
 
    . 当你在九宫格四边中间那一格按下按钮,你就只能在一度空间改变大小, 
      你只能移动视窗最接近你按下按钮的格子的那一边。 
 
 
6.5.2 大小限制 
 
    那个显示目前视窗大小的长方盒,其大小的单位视情况有所不同,文字视 
窗,其意义为若干行乘若干列字元 (例如xterm 通常为80x24 字元大小) ,图 
形视窗,其单位则为像素 (例如xclock预设的大小为150x150 像素) 。 
 
    有些视窗会被限制外形或大小,例如xcalc 有最小尺寸的限制:它不允许 
你把视窗缩小到连计算器上按钮都无法显示的地步,xterm 虽然可以任意重定 
大小,但它以字元为单位,它不会允许视窗最下一行字元只出现一半的情况发 
生,相对的;xclock几乎对任意大小或外形均不受限制。 
 
 
6.6 建立新视窗 
 
    利用视窗管理器uwm 的 "NewWindow"选项,我们可以很容易的建立一个新 
视窗,我们在本节内描述如何启动一个新的xterm ,uwm 如何帮助你启动其它 
的应用程式,以及你如何控制应用视窗的起始位置和大小。 
 
 
6.6.1 建立一个新的xterm 视窗 
 
    建立一个新的xterm 视窗步骤如下: 
 
    1.  移动游标到背景视窗,叫出uwm 的下拉式选单,选择 "New Window" 
        选项,在松开按钮的一瞬间,有三种变化发生:(不需按住滑鼠按钮) 
 
        . 游标改变成 "左上角" 形 (见图6 - 7)。 
        . 一个闪动的新视窗边框出现了,游标在左上角。 
        . 一个类似我们前节看过表示视窗大小的长方盒出现,和以前不同的 
          是,它比以前多了视窗的名称 (见图6 - 8)。 
 
              ┌——————————————┐ 
              │                            │ 
              │  p64    fig 6.8            │ 
              │                            │ 
              │                            │ 
              │                            │ 
              │图6 - 7 "左上角" 形游标     │ 
              └——————————————┘ 
 
              ┌———————————————┐ 
              │                              │ 
              │  p65    fig 6.9              │ 
              │                              │ 
              │                              │ 
              │                              │ 
              │图6 - 8 当建立新视窗时, 出现  │ 
              │  显示视窗名称和大小的长方盒  │ 
              └———————————————┘ 
 
    2.  移动游标使得新视窗的左上角移到你所需要的位置。 
 
    3.  碰触一下左按钮,一个新的视窗便产生了,显示视窗大小的长方盒和 
        闪动的边框同时消失。 
 
    你可以像使用原始xterm 视窗一样地使用这个新视窗来执行普通或X的应 
    用程式。 
 
    注意 1:如果你在步骤 3碰触的不是左按钮,则视窗的大小会有所不同, 
            特别是你碰触的如果是中按钮,则你的新视窗会小到几乎看不到 
            的地步,如果发生这种情况,你可以用前节重定视窗大小的方法 
            改善 (细节部份稍後会提及) 。 
 
    注意 2:如果你把视窗的一部份移到萤幕之外,将会使得视窗的一部份无 
            法看见,若你并不是故意如此,可以用选项 "Move" 改善。 
 
 
6.6.2 建一个供任何应用程式使用的视窗 
 
    我们仍然可用以前的方法 -- 在xterm 视窗的shell 中输入一行命令来启 
动应用程式,但是现在你有视窗管理器程式在执行,所以你可以用交谈的方式 
来控制视窗的起始位置,而不需在命令列中设定geometry参数。 (事实上,uwm 
也可控制视窗起始的大小,我们会在下节描述。) 
 
    举一个例子,假设我们要在萤幕的右上角启动xclock: 
 
    1.  在xterm 视窗中,输入命令列: 
 
        xclock & 
 
        就如同 "NewWindow"选项一般,你可以看到一个描述视窗大小的长 
        方盒,一个 "左上角" 形游标,一个和时钟同样大小的闪动边框。 
 
    2.  不要按任何钮,只要把边框拖拽到任何你想要摆放的位置。 
 
    3.  碰触左按钮,一个时钟取代了闪动边框出现。 
 
    注意:如果在步骤 3你碰触的不是左按钮,则时钟的大小会不同,但不致 
          於像xterm 那麽夸张。 
 
 
6.6.3 指定新视窗的大小 
 
    前面提到当你建立新视窗时,若你碰触的不是左按钮,会有一些奇怪的情 
况发生,事实上三个按钮各有不同的意义,你可以依需要做适当的选择: 
 
    1.  左按钮:碰触左按钮会使得: 
 
          位置:将视窗左上角的位置依目前游标的位置决定。 
          大小:应用程式本身原先预设的大小。 
 
    2.  中按钮:你不应该碰触中按钮,但如果你压住不放的话,你可以藉著 
                改变视窗的右下角来改变视窗的大小,然後松开按钮: 
 
          位置:视窗左上角的位置依你压下中按钮时游标的位置决定,右下 
                角则根据你放松按钮时决定,压住按钮的期间,视窗的边框 
                就像橡皮筋般可延展或压缩。 
          大小:根据松开按钮时的右下角决定。 
 
        如果应用程式指定了视窗最小的尺寸限制,则橡皮筋边框被压缩到比 
        最小视窗还小时会自动消失,确保你无法建立一个比最小视窗限制还 
        小的视窗。 
 
    注意:如果你让视窗的面积为零,会有一些奇怪的情况发生,例如你在启 
          动xclock时,碰触中按钮,则xclock视窗会跑到萤幕左上角,大小 
          为预设的大小。 
 
    3.  右按钮:碰触右按钮会使得: 
 
          位置:视窗左上角依目前游标的位置决定。 
          大小:视窗的宽度为预设的宽度,视窗的高度由游标的位置直到萤 
                幕的底边,如果大小低於应用程式预设之最小视窗限制的话, 
                则用预设的高度来代替。当然,这也意味著会有一部份的视 
                窗超出萤幕,所以无法看到。 
 
 
6.6.4 更多的有关於geometry参数的设定 
 
    关於geometry参数的设定,过去我们都是用视窗左上角的位置相对於萤幕 
左上角位置的方式设定,其实,我们可以用视窗的任何一个角来决定视窗位置 
,先复习一下geometry的设定方式: 
 
    width x height <xpos> <ypos> 
    宽度  x 高度   <x位置><y位置> 
 
     <xpos>   决定了视窗水平的座标,可用下列方式表示: 
 
    +offset :表示视窗的左边位於距离萤幕左边offset个像素的位置。 
    -offset :表示视窗的右边位於距离萤幕右边offset个像素的位置。 
 
     <ypos>   决定了视窗垂直的座标,同样地也可用下列方式表示: 
 
    +offset :表示视窗的上边位於距离萤幕上边offset个像素的位置。 
    -offset :表示视窗的下边位於距离萤幕下边offset个像素的位置。 
 
以下有几个范例: 
 
    100x100+50+60   :这是我们过去用的方式,视窗的左上角位於距离萤幕 
                      左边50个像素,上边60个像素。 
 
    100x100-0-0     :视窗的右下角位於萤幕的右下角。 
 
    100x100-80+160  :视窗的右上角位於距离萤幕右边80个像素,萤幕上边 
                      160 个像素。 
 
    100x100+20-40   :视窗的左下角位於距离萤幕左边20个像素,萤幕下边 
                      40个像素。 
 
    上述例子的正负号代表了视窗的边和萤幕的边的关系,而不是偏移量的正 
负号,事实上偏移量有它自己的正负号,例如: 
 
    100x100+600+-50 :视窗位於萤幕的中上方,且视窗的上半部超出萤幕。 
 
    100x100--50-+20 :视窗位於萤幕的右下角,且视窗的下边距萤幕20个像 
                      素,视窗的右半部超出萤幕。 
 
 
6.7 管理你的萤幕空间 
 
    现在你可以启动许多的应用程式,建立许多的视窗,这些视窗很可能会互 
相重叠,但是你有三种方法可以用来管理你的视窗,使你更方便地存取它们: 
 
    . 把视窗缩小,利用前述的 "Resize" 选项。 
 
    . 把视窗 "堆叠(stack)"起来,你现在需要的视窗摆到堆叠最上层,其它 
      的放在比较下层,你可以用选单上的 "Raise" "Lower" "CircUp" 和 
      "CircDown"来改变堆叠次序。 
 
    . 把视窗换成非常小的视窗,称为 "表徵图(icons)",因此所占的萤幕空 
      间极小,但只要需要你随时可还原它们,你可以利用选单上的"NewIconify" 
      和"AutoIconify" 选项来办到。 
 
 
6.7.1 变动堆叠中视窗的次序 
 
    视窗在萤幕上,就如同文件在你桌面上,可以互相重叠,( 如图6 - 9) 
 
              ┌——————————————┐ 
              │                            │ 
              │  p69    fig 6.10           │ 
              │                            │ 
              │                            │ 
              │                            │ 
              │图6 - 9 相互重叠的视窗      │ 
              └——————————————┘ 
 
为了让你容易获得你想要的视窗,uwm 允许你: 
 
     .  将一个视窗移到堆叠最上层,不管它现在在堆叠的哪个位置。 
 
     .  将一个视窗移到堆叠最下层,不管它现在在堆叠的哪个位置。 
 
     .  循环堆叠,将所有在堆叠中的视窗移动一层,将最後一层的视窗移到 
        堆叠另一端开头,你可以向上或向下循环。 
 
    1.  将一个视窗移到堆叠最上层 -- Raise 
 
        Raise 选项将一个视窗移到堆叠最上层,所以这个视窗应该变成全部 
        可见,你可以Raise 任何视窗而不管它目前在堆叠何处。Raise 一个 
        视窗的步骤: 
 
        1). 从选单中选取 "Raise"选项,游标变成手指状。 
        2). 将游标移到你想要Raise 的视窗上。 
        3). 碰触任意一个滑鼠按钮,视窗保持在原来的位置,但那些原来被 
            其它的视窗遮住的部份均会重现,其它的视窗则被盖在下面。 
 
    2.  将一个视窗移到堆叠最下层 -- Lower. 
 
        Lower 选项可将一个视窗移到堆叠的最下层,你可以Lower 任何视窗 
        而不管它目前在堆叠何处。Lower 一个视窗的步骤: 
 
        1). 从选单中选取 "Lower"选项,游标变成手指状。 
        2). 将游标移到你想要Lower 的视窗上。 
        3). 碰触任意一个滑鼠按钮,视窗保持在原来的位置,其它原来被它 
            遮住的视窗会显现出来,而它本身的部份则被这些视窗遮住。 
 
    3.  循环堆叠 -- CircUp和CircDown 
 
        CircUp和CircDown选项用来旋转堆叠内的视窗,所差别的只是它的 
        "方向" 而已。循环向下(circulate down)的步骤为: 
 
        从选单中选取"CircDown"选项,所有在萤幕上的视窗位置均不变, 
        但原来在最上层的视窗被移至最下层,所有原来被它遮住的视窗 
        现在变成遮住它。 
 
        CircUp和上述成对比,它把原来最下层的视窗移至最上层,遮住那些 
        原来遮住它的视窗。 
 
 
6.7.2 表徵图化一个视窗 
 
    虽然你可以靠著Raise 或Lower 变动视窗的顺序,但有时视窗实在太多了, 
为了给你自己更多的萤幕空间,你可以将那些目前不需要的视窗 "表徵图化" 
(iconify) 。 "表徵图化" 的意义是把应用视窗换成一个非常小的视窗後摆在 
一边,直到再度需要用它们为止。有些应用程式拥有它们特别的 "表徵图" , 
但是大部份都是让视窗管理器去建一个,uwm 的预设表徵图是一个把应用程式 
名称摆在中间的灰色长方形。正常的xterm 的表徵图见图6 - 10 
 
              ┌———————————————┐ 
              │                              │ 
              │  p71    fig 6.14             │ 
              │                              │ 
              │                              │ 
              │                              │ 
              │图6 - 10 正常的xterm 的表徵图 │ 
              └———————————————┘ 
 
    共有两种方法可以表徵图化一个视窗,第一种特别适合尚未表徵图化的视 
窗,第二种适合曾经表徵图化的视窗。 
 
    1.  表徵图化一个新视窗 -- NewIconify 
 
        1). 从选单上选取"NewIconify"选项,出现 "手指状"游标。 
        2). 将游标移到需要表徵图化的视窗。 
        3). 按下滑鼠任意钮,保持按住状态,游标变成 "十字箭头" 形,且 
            出现一个小九宫格,这个九宫格代表未来的表徵图。 
        4). 保持按住按钮,将九宫格拖拽至你想要的位置。 
        5). 松开按钮,九宫格会被表徵图取代,原来的视窗消失。 
 
    因为NewIconify让你选择表徵图的位置,所以它适合新的视窗;当然对任 
何应用视窗均可使用,特别是你想改变表徵图位置的时候。 
 
    2.  表徵图化一个 "旧" 的视窗 -- AutoIconify 
 
        AutoIconify 会将表徵图放在上一次出现的位置,如果这个视窗未曾表 
        徵图化过,则放在游标所在的位置。 
 
        1). 从选单上选取"AutoIconify"选项,出现 "手指状"游标。 
        2). 将游标移到需要表徵图化的视窗。 
        3). 碰触任何按钮,原来的视窗消失,表徵图出现在上一次出现的位 
            置,若这个视窗是第一次表徵图化,则表徵图出现在目前游标所 
            在的位置。 
 
 
移动一个表徵图 
 
    一个表徵图就像一个视窗,因此你可以利用"Move"选项,像移动视窗一样 
移动表徵图。 
 
 
6.7.3 解除表徵图化 -- 将表徵图还原成一个视窗 
 
    将表徵图还原成一个正常的视窗,它的步骤和表徵图化类似,甚至在选单 
上,使用相同的选项,换句话说,"AutoIconify" 和"NewIconify"这两个选项, 
如果是在视窗的状况下选择,会变成表徵图,反之如果是表徵图,则会变成视 
窗。 
 
    对於位置的处理也是同理可推,使用 "AutoIconify"时,当你在表徵图上 
碰触按钮,原来的视窗会在原来的位置出现。如果用"NewIconify"选项,按住 
按钮则会出现和原视窗大小相同的九宫格,你可以拖拽九宫格至你要摆放视窗 
的位置,松开按钮则在选定的位置上出现原来的视窗。 
 
 
6.8 中止应用程式视窗 
 
    uwm 选单有一个选项让你杀掉一个应用程式视窗,当你决定不再需要或是 
想要去掉一个视窗时,杀掉的步骤如下: 
 
        1.  从选单上选取"KillWindow"选项,游标变成 "手指状" 。 
 
        2.  将游标移到你想要去除的视窗上。 
 
        3.  碰触一下滑鼠任何按钮,视窗消失,内含的应用程式随之中止执 
            行。 
 
    当视窗消失後,你可以在原来下命令的xterm 视窗看到和前一章使用xkill 
後类似的讯息。 
 
注意 1:如果你杀掉最原始的xterm 视窗,xinit 会查觉到并关闭server( 与 
        前一章相同)。 
 
注意 2:如果你杀掉一个表徵图视窗,这样做会中止视窗管理器,所有的小图 
        形都会还原成视窗,这是合理的行为,因为只有视窗管理器才能拥有 
        表徵图视窗。 
 
 
6.9 叫用uwm 选单的其它方式 
 
    截至目前为止,我们叫用uwm 选单唯一的方法就是将游标移到萤幕的背景 
上且按住滑鼠的中按钮,但是如果一个应用视窗占用了整个萤幕,那该怎麽办? 
你会因为找不到萤幕背景而无法叫用选单,以致什麽事都不能做吗? 
 
    答案很简单,有另外的办法叫用选单: 
 
    1.  同时按下META和SHIFT 键,保持按住。 
 
    2.  按住滑鼠的中按钮,uwm 选单即可出现 (你可以现在或稍後放开META 
        和SHIFT键)。 
 
    3.  像前几节的方法一样选择选项。 
 
    选单的操作方法和以前一样,只有一点不同:如果你把游标移出选单的边 
,选单不仅是消失而已,一个标头为Preferences(喜好) 的选单出现了,你可 
以利用这个选单来设定一些参数。例如键盘被按时会不会有声音(keyclick), 
喇叭的音量等等。如果你并不需要设定,将游标移出选单,或者碰触滑鼠的任 
一按钮即可离开选单。 
 
 
6.10  摘要 
 
    在本章,你学会如何启动和使用uwm 视窗管理器:利用uwm 的选单,你可 
以新建一个应用视窗、移动视窗和重定一个视窗的大小、将视窗转成表徵图或 
还原、杀掉一个client应用视窗,这些功能已涵盖了大部份的应用需求。 
 
    uwm 只是许多视窗管理器中的一个而已,你可以换一个别的来使用。MIT 
core  版没有提供其它的视窗管理器,但是contrib 版则包含了好几个由第三 
集团所提供的视窗管理器,几乎使得MIT 版的视窗管理器成为半荒废的状态, 
所以你可以选择各种不同形式的介面程式,甚至对我们前数章所提的介面程式, 
一个也不用。 
 
有二个视窗管理器特别值得一提: 
 
    twn 是一个在应用视窗上方有标题棒(title bar) 的视窗管理器,藉著碰 
触或拖拽标题棒的一部份来管理视窗,介面的方式非常类似Apple 公司Macintoch 
电脑,一个twn 的控制棒如图6 - 11。 
 
              ┌———————————————┐ 
              │                              │ 
              │  p74    fig 6.15             │ 
              │                              │ 
              │                              │ 
              │                              │ 
              │图6 - 11 一个由twn 视窗管理器 │ 
              │所建立含有控制棒的视窗        │ 
              └———————————————┘ 
 
 
    rtl 是一个绝不让视窗彼此重叠的视窗管理器,它会让一个视窗尽量占住 
最多的萤幕空间;稍後,如果你扩张一个视窗,它会压缩邻近的视窗以挪出空 
间。典型的rtl 画面如图6 - 12。 
 
              ┌——————————————┐ 
              │                            │ 
              │  p75    fig 6.16           │ 
              │                            │ 
              │                            │ 
              │图6 - 12 由 rtl视窗管理器   │ 
              │         控制的萤幕         │ 
              └——————————————┘ 
 
    如果有需要,你可以使用时将视窗管理器半途切换到另一个视窗管理器, 
也就是杀掉一个,启动另一个,以下的步骤可当作一个练习:建立数个视窗, 
将它们表徵图化,利用前章所述PS和kill命令杀掉uwm ,或者利用uwm 选单中 
的"Exit"选项也可以,你会发现所有的表徵图都消失且还原成应用视窗,但你 
目前全然无法控制;如果你再启动uwm ,你又可以管理它们了,但是你必须将 
那些应用视窗重新表徵图化才会变成表徵图。如果你想要换用其它的视窗管理 
器程式,同样地,你可以在杀掉前一个视窗管理器後启动它。 
 
    在以後的章节,我们会更深入的讨论uwm ,告诉你那些在本章中未曾讨论 
的选项功用,我们也会告诉你如何利用uwm 而不叫用它的选单,更快更方便地 
直接管理视窗。 
 
    视窗管理器只决定管理介面,另一半的使用者介面为应用介面 -- 如何和 
应用程式交谈和利用滑鼠或键盘控制它们。在第8章我们会以xterm 为例,看 
到许多它的应用介面的面貌。但在这之前,我们先岔开来讨论X的网路能力, 
以便你能尽快用到大部份的系统功能。 
 
===== 
 
第7章  使用X的网路设备 
 
    X的网路特点在於让你可以在网路上的任何机器执行应用程式,而将其输 
出显示在你自己机器的显示器上,这是X最重要的功能之一,但却很容易使用。 
 
    以下将描述你如何指定一个远方终端机,如何实际使用这些功能,最後, 
我们再描述如何在网路上从其它的机器上控制或限制存取你的显示器。 
 
 
7.1 指定一个远方终端机 -- -display  选项 
 
    几乎所有的X程式都接受以一个命令列的选项来指定使用哪一个显示器 ( 
换个说法,连接到哪一个X server ),这个选项的格式为: 
 
    -display displayname 
 
让我们更进一步讨论显示器名称(displayname)的格式。 
 
    你会告诉程式它的输出是哪一个显示器 (网路上任何你可以选择的显示器)。 
明显地,网路上指定机器的名称一定包含在内,但不止於此,因为一些 (大型) 
机器可以有好几个I/O 工作站,每一个工作站又拥有自己的键盘,滑鼠等等; 
尤有进者,一个工作站还可能控制了好几部终端机。综上所述,显示器名称需 
要包含三个元素,hostname,display number和screen number ,我们将详细 
解释并举例说明。 
 
 
7.1.1 Hostname 
 
    hostname是在网路上与显示器直接连接的机器名称,hostname也决定了应 
用程式和server是如何连接的。简单地说: 
 
    假使Server在你自己本地的机器上执行,你有两种选择: 
 
    1.  省略掉hostname,系统会选择最有效率的方式和server交谈。 
 
    2.  定hostname为"unix",系统将用Unix domain sockets 作通信。("Unix 
        domain" 意指socket用传统Unix档案名称 (例如/dev/urgent)来命名. ) 
        在命名之後需加一个冒号(:), 即使你省略hostname,你仍需要加冒号。 
 
    假使Server在远方的机器上执行,你一样有两种选择,依你网路上用的通 
    信系统而定: 
 
    1. TCP/IP :大多数的Unix系统使用此种通信方式, 简单的方法是用在你 
       区域网路上已知的normal name (例如"venus" 或"saturn ")。你也可 
       以用 full Internet name (例如"expo.lcs.mit.edu"或它的 
       Internet address "129.89.12.73")。在 name 後,需要加一个冒号。 
 
    2. DECnet :用你连接到的机器上的DECnet nodename,在hostname加两个 
       冒号(::). 
 
 
7.1.2 display number 
 
    显示器是一组监视器,萤幕,连接一个键盘和滑鼠的逻辑萤幕的组合。换 
句话说,即是使用者工作的地方,在一个给定的CPU 上,显示器从 0开始编号, 
display number即是指哪个编号的显示器被使用,即使display number为 0, 
也不可省略。 
 
 
7.1.3 screen number 
 
    对於连接到显示器上数个萤幕也被从 0开始编号,screen number 为你使 
用萤幕的编号,和display number以一个句点 (.)隔开,screen number 为 0 
时可省略,若省略时,其前面的句点一并省略。 
 
 
7.1.4 范例 
 
    以下为一些显示器格式的范例: 
 
    . 假设为本地的机器,预设萤幕为 0,以下二者均可: 
 
          unix:0 
          :0 
 
    . 假设你指定你自己的机器 (通常是venus),但你需要检验TCP/IP网路的 
      操作和明显地指定萤幕: 
 
          venus:0.0 
 
    . TCP/IP网路上,远方的机器名为pluto ,仅有一个显示器,指定screen 
      number为 0: 
 
          pluto:0.1 
 
    . DECnet网路上,display number为 1,预设screen number 为 0: 
 
          vomvx2::1 
 
 
7.2 实际上使用远方的显示器 
 
    我们已知如何指定远方的显示器,现在来练习一下:假设你是在venus 工 
作,想要在saturn上执行一个例如是xterm 的应用程式。你必须在saturn执 
行xterm 且指定venus 的显示器,则命令如下:(为了清楚起见,本节中我们 
的命令列包含了命令列前shell 对机器名称的提示) 
 
        venus% xterm -display venus:0.0        (注意:不完整!) 
 
    以上的指令是在本地的机器启动xterm ,并非在远方的机器启动,不符合 
需求。 
 
    如果在你的作业系统上,并未支持远方机器的操作,你可以藉著连接到 
saturn的终端机输入下面的命令: 
 
        saturn% xterm -display venus:0.0       (注意:不完整!) 
 
则xterm 会在saturn启动,在venus 上建立视窗,视窗会向venus 的滑鼠和键 
盘取得输入,这的确是你想要的,现在你可以回到venus 机器开始工作。 
 
    但由於你的作业系统事实上支援远方机器的功能,所以你毋需离开你的机 
器便可完成上述的指定,命令如下: 
 
        venus% rsh saturn xterm -display venus:0.0 
 
以上是利用普通的远方 shell的设备程式 -- rsh。 
 
注意 1:命令可能因saturn不被允许存取venus 的显示器而失败,欲克服此种 
        状况,输入命令: 
 
        venus% xhost + 
 
        後再试一次。(xhost命令下一节会解释) 
 
注意 2:你可能需要非同步地执行rsh ,在命令列之後加 &,以背景工作方式 
        执行, 但可能因为等待永远不会有的输入,shell 和rsh 间的交谈导 
        致 rsh "block",为了克服此种情况,需修正命令为: 
 
        venus% rsh saturn xterm\ 
        -display venus:0.0 < /dev/null & 
 
        远方的机器 (这个例子是saturn) 并不需要有X server 在执行,甚 
        至不需要有位元映像显示器,唯一的需求是能执行应用程式和支援网 
        路通讯。 
 
    现在总结你的工作模式为:在远方的机器上执行应用程式,连接回自己机 
器上的显示器,其架构图见图7 - 1。 
 
             ┌————————————————┐ 
             │                                │ 
             │  P81   FIG 7.1   (???)         │ 
             │                                │ 
             │                                │ 
             │                                │ 
             │图7 - 1 远方的 client显示器对   │ 
             │        本地 server架构图       │ 
             └————————————————┘ 
 
 
 
7.2.1 一个易发生的错误 
 
    如果你搞混了而一开始下了这样的命令: 
 
        venus% xterm -display saturn:0.0           (不正确) 
 
什麽事会发生?假如这命令被接受,xterm 在你本地的机器上执行,而在远方 
的机器saturn上建立视窗,你在你的萤幕上只能看到shell 读到的命令列,其 
它什麽也没有,系统是正确的工作,但不是你想要的。 
 
    如果你很幸运,你可能因不被允许或saturn上并没有server在执行,以致 
无法和saturn上的server连接上,xterm 会传回一个类似下列的讯息而结束: 
 
        X Toolkit Error: Can't open display. 
 
如此你就知道有错了。 
 
 
7.2.2 设定预设显示器 
 
    如果你不明确地指定显示器名称,程式会以Unix环境变数DISPLAY 来决定 
使用哪一个显示器,在启动xterm 时,系统会设定这个变数的内容,所以大部 
份情况下,你什麽都不必担心。 
 
    如果你remote-login其它的机器,在其间你执行X的应用程式,并希望回 
到你自己的机器上显示,那你必需明确地设定DISPLAY 变数,类似下面: 
 
        venus% rlogin saturn 
        Last login: Mon Nov 28 20:01:02 on console 
          ...            (在远方机器上的login banner) 
        saturn%          (远方机器上的shell 提示) 
        saturn%  setenv  DISPLAY  venus:0.0 
        saturn%  xcalc  & 
 
换句话说,如果不设定DISPLAY 变数,则在saturn上执行的每一个X程式都必 
须包含 -display venus:0.0 选项。 
 
 
7.3 控制存取你的显示器 -- xhost 
 
    我们前面提到过有时你无法连接到特定的显示器,通常的原因是你没有被 
许可,所以X否认你的存取。 
 
    X用很简单的结构控制存取:你指定一份可以存取你的显示器的主机(host) 
名单,在这些主机上执行的应用程式均可存取你的显示器,其它不在名单上的 
主机则不被允许。你可以用xhost 程式来控制存取: 
 
        允许一或多个机器存取: 
 
            xhost + host1 [+host2...] 
 
        去掉允许一或多个机器存取: 
 
            xhost - host1 [-host2...] 
 
        所有的机器均被允许存取: 
 
            xhost + 
 
        换言之,所有的存取控制均被解除。 
 
        恢复存取控制:(通常因为曾经下了xhost + 的命令) 
 
            xhost - 
 
        再度取得对存取的控制,只有先前明确地被允许的机器可供存取。 
 
    注意:存取控制应用於所有的处理 (process),而不只是针对其他使用者 
          所启动的处理,所以如果你透过远方的机器执行应用程式,而将显 
          示内容传回自己的机器,则你必需被授与存取权,否则会连接失败。 
 
 
7.4 总结 
 
    本章中,我们讨论了如何指定X程式的显示器,如何实际在网路上应用, 
如何允许或禁止网路使用你的显示器。 
 
    现在,你已经会使用网路,并且知道有一个视窗管理器会控制你的显示器; 
我们转而讨论xterm ,并看一看它所提供应用程式介面的细节。 
 
===== 
 
第8章 终端机模拟器 - 细说 xterm 
 
    xterm 是终端机模拟器 - 它是一个可以使X应用程式视窗看起来像普通 
终端机一样的程式, 而无需知道有关视窗系统的功能. 我们已经使用过 xterm 
的一小部分, 在本章中将更深入地探讨它所提供的特殊额外功能. 并且说明许 
多X程式共通的一些应用程式介面的面貌. 
 
    xterm 模拟一个 "哑终端机 (dumb terminal)", 但它也提供许多一般终 
端机没有的功能 : 
 
    . 设定终端机模式与特性的突现式 (pop-up) 选单 
 
    . 可以上下移动萤幕影像的卷动棒 (scrollbar) - 当文字列因萤幕卷动 
   而消失时, 可以将它拉回. 
 
    . 模拟 Tektronix 4014 终端机. 
 
    . 可选择性地记录萤幕列到一个使用记录档 (log file). 
 
    . "剪"(cut)"贴"(paste)文字区块. 
 
    . 可选择文字颜色, 视窗背景等... 
 
    . 可选择 VT100 与 Tek 视窗字型. 
 
    . 可设定( 程式化(programmable))键盘. 
 
    我们首先描述选择功能的选单结构, 接著描述如何使用选择功能. 
 
 
 
8.1 选择 xterm 功能 - 选单与命令列选项 
 
    xterm 有它自己的内建选单结构, 可在使用期间改变设定. 有三个选单可 
供利用, 见图 8 - 1 : 
 
               ┌————————————————┐ 
               │    p84. fig 8 - 1              │ 
               │                                │ 
               │                                │ 
               │                                │ 
               │ 图 8 - 1 xterm 的三个选单      │ 
               └————————————————┘ 
 
  xterm X11 : 这里的大多数选择项目为程式控制功能, 例如 : continue pro- 
              gram (程式继续) 或 kill program (杀掉程式). 欲突现此选单, 
              必需同时按住 CONTROL 键与滑鼠左按钮. 
 
  modes     : 设定大多数终端机的特性与选择 Tektronix 模拟功能. 欲突现此 
              选单, 须同时按住 CONTROL 键与滑鼠中间按钮 (当处於VT102 视 
              窗时). 
 
  Tektronix : 控制 Tektronix 视窗的外表. 当处於 Tektronix 视窗时, 须同时 
              按住CONTROL 键与滑鼠中间按钮即可突现此选单. 
 
    选单的操作类似 uwm, 藉著按滑鼠按钮可突现选单, 不放松按钮移动指标至想 
选的项目上; 放松按钮後即选定该项. 然而, 有一点不同的地方是, 不能被选择的 
选单项目 (因为此时选择将无意义) 是以较淡的型式显示. 例如: 因为尚未开启一 
个 Tektronix 视窗, 所以Hide VT Window 项目的颜色较淡. 
 
    许多选单的功能也能以启动 xterm 的命令列选项来设定.(事实上有某些功能仅 
能以命令列选项的型式去选择). 下面几节我们将告诉你可以设定不同功能的选单选 
择与命令列选项的选择方式. 
 
 
 
8.2 卷动 xterm 的萤幕 
 
    突现 xterm X11 选单并选择 Scrollbar 项目, 如图 8 - 2. 高亮度的部分告诉 
你两件事: 
 
  1. 萤幕上的列数与储存在卷动棒缓冲区 (scrollbar's buffer) 的列数之比率. 
 
  2. 缓冲区的哪个部份目前显示在萤幕上. 
 
    例如在图 8 - 2 中 : 约有 20 列在萤幕上; 高亮度部分约为总列数的 5 分之 1, 
所以缓冲区包含有约 100 列, 且目前显示的部分是缓冲区的最底部 (因为高亮度区 
在卷动区的最底部). 
 
               ┌—————————————————┐ 
               │    p85. fig 8 - 2                │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │ 图 8 - 2 具有卷动棒的 xterm 视窗 │ 
               └—————————————————┘ 
 
    你可以利用滑鼠按钮移动卷动区的高亮度部分, 以改变显示在萤幕上的文字. 
下面的小节将会解释; 为简化说明我们假设卷动缓冲区包含 100 列文字. 
 
注意 : xterm 采用异於其他视窗系统的卷动棒用法, 特别是 Apple Macintosh. 
 
 
 
8.2.1 移动卷动棒到指定点 
 
    假如你想移动本文到某一指定位置, 例如 : 想看第 50 列之後的内容 : 
 
    1. 移动指标到卷动棒. 游标变成垂直双箭头. (图 8 - 3a) 
 
    2. 按滑鼠中间按钮 : 游标变成水平箭头 (图 8 - 3b), 且高亮度的顶端跳至游 
       标处.(例如 : 假如你想看的部分从 50 列开始, 你应该将游标移到卷动区 
       的中央) 
 
    3. 假如视窗显示你所要的部分, 则可以放开按钮. 否则 ... 
 
    4. ... 保持按住按钮, 移动指标 : 高亮度部分跟随著指标移动 (而视窗内的 
       本文也随著高亮度区而卷动), 直到放松按钮. 
 
               ┌————————————————┐ 
               │    p86. fig 8 - 3              │ 
               │                                │ 
               │                                │ 
               │                                │ 
               │ 图 8 - 3 游标在卷动区的不同形状│ 
               └————————————————┘ 
 
 
8.2.2 向前卷动本文 
 
    卷动视窗内的本文使文字列往上移出萤幕顶端 : 高亮度区向卷动棒底部移动, 
视窗内并显示最近打入的本文. 上卷的步骤如下 : 
 
    1. 移动指标到卷动棒. 和前面一样游标变成垂直双箭头. 
 
    2. 按下滑鼠左按钮 : 游标变成向上箭头. (图 8 - 3c) 
 
    3. 放开按钮 : 与箭头在同一列的文字移到萤幕顶端, 且高亮度区也随著调整. 
       ( 以图形来表示,如图 8 - 4. 注意到移动量的多少与你放开按钮时的位置 
       有关 : 若接近顶端, 你可以获得的移动量小, 接近底部则当然可以获得较 
       大的卷动量). 
 
               ┌————————————————┐ 
               │    p87. fig 8 - 4              │ 
               │                                │ 
               │                                │ 
               │                                │ 
               │                                │ 
               │ 图 8 - 4 在一个视窗内卷动本文  │ 
               └————————————————┘ 
 
 
8.2.3 向後卷动本文 
 
    向後卷动视窗本文, 文字列由萤幕底部移出, 使你得以看见先前打入的文字列 
 操作程序类似向前卷动, 但方向相反, 此时使用滑鼠右按钮, 出现向下箭头 (图 
 8 - 3d). 
 
 
8.2.4 其他卷动选项 
 
    只要你已经启动卷动功能, 有两个Modes选单的选项可供利用. 
 
    Scroll to bottom on tty output (若有 TTY 输出将输出自动卷到底) : 
      若你目前不在卷动区的底部, 稍後某些终端机的输出到达视窗时会自动 
      地移动到卷动区的尾端. 此功能为预设的. 若此功能被关闭, 你要看最 
      新的输出必须自行卷动视窗. 
 
    Scroll to bottom on key press (按键才卷到底) : 若你不在卷动区的底部, 
      稍後你按一个键, 视窗会自动移动至卷动区的尾端. 此功能不预设, 但通常你 
      的终端机设定成当你键入时回应一个字元 : 这些字元为TTY 输出, 且将引起 
      视窗被卷到底部. 
 
 
8.2.5 以命令列选项控制卷动 
 
    -sb : 允许使用卷动棒. (预设 : 禁能(disable)) 
 
    -sl num : 储存被卷离萤幕的若干列本文. (预设为 64) 
 
    -sk : 致能(enable)当按键才卷到底. (预设 : 禁能) 
 
    -si : 致能当终端机输出时卷到底. (预设 : 致能) 
 
 
 
8.3 记录你与终端机的交谈过程 - 写记录 (logging) 
 
    突现 xterm X11 选单, 并选择 logging 选项. (假如你现在是第二次叫同样的 
选单,在 logging 选项旁边, 你会看到一个沙漏标志 (tick-mark) , 表示它是启动 
的) 从此以後, 所有终端机输出除了被送到萤幕以外, 也会被送至一个档案. 你可 
以获得一个使用过程的永久记录. 预设的状况是将输出写到 xtermlog.pid 档案. 
其中 pid 为xterm 处理识别码. 此档案被建於启动 xterm 时的目录 (你也可以利用 
下面介绍的命令列选项去改变登录档名). 
 
    你可以藉著 xterm X11选单停止或再度logging,反覆的停止和开始logging,你 
可以作选择性的记录,logging 的输出永远附加在登录档案(log-file)之後,每一次 
都不会覆写(overwrite)登录档。 
 
 
8.3.1 以命令列选项控制登录使用过程 
 
    -l : 致能登录使用过程 
 
    -lf file : 将登录档写入指定档, 以取代预设档 (指定登录档仅设定登录档 
      名而不致能登录功能; 必需另外使用 -l 来致能登录) 
 
使用一个导管 (Pipeline) 作为登录 "档" 
 
   -lf 选择项有一个特殊功能 : 假如 file 引数以导管记号 (|) 开头, 则其馀 
     部分视为登录输出的一个管路. 例如 : 假设你的系统 (shell) 提示是 venus%, 
     使用下列命令去启动 xterm 并记录於 cmdlog 档, 只需键入 
 
           xterm -l -lf '| grep "^venus% " > cmdlog' 
 
 
 
8.4 剪与贴本文 
 
    你可以从 xterm 视窗 "剪" (cutting) 部分本文, 亦即拷贝本文到一个 "剪 
缓冲区" (cut buffer), 稍後可被 "贴" (pasting) 回, 亦即取回 (retrieve). 
你可以将本文贴回同一个视窗, 或任何提供相同结构的视窗. 你可以现在或稍後 
"贴" 回, 但你只有一个缓冲区, 後来所 "剪" 的资料将盖掉先前的. 目前被选择 
的部分是以高亮度反白影像显示; 一个有两列文字被选到的xterm视窗显示於 
图 8 - 5。 
 
               ┌—————————————————┐ 
               │    p87. fig 8 - 5                │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │图 8 - 5 "剪" 操作中被选择的文字列│ 
               └—————————————————┘ 
 
 
8.4.1 剪 (cutting) 
 
"剪" 一段文字 : 
 
    1. 移动游标至你想要 "剪" 的那一段文字的一端. 
 
    2. 按下滑鼠左按钮, 并保持按住. 
 
    3. 拖拽游标至该段文字的另一端 : 在你移动的时候介於启始位置与游标位置 
       间的文字会以高亮度显示. 
 
    4. 放开按钮 : 被选到的文字维持高亮度, 任何先前所选择的高亮度本文 (甚 
       至在别的视窗中) 变为非高亮度. 
 
 
8.4.2 贴 (pasting) 
 
"贴" 一段本文 : 
 
    1. 移动游标至你想要插入一段文字的位置. 
 
    2. 碰触滑鼠中间按钮 : 先前被选定的文字被插入. (目前的选择仍保持高亮 
       度) 
 
    当你将本文 "贴" 入一个视窗, 它真的就像你用键盘打入的一样 -- 你可以使 
    用正常的列编辑键去消除字元, 单字, 或整列 (当然假如 "贴" 了许多列, 你 
    只能编辑最後一列, 就像你只能编辑最後敲入的一列一样). 
 
注意 : 假如你试图 "贴" 太多文字到一个 xterm 视窗, xterm 可能永远悬(hang) 
       在那里. (我们试"贴" 过多到 4000 个字元没有问题, 但这个值并不保证永 
       远不发生问题.) 
 
 
8.4.3 剪一个字或一列 
 
    假如你想剪一个字或一列, 你可以直接选择它而不需拖拽过它. 
 
    "剪" 一个字 : 指标移到一个字的任何位置, 并碰触两次滑鼠左按钮 : 该字 
    即被选择. 
 
    "剪" 一列 : 指标移到一列的任何位置, 并碰触三次滑鼠左按钮 : 该列即被 
    选择. 
 
    碰触滑鼠按钮两次与三次是所有以滑鼠基础(mouse-based) 的系统之共同用法, 
但在这个例子有特殊的功能: 连续而独立的几次碰触与一个多次碰触是不同的,其 
差异取决於介於按下按钮(button-down)与松开按钮(button-up)的期间内有没有其 
他的事发生. 所以下列算作碰触三次 : 
 
    DOWN ... pause for a few seconds ... UP DOWN ... another 
    pause ... UP DOWN ... pause 
 
这是很有用的 : 因为在碰触後只要你保持按下, 只要更进一步藉著使用 up/down, 
你可以改变选择模式 (字元, 字, 列)。 
 
 
8.4.4 扩大一个选定区块或 "剪" 
 
    只要你有一个选定区块, 你可以扩大它 (或缩减它), 如下 : 
 
    1. 移动指标至你想选择的新端点, 它可以是在已存在的一个区域□面 (当你 
       想缩减它时) 或外面 (当你想扩大它时) 
 
    2a. 碰触滑鼠左按钮 : 选择区的端点调整为目前指标位置. 或 ... 
 
    2b. ... 若以按下、拖拽和放开按钮来取代碰触. 在这个状况下, 选择区跟随 
        游标变动, 且为高亮度. 
 
    有一个方便的技巧可以选定文字区块, 首先标定你想选定的本文之一端, 碰触 
滑鼠左按钮, 然後移至另一端碰触滑鼠右按钮 : 中间的文字即被选定. (这是扩大 
选定区的变相方法. 开始时选择区是空的 - 即你已碰触滑鼠左按钮, 但没拖拽通 
过任何文字 - 然後你碰触滑鼠右按钮来扩大这个空选定区.) 
 
 
8.4.5 字或文字列边界的选择 
 
    假如你想选择一些字或文字列, 你可以藉著在碰触按钮之前小心地定位指标来 
完成.但这里有一个简捷的方式 - 再次利用多次碰触按钮. 选择文字或文字列 : 
 
    1. 将游标移到你想 "剪" 的文字之一端. 
 
    2. 按下滑鼠左按钮, 并保持按著 ... 
 
    3. ... 拖拽游标至你想要 "剪" 的文字之另一端 : 启始点至游标间的本文为 
       高亮度. (如图 8 - 6 上图) 
 
    4. 放开并迅速连续地再按下按钮 : 高亮度区扩展至最接近单字的边界. (图 
       8 - 6 中图) 
 
    5. 放开并迅速连续地再按下按钮 : 高亮度区扩展至已选定列的尾端. (图 
       8 - 6 下图) 
 
    6. 放开并迅速连续地再按下按钮 : 高亮度区回复至原来的大小, 亦即选定区 
       回到字元边界. (图 8 - 6 最上面) 
 
    相同的技巧可应用於以右按钮扩展已选择的区块. 
 
               ┌—————————————————┐ 
               │    p92. fig 8 - 6                │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │                                  │ 
               │ 图 8 - 6 以字元, 字与列 "剪" 文字│ 
               └—————————————————┘ 
 
 
8.5 使用 Tektronix 模拟功能 
 
    xterm 可以模拟一个 Tektronix 4014 终端机和一个 VT102 终端机, 使你可 
以用它来显示图形. 当你在一个远方机器执行 非-X应用程式而想在你的显示器 
上看图时, 特别有用. 
 
  xterm 为每一个 "终端机" 使用一个不同的视窗, 所以你可以将所有文字显 
示於一个视窗, 而另一个视窗显示图形, 如图 8 - 7. 某个时间只有一个视窗活 
动(active)著, 亦即所有的键盘输入或被 "贴" 入的本文 -- 被导引至活动视窗 
, 甚至当指标在别的视窗时也一样. 
 
你可以使用终端机的逃脱序码 (escape sequence) 或使用 modes 选单选择你需 
要的视窗.你可以使用你的视窗管理器完全分开地处理两个视窗. 例如 : 你可以 
表徵图化 VT 视窗,然而保留一个开启的 Tek, 等. 你也可以使用适当的 xterm 
选单选项 (Tek Window Showing, Hide VT Window, 等) 去隐藏或显现一个视窗 
 

BBS水木清华站∶精华区

--
※发信站 [福州大学庭芳苑BBS bbs.fzu.edu.cn] · FROM [210.34.72.2]
--
※ 修改:.fzx 于 Aug  1 12:23:42 修改本文.[FROM: heart.hit.edu.cn]
※ 转寄:.紫 丁 香 bbs.hit.edu.cn.[FROM: chen.hit.edu.cn]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: jmm.bbs@bbs.hit.edu.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:821.411毫秒