Chinaunix首页 | 论坛 | 博客
  • 博客访问: 533637
  • 博文数量: 526
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 3235
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 17:52
文章分类

全部博文(526)

文章存档

2011年(1)

2008年(525)

我的朋友

分类: LINUX

2008-08-29 18:08:37

 
很多人在用Xwindow,但是他们是在用一些包装掩盖下的Xwindow,那些包装有些很不稳定,占用大量资源,以至于有人说Xwindow是垃圾。其实Xwindow是一个非常出色的图形系统,你应该抱怨的是那些不稳定的包装,而不是Xwindow本身。

Xwindow是非常巧妙的设计,很多时候它在概念上比其它窗口系统先进,以至于经过很多年它仍然是工作站上的工业标准。许多其它窗口系统的概念都是从Xwindow学来的。

Xwindow可以说的东西太多了。下面只分辨一些容易混淆的概念,提出一些正确使用它的建议。

分辨Xserver和Xclient
这是我被别人问了好多次的问题,我实在不想再对人说一遍了,所以写在这里偷个懒,嘿嘿。

很多熟悉Internet原理的人首次遇到Xwindow的这两个概念都会搞错。如果他从一台Windows机器上使用Exceed通过XDMCP登录到一台Sun服务器,他就说Exceed是客户端(client),而Sun机器是服务器(server)。这就完全搞错了。

理解了Xwindow的工作原理,这个区别就会很明显。Xserver不是指你登录的那台机器,而是指一个程序,它负责在某台机器上接受客户的要求,在屏幕上显示客户请求的图形,并且把消息(键盘,鼠标,窗口消息)通知客户程序。

比如上面例子里的Exceed就是一个Xserver,它负责控制那台Windows机器上的显示(display),Sun机器上的程序,xterm,xxgdb,dtwm(CDE的窗口管理器),……是客户程序。它们通常会使用TCP6000号端口连接Windows机器,而Windows机器的6000号端口是由Exceedbind和listen的,怎么样,我们的Internet专家,Exceed看起来是一个server吧:)

比如,当你通过telnet启动Sun机器上的xterm,就会在Exceed的屏幕上显示一个窗口。实际发生的事情是:xterm请求连接Windows机器的6000号端口,与Exceed跟Exceed连接,然后xterm请求得到资源,然后xterm请求在屏幕上显示一个窗口。

你在xterm的窗口里按下"A"键时,Exceed会把这个事件通知xterm进程,然后xterm会发送数据报,请求Exceed,“请在坐标(100,30)处显示一个字母A,然后在后面显示一个矩形作为光标。”,这样你的xterm窗口里就会多显示一个字母。

这下你理解了吗?不?那还是自己多用用,体会体会吧。

Xwindow的网络透明性
刚才那个Exceed用户,他的客户程序不仅可以运行在那台Sun机器上,而且可以运行在网络里其它的机器上,或者在本机上。比如他有可能同时通过telnet登录到几台Sun工作站,几台LinuxPC,他可以在那些机器上都起动xterm,在这台Windows机器上的Exceed上显示。如果它安装了cygwin,他还可以启动本机上的cygwin里的xterm,用同样的方式显示。

如果他使用xrdb在本机的Exceed设置了xterm的样式,比如背景midnightblue,前景白色,字体-*-adobe-courier-*,……,那么,Sun,Linux,cygwin里的xterm,虽然没有经过配置,但是它们知道:“这个Xserver要求我用这个背景色,这个前景色,这个字体……”,它们会在你的屏幕上显示同样风格的窗口。

使用鼠标选择一段字符,然后就可以在另外的程序里按鼠标中间,把字符粘贴过去。不论这个程序运行在哪里。

看看更大的一个图景:你的屏幕上有三台机器上的xterm,两台机器上的gvim,两台机器上的mozilla在显示,而它们都受本机的FVWM操纵,它们之间可以随意进行拷贝粘贴……从这里你可以初步体会到Xwindow的网络透明性,它使你方便的操作很多机器。

