这是我被别人问了好多次的问题,我实在不想再对人说一遍了,所以写在这里偷个懒,嘿嘿.
很多熟悉 internet 原理的人首次遇到 xwindow 的这两个概念都会搞错.如果他从一台 windows 机器上使用 exceed 通过 xdmcp 登录到一台 sun 服务器,他就说 exceed 是客户端(client),而 sun 机器是服务器(server).这就完全搞错了.
理解了 xwindow 的工作原理,这个区别就会很明显.x server 不是指你登录的那台机器,而是指一个程序,它负责在某台机器上接受客户的要求,在屏幕上显示客户请求的图形,并且把消息(键盘,鼠标,窗口消息)通知客户程序.
比如上面例子里的 exceed 就是一个 x server,它负责控制那台 windows 机器上的显示(display),sun 机器上的程序,xterm, xxgdb, dtwm(cde的窗口管理器),……是客户程序.它们通常会使用 tcp 6000 号端口连接 windows 机器,而windows机器的 6000 号端口是由 exceed bind 与 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 的网络透明性 【推荐阅读:渲染fur】
很多人在用 xwindow,但是他们是在用一些包装掩盖下的 xwindow,那些包装有些很不稳定,占用大量资源,以至于有人说 xwindow 是垃圾.其实 xwindow 是一个非常出色的图形系统,你应该抱怨的是那些不稳定的包装,而不是 xwindow 本身.
xwindow 是非常巧妙的设计,很多时候它在概念上比其它窗口系统先进,以至于经过很多年它仍然是工作站上的工业标准.许多其它窗口系统的概念都是从 xwindow 学来的.
xwindow 可以说的东西太多了.下面只分辨一些容易混淆的概念,提出一些正确使用它的建议.
分辨 x server 与 x client
刚才那个 exceed 用户,他的客户程序不仅可以运行在那台 sun 机器上,而且可以运行在网络里其它的机器上,或者在本机上.比如他有可能同时通过 telnet 登录到几台 sun 工作站,几台 linux pc,他可以在那些机器上都起动 xterm,在这台 windows 机器上的 exceed 上显示.... 下一页