第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系统提供,而是由下一章我们要讨论的视窗管理器提供。