什么是窗口管理器?
很多人不知道窗口管理器是怎么回事。他们认为Gnome和KDE是窗口管理器,认为窗口管理器就是能够提供一个工具条,能够配置桌面背景,能够设置很多菜单的东西。而其实,窗口管理器只是Gnome和KDE的一部分,它的主要功能是你平时根本没有注意,但是却非常重要的操作。窗口管理器的主要功能是:移动窗口,改变窗口大小,图标化(最小化)窗口,改变窗口层叠顺序……

通常的X客户程序不需要知道有人想移动它,它只知道乖乖听窗口管理器的话。如果没有窗口管理器运行,你的程序会一个堆一个,你没有办法操纵被盖在下面的程序,你只能使用最上面一个程序,而且你不能移动它,你不能改变它的大小。这样的系统根本不能用!

其实你的窗口上的标题,按钮,漂亮的边框,全都是窗口管理器提供的,而不是程序自己的,这样你用窗口管理器就能改变任何窗口的样式了。当你点击关闭窗口的那个按钮,你其实点击的是窗口管理器放在你的程序窗口上面的一个小窗口,发现它受到点击后,窗口管理器就会通知那个程序:“喂!有人想关掉你,你自己准备准备后事,然后退出吧。”

不同的机器在本机显示的窗口,由窗口管理器统一装饰和指挥。比如,窗口管理器决定:xterm窗口上面都应该有四个按钮,一个在左边,点击它会显示窗口操作菜单,另外三个在右边,分别是最大化,最小化和关闭。窗口都使用7pixel厚的边框,窗口首次出现的时候首先在桌面上找一个空位置,如果找不到,就找一个能够最少的遮盖其它窗口的位置……

这些都是窗口管理器的职责。

Gnome和KDE是什么?
有人把Gnome和KDE叫做窗口管理器,甚至还有人把它们叫做Xwindow。经常看到有人问:“装哪种Xwindow好啊?Gnome还是KDE?”其实你不安装Gnome和KDE也可以使用Xwindow.

Gnome和KDE是“桌面系统”,一种很多程序和函数库的集合。它们的设计目的是提供一致的方便的操作方式来满足普通用户的需要。它们不但包含窗口管理器,还有很多实用程序和应用程序,比如配置程序,工具条,编辑器,绘图工具……其实Gnome可以和很多窗口管理器合作,在历史上,Gnome使用过的窗口管理器包括englightenment,sawmill,sawfish,metacity。KDE的窗口管理器叫做kwin。

你也知道,设计整整一套应用程序:编辑器,绘图程序,浏览器,……是非常不容易的。所以它们肯定是不如专用的编辑器,绘图程序,浏览器的。不过要求不太高的用户也可以用它们。

用Xwindow做一个有趣的试验
现在我们来做一个试验来引起你对Xwindow的兴趣。

很多人离开了xdm就不知道怎样启动"Xwindow"了。其实Xwindow的启动方式很简单。

首先,启动你的Xserver。在Linux下,你可以直接输入"X&",让一个Xserver在后台运行。这样,一个占据整个屏幕的布满斜纹的窗口(根窗口)就出现了。如果是Exceed或者X-win32,你需要把屏幕设置为"singlewindow"才能看到这个窗口。

接着,Linux用户需要用xauth给你的Xserver设置一个密码,这样别人就不能非法连接你的Xserver。你需要Ctrl-Alt-F1切换到tty1才能输入这个命令。Exceed和X-win32的用户不需要这步。以下的例子只用Linux作为实例,其它系统的用户可以依葫芦画瓢。

xauthadd:0.`mcookie`
好了,现在你可以试试启动一个xterm到这个Xserver上:

xterm-display:0
按Alt-F7切换到X,你看到了一个不受窗口管理器管理的xterm。试试移动它呢?再切换到tty1启动另一个xterm,两个xterm重合了吗?你怎样在第一个xterm里输入呢?这样用起来很痛苦吧?那么你可以在xterm里启动一个窗口管理器,比如twm,直接运行"twm&"就行了。

你发现xterm的窗口都被加上了标题栏,按钮和边框,你现在可以移动它们了。试试把twm杀死,看看那些标题栏,按钮,边框是不是都消失了?你知道了窗口管理器的作用了吧。

现在告诉你怎样不用XDMCPbroadcast,绕过CDE的登陆界面,而使用Sun机器上的CDE。其实你只需要把刚才那个例子里的"twm"换成CDE的窗口管理器dtwm就行了,或者启动dtsession。它们一般在/usr/dt/bin下。Sun还有另外一个窗口管理器叫做OpenLook,它在系统里的名字叫做olwm,你自己找找吧。

现在如果你自己在Sun机器上装一个FVWM,你知道怎么绕过CDE登录而启动FVWM了吧?你不需要成为root就可以使用你喜欢的FVWM了。

.Xdefaults文件的作用
弄明白X的工作原理后,你就可以使用.Xdefaults来配置你的程序了。有人不理解.Xdefaults是用来干什么的,喜欢用shellalias出一些带有很多参数的命令,或者写一些shellscript,里面只有一行带有很多参数的程序调用,然后他说:“.Xdefaults没用。”

其实.Xdefaults比起这些办法有很多好处。首先,几乎所有的X客户程序都可以从.Xdefaults文件得到配置信息,比如前景色,背景色,字体……这样你可以在同一个文件里配置所有X程序的样式,而不用写那么多shellscript。

另外,如果你用xrdb.Xdefaults把这些配置信息写入到根窗口的数据结构里,不是本地机器上的X程序也会遵守同样的样式。比如如果你的.Xdefaults里面有这些内容:

XTerm.background:midnightblue
XTerm.foreground:white
然后你用xrdb~/.Xdefaults,那么所有的xterm都会使用midnightblue作为背景色,使用白色显示字符。这些配置,用X术语叫资源(resource)。

有时候你会开很多xterm窗口在机器上,它们来自不同的远程机器,这时候如果它们都用同样的样色和字体,你就不容易分辨它们了。比如有一天,我在实验室的PC机上打开了很多xterm,它们来自本机,实验室的Sun服务器,我宿舍的机器和数据库实验室一台HP服务器。在我走之前,想关闭本地的机器,我输入“shutdown-hnow”在一个我自认是本地的xterm上,结果,等了一会儿,我回头看到机器没关掉,只是那个xterm停止了响应。我一拍脑袋:糟了,我把宿舍的机器给关掉了!

为了避免这种情况,你可以在不同的机器上编辑不同的.Xdefaults,而不使用xrdb在根窗口导入这些配置。这样不同的机器上的xterm使用不同的颜色,你就不容易搞错了。

怎样更加深入的了解Xwindow?
哎哟!我本来想写很多东西,后来发现要需要写的实在太多了。我没那么多时间,没办法,给参考书目吧,你们自己去看。

学习使用Xwindow不是学习使用Gnome,KDE,……很多书籍教用户怎样使用Gnome,KDE的菜单,配置程序……结果到了最后用户还是没能知道Xwindow是怎么回事。用那些菜单谁不会啊?真是浪费大家时间。

学习Xwindow,其实最好的一个办法是看看Xlib编程的书籍,你可以在图书馆找到这样的书,我推荐O''reily的那本Xlib程序设计书(我忘了名字了),虽然它很老,但是那上面讲解的Xwindow的工作原理一直都没有变过。

如果你不会编程序,你可以不看编程的部分而得到很多深入的概念上的认识,比如窗口属性,字体,颜色,……这些东西在你使用Xwindow时会有很大帮助。如果你真的要编写Xlib程序,这本书就过时了一点,你最好到去免费下载最新的Xlib手册来看。

Linux技巧小总结 Linux技巧小总结 Linux技巧小总结 Linux技巧小总结 Linux技巧小总结 Linux技巧小总结 Linux技巧小总结 Linux技巧小总结 Linux技巧小总结 Linux技巧小总结
阅读(381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~