- 浏览: 435997 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
pulsar_lxl:
请注明转载原文:http://hllvm.group.itey ...
JVM研究 -
goycejin:
感谢楼主,我也要及笔记了,这记性
Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar -
lianglong2000:
我理解是 java -server 类名 是运行的jdk中的j ...
jdk,jre你真的懂吗? -
yanqlv:
有个问题,既然windows目录(Windows/system ...
jdk,jre你真的懂吗? -
yanqlv:
系统化的描述也挺重要,架构模式>设计模式,架构模式≈设计 ...
MVC是设计模式么?是框架么?
如何远程登陆X桌面??
只要深刻理解X是协议,而不是某个具体的软件就很容易解决这个问题。
X是协议,不是某个具体软件,而且是Server/Client形式的网络服务。
因此,想要让基于X协议的软件显示在windows机器上,就需要在windows机器上运行X服务器。
就好比,你要用浏览器访问一个另一台计算机,那么另一台计算机必须提供HTTP服务。
因此,想让X软件运行在windows上,windows机器就需要提供X服务器,然后允许X软件显示。
因此,首先需要在windows上安装X服务器。
windows平台的X服务器也有很多种,最常用的:exceed ,winxe 等,在google上搜关键字 : X server for windows很找到很多种,大部分都不是免费的。
Xfree86 也能在windows平台上编译并安装,这在文挡中有提及。但是很困难,很少有人能安装成功。
X应用程序要运行并显示,就需要连接到X服务器。X应用程序是根据系统变量DISPLAY来决定显示到哪个X服务器上的。
默认情况下是本机的X服务器,但是如果这样做:
DISPLAY="192.168.1.100:0.0"
export DISPLAY
那么X应用程序就试图连接192.168.1.100的X服务器(6000号端口),如果在192.168.1.100
上设置允许这台机器的X软件连接(windows平台的x服务器通常不用设置,默认都允许)
,那么本机的X软件,就显示到了192.168.1.100的机器上。
不管192.168.1.100是什么操作系统,只要该机器上有X服务器在运行,就能显示到该机器上。
因此,通常,在WINDOWS机器上登陆到远程机器的桌面,是以下几个步骤:
1,运行windows机器上的X服务器软件,如exceed,winxe等
2,以终端方式远程登陆远程主机,ssh telnet rlogin 等协议都可以。
(假设linux机器IP地址是192.168.1.10,而windows 机器IP是192.168.1.100)
3,登陆后在命令行上修改192.168.1.10的DISPLAY变量:
#DISPLAY="192.168.1.100:0.0" (windows 的IP地址后面的:0.0 表示第0个屏幕,这是默认值)
4,直接在这个终端下输入X应用软件的命令,如:
# xmms &
那么xmms播放器就已经显示在你windows机器上的桌面上了。
这时候 能控制 xmms 播放器,但是你听不到音乐,因为x服务器只负责显示和接受鼠标和键盘动作,
不负责程序的逻辑 运算。xmms的进程还是在 192.168.1.10上运行,消耗的也是192.168.1.10的资源。
5,如果想整个启动桌面,那么直接在登陆的终端中输入启动桌面的命令:
#starkde (启动kde)
或者:
#gnome-session (启动gnome)
这样192.168.1.10的整个桌面就远程显示到了windows机器上。在windows机器上是一个大窗口。
有的windows平台的X服务器会全屏幕显示。
这时候就算断开一开始用于远程登陆的终端也没关系了,所有操作都可以在这个桌面里完成了。
很多人没有这方面的背景知识,以为打开桌面是用startx命令。
startx命令是一个脚本程序,最终调用xinit来初始化并运行x服务器和x服务器的第一个客户端
基本用法: xinit [client] -- [server] : [server number]
如: xinit /usr/X11/bin/xterm -- /usr/X11/bin/XFree86
如果远程登陆到服务器,执行startx命令,最多只能启动远程机器上的X服务器,并不能将桌面显示到本地。
本地的X服务器是用专门在windows上跑的X服务器,见面介绍的exceed ,winxe等。
用VNC,PCanywhere等登陆的原理和方式完全不同。这些软件的原理是在远程机器上运行一个额外的X服务器,X服务器和客户机器都在远程跑。然后通过自己内定的协议(并非X协议)用自己的客户端,或者通过HTTP协议用浏览器显示到本地。原理上是完全不同的。
X天生就是远程显示系统,因此linux-linux /linux - unix 的远程桌面互相访问并不需要额外的软件。
只有windows - linux 远程桌面互访才需要额外的软件。很多人不理解X是一种网络协议,因此总不知道用X天生的远程显示,而要费尽周折的用第三方软件。
很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.
一,linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的.
图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统,linux和Xfree的关系就相当于当年的DOS和WINDOWS3.0一样,windows3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样XFree只是linux下的一个应用程序而已.不是系统的一部分,但是X的存在可以方便用户使用电脑.WINDOWS95及以后的版本就不一样了,他们的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器.这也WINDOWS和linux的重要区别之一.
二,X是协议,不是具体的某个软件:
X是协议,就像HTTP协议,IP协议一样.这个概念很多初学者甚至学习LINUX有一定时间的人都混淆,一个基于X的应用程序需要运行并显示内容时他就联接到X服务器,开始用X协议和服务器交谈.比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.X应用程序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的"画"的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工作是由X服务器来完成的.X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先生,我发现鼠标被按下了,您有什么指示吗?如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正方形,当然他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画--那是服务器的事情.
那么协议是需要具体的软件来实现的,这就是下面我要讲的:
三,X和XFree86的关系.
有了协议就需要具体的软件来实现这个协议.就好比我们有了交通法规就需要交警去根据法规维护交通秩序一样.Xfree86就是这样一个去根据法规实现协议的"交警".他按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务.当然不仅仅是某个特定的交警才可以去维护和实现这个法规,比如还可以由交通协管员来实现交通法规,必要的时候警察也可以介入,当然前提是他们都要懂得交通法规,也就是要懂得协议.所以实现X协议的软件也并不只有XFree86,XFree86只是实现X协议的一个免费X服务器软件.商业上常用MOTIF,现在还有XORG,还有很多很小的由爱好者写的小的X服务器软件.甚至可以在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示.多么神奇.你可以用google找到这样的X服务器软件.只不过在LINUX上最常用的是XFree86.(现在的linux发行版都用Xorg了)顺便说一句,苹果电脑的图形界面用的也是X协议,而且被认为是做的最好的X协议图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很多大型三维图形设计软件都是在苹果平台上的原因.
为了便于理解拿HTTP协议来比较:
协议是HTTP (hyper text transmission protocol)
实现这个协议的常用服务器有:apache IIS 等
请求这些服务器传输文件的客户有:IE ,MOZILLA ,NETSCAPE等.
协议是X
实现这个协议的常用服务器有Xfree86 ,Xorg ,Xnest等
请求这些服务器来完成显示任务的客户:所有的X应用程序.
只不过HTTP协议的服务器和客户端通常都在两台不同的电脑(服务器和客户机)之间来实现,所以一般人对这个比较容易理解.而X协议的服务器和客户端程序通常在同一台电脑上,因此很多用户都感到对此很难理解.既然是协议,那么肯定和平台无关的,因此可以让X应用程序显示在任何装有X服务器的远程计算机上.甚至显示在装有Xnest服务器的windows系统上.只不过在大多数情况下,X应用程序都用本机的X服务器,然后X服务器将显示结果输出到本机的显示器.这也是很多人不理解X是一种协议的原因.
四,X和X11R6又是什么关系?
不知道初学者有没有注意到/usr/X11R6这个目录,这是XFree的默认安装目录
X11R6 实际上是 X Protocol version 11 Release 6
(X协议第11版第六次发行)的意思,就是说目前用的X协议是第11版的,然后经过了6次小的修正.不同版本的X协议是不能通信的.就象我们现在IPV4和IPV6不能通信一样,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6.
另外XFree86 3.3.6 XFree86 4.3.6 等这些版本是实现X协议的软件XFree86的版本号.这是初学者经常高混淆的概念.
协议版本和实现协议的软件的版本--这两个概念的区别你分清楚了吗?
五,X服务器和WM(window manager 窗口管理器)之间是什么关系.
平时大家起动图形界面是怎么启动的呢?
如果你是一开己就进入图形界面那就太遗憾了.应为你错过了了解X服务器起动过程的好时机.不过没关系.你打开一个XTERM输入:
init 3
就可以安全的回到字符界面.
好了,等做完以下实验你就完全明白X和WM(window manager 窗口管理器)之间是什么关系了.
先输入以下命令:
#startx
起动图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境.
你可以最大化,最小化,移动,关闭窗口等.
按ctrl+alt+backspace反回字符界面.
输入:
#xinit
再次启动图形界面,你看到了什么,你看到一个XTERM.而且不能移动.但是你可以在这个XTERM中输入命令打开X应用程序,如果我输入:
#mozilla
打开浏览器,你看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框.
为什么同样一个X应用程序会有这样的不同呢?因为我们用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),如果你用KDE就起动了KDE,如果你用GNOME就起动了GNOME.但是你用xinit起动图形界面的时候却没有起动WM.
现在你明白窗口管理器的作用了吗?他的作用就是最大化,最小化,移动,关闭窗口等.而这些不是X服务器来负责完成的.
如果你用xinit起动图形界面并在xterm中输入twm,看看会有什么?
xterm被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个xterm,twm就是XFree86中自带的窗口管理器,是一个比较简陋的最简单的窗口管理器,但是他具有窗口管理器的全部特征.
如果你不输入twm而输入gnome-session就可以起动GNOME
对应mint12,gnome-session 报错:mint 12 failed load to session ubuntu
如下gnome-session --session=gnome-fallback ,搞定
because of only gnome-session will now give you the Linux Mint Gnome Classic desktop
或者输入startkde起动KDE.
通过以上的实验你就可以清楚的明白他们之间的关系.
六,关于KDE和GNOME
KDE和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单, KDE是K Desktop Environment 的缩写.他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等.
GNOME是GNU Network Object Model Environment 的缩写.和KDE一样,也是一个功能强大的综合环境.
另外在其它UNIX系统中,常常使用CDE作为这样一个环境.
其它的小型窗口管理器有:
window maker,after step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器.REDHAT9中有 window maker 但是默认不安装,大家可以装来试试.只要xinit再wmaker&就可以用windowmaker了.
七,linux图形界面层次关系总结
linux本身-->X服务器<-[通过X协议交谈]->窗口管理器(综合桌面环境)-->X应用程序.
X server 不是指你登录的那台机器,而是指一个程序,它负责在某台机器上接受客户的要求,在屏幕上显示客户请求的图形,并且把消息(键盘,鼠标,窗口消息)通知客户程序。
很多熟悉 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 的网络透明性
刚才那个 Exceed 用户,他的客户程序不仅可以运行在那台 Sun 机器上,而且可以运行在网络里其它的机器上,或者在本机上。比如他有可能同时通过 telnet 登录到几台 Sun 工作站,几台 Linux PC,他可以在那些机器上都起动 xterm,在这台 Windows 机器上的 Exceed 上显示。如果它安装了 cygwin,他还可以启动本机上的 cygwin里 的 xterm,用同样的方式显示。
如果他使用 xrdb 在本机的 Exceed 设置了 xterm 的样式,比如背景 midnightblue, 前景 白色,字体 -*-adobe-courier-*,……,那么,Sun, Linux, cygwin 里的 xterm,虽然没有经过配置,但是它们知道:“这个 X server 要求我用这个背景色,这个前景色,这个字体……”,它们会在你的屏幕上显示同样风格的窗口。
使用鼠标选择一段字符,然后就可以在另外的程序里按鼠标中间,把字符粘贴过去。不论这个程序运行在哪里。
看看更大的一个图景:你的屏幕上有三台机器上的 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 的启动方式很简单。
首先,启动你的 X server。在 Linux 下,你可以直接输入 "X&",让一个 X server 在后台运行。这样,一个占据整个屏幕的布满斜纹的窗口(根窗口)就出现了。如果是 Exceed 或者 X-win32,你需要把屏幕设置为 "single window" 才能看到这个窗口。
接着,Linux 用户需要用 xauth 给你的 X server 设置一个密码,这样别人就不能非法连接你的 X server。你需要Ctrl-Alt-F1切换到tty1才能输入这个命令。Exceed 和 X-win32 的用户不需要这步。以下的例子只用 Linux 作为实例,其它系统的用户可以依葫芦画瓢。
xauth add :0 . `mcookie`
好了,现在你可以试试启动一个 xterm 到这个 X server 上:
xterm -display :0
按 Alt-F7 切换到 X,你看到了一个不受窗口管理器管理的 xterm。试试移动它呢?再切换到 tty1 启动另一个 xterm,两个 xterm 重合了吗?你怎样在第一个 xterm 里输入呢?这样用起来很痛苦吧?那么你可以在 xterm 里启动一个窗口管理器,比如 twm,直接运行 "twm&" 就行了。
你发现xterm的窗口都被加上了标题栏,按钮和边框,你现在可以移动它们了。试试把 twm 杀死,看看那些标题栏,按钮,边框是不是都消失了?你知道了窗口管理器的作用了吧。
What is X Window System
在 1984 年前,有许多商业公司开始为 UNIX 系统开发图形用户接口 (GUI),由于每个公司所发展的图形接口规格不一致,而且所开发的系统大都依赖于各公司所用的计算机系统 (Mainframe、Mini Computer、WorkStation 等),结果各个图形接口不仅无法彼此沟通,要让应用程序能在多个系统上执行,更是一件困难的事;同时由于接口规格不一,程序撰写的方法也会随平台而有所不同,programmer 也因此增加了不少困扰。
一个使用者很容易就能熟悉如 Microsoft Windows 或 Apple Macintosh 等图形接口系统,但对程序员 来说,写 Windows 的程序和写 Machintosh 的程序,其方法与风格是完全不同的两回事 (因为程设接口不一致);再者,这些窗口系统都局限于硬件环境与操作系统制造厂商,可在 Mcrosoft Windows 平台上跑的程序,既无法拿到 Macintosh 上执行,也只限在 PC 环境中使用 (这边所指的是包含了图形接口程序代码的程序)。
有鉴于此,麻省理工学院 (MIT,Massachusetts Institute of Technology) 便在 1984 年开始了 Client-Server 架构的 X Window System 发展计划。X Window 发展的目标,就是『要提供一个与硬件无关、统一的、网络透明的 (Network Transparent) 图形接口环境』,让各种操作系统与计算机硬件都能执行 X Window (与硬件无关),程序设计的方法一致 (统一的),并且能透过网络来分享其它计算机上的 X 资源。
X Server 与 X Client
X Window System 是一个 【Client-Server 结构】的图形接口系统。X Client 指的便是各式各样的应用程序 (文书处理、数据库应用、网络软件等),而 X Server 主要在处理来自 X Client applications 的 请求,在屏幕上绘制图形 (所以又称为 Display Server);并且负责管理可用的字形与屏幕可用的颜色等系统资源,读取使用者的输入 (来自键盘或鼠标),传送键盘、鼠标事件与窗口状态信息给 X Client (也就是应用程序)。
X Protocol
在 X Window System 中,X Server 与 X Client 都是透过 X Protocol 来交换讯息,X Protocol 定义了 X Server 与 X Client 间的讯息交换格式。关于 X Protocol,读者在接触更多 X Programming 的信息后,会慢慢体会到它的存在;目前不妨暂时将 X Protocol 在 X Window System 中所扮演的角色,想象为 HTTP 协议在 Web Server 与 Web Client (Browser) 间所扮演的沟通角色一样。
在 X Window System 中比较特殊的一点,就是 X Protocol 允许 X Server 与 X Client 能跨网络来交换讯息,这意味着 X Server 与 X Client 不限制都得在同一台机器上执行,可在不同的计算机上同时执行。
或许会对此处所讲的【Client-Server 结构】一词有些疑虑,那是因为在 X Window System 的世界里,X Client 与 X Server 间的
【Client-Server 架构】关系,和一般计算机科学中的【Client-Server 结构】一词,两者语意有些不同。
一般而言,Server 指的是在网络上提供某种服务的程序,如 FTP、HTTP、BBS、Email 等 Service;
而 Client 则是向这些 Servers 要求服务的程序,像是 Browser、Email Client (pine、kmail) 等等的。
而在 X Window System 中,X Client 指的是可在网络上任何计算机上执行的各种应用程序,他们的执行结果必须传到某个屏幕显示器上,
而负责将执行结果缯制到屏幕上与管理各种系统资源的程序,便是 X Server。
对于写 X Client 的 programmers 来说,X Client 与 X Server 在不同计算机上执行,并不影响程序的撰写的方法。因为 X Client 会从 DISPLAY 这个环境变量取得 X Server 的位置,
在执行时期才决定应该将执行结果传给哪一个 X Server。这些都是因为使用 X Protocol 的关系,X Protocol 使得 X Server 与 X Client (也许是在本地机器上,也许在网络上) 的实际位置变成透明的 (programmer 看不见,也不须知道),
这种特性我们称之为「网络透明」(Network Transparent)。
还有一点值得注意,大部份的窗口系统都与底层的操作系统习习相关,没有底层的操作系统就不能存活,但是 X 不是操作系统的一部份,我们可将 X 安装在各种操作系统上,
如 UNIX 系列 (FreeBSD、 Linux 等等),IBM OS/2、Microsoft Windows 甚至 DOS 都可以。因此,更能充分利用与分享各平台上的 server 与 client 资源。
X11R6 与 XFree86
由于许多公司认同 X Window System 的优点,X 系统不断的被设计与改良并更新版本,目前最广为人知的版本为 X11 R6 (X Version 11,Release 6),为工业界的标准。
至于什么是 XFree86,XFree86 网站的说明如下:
The XFree86 Project, Inc is a non-profit organisation that produces XFree86. XFree86 is a freely redistributable implementation of the X Window System that runs on UNIX(R) and UNIX-like operating systems (and OS/2). The XFree86 Project has traditionally focused on Intel x86-based platforms (which is where the ``86 in our name comes from), but our current release also supports other platforms. One of our current goals is to increase the range of platforms that XFree86 runs on.
由此可知,XFree86 主要是给 x86-based 机器用的免费 X Window System,现在的 Linux、FreeBSD 等操作系统也都是与 XFree86 搭配使用居多。
KDE 与 Gnome
首先,容笔者说声「KDE and Gnome are NOT just window managers」。许多人一直将 KDE 或 Gnome 当成是 Window Manager,这种说法可以算对,也可以说只对了四分之一。正确的说,KDE 与 Gnome 应该算是 Desktop Environment,而不只是 Window Manager,因为 Window Manager 只是它们的一部份组件而已 (之前读者跑过的 kwm 便是 KDE 内建的 Window Manager)。
所谓的 Desktop Environment ,指的是「提供完整的 X 应用程序、设定工具、容易使用的桌面、开始菜单以及内建 Window Manager 的一整套程序」。最早有 Sun MicroSystems 的 CDE (Common Desktop Environment),而目前 Linux/FreeBSD 系统上普遍流行的 Desktop Environment 则为 KDE (The K Desktop Environment) 与 Gnome (GNU Network Object Model Environment) 这两套。
Desktop Environment 通常都会包含下列几个部份:
项目说明
Applications
各式各样的应用软件,从一般的文书处理、网络软件、数据库处理工具到程序开发工具等等的。 KDE 附的软件通常都以 K 字母开头,如 Kpackage、Kdevelop、KMysql 等,而 Gnome 的软件则是以 G 字母开头,如 Gedit、GIMP、GnoRPM 等。
Desktop
一致性的桌面,面板工具 (Panel) 以及开始菜单 (Start up Menu) 等。并且在使用者离线时 (logout), Desktop Environment 也会将应用程序的执行状态记录下来,以便在下次使用者登入时恢复,这部份称之为「Session Management」。
Configure Tools
一些方便设定系统各种资源 (桌面环境、硬设备、网络设定以及各种服务器等) 的工具。
Window Manager
Desktop Environment 通常都会内建一个 Window Manager,来管理其它窗口并为窗口加上装饰,通常使用者也可以自行将内建的 Window Manager 换成自己特别喜好的。
OBRs
Object Request Brokers (ORBs) 为对象导向底层架构 (或说是组件环境),它可让程序更容易开发、重复使用与维护。
APIs
Desktop Environment 通常会提供一大套函式库,除了一般用途的函式库外,还包括之前提到的「widget set」函式库,以及用来增加生产效率的 Application Development Framework。
因此 Desktop Environment 都会提供其特别的程序设计接口 (Application Programming Interfaces, APIs),让 programmers 来调用其独特的函式库。
只要深刻理解X是协议,而不是某个具体的软件就很容易解决这个问题。
X是协议,不是某个具体软件,而且是Server/Client形式的网络服务。
因此,想要让基于X协议的软件显示在windows机器上,就需要在windows机器上运行X服务器。
就好比,你要用浏览器访问一个另一台计算机,那么另一台计算机必须提供HTTP服务。
因此,想让X软件运行在windows上,windows机器就需要提供X服务器,然后允许X软件显示。
因此,首先需要在windows上安装X服务器。
windows平台的X服务器也有很多种,最常用的:exceed ,winxe 等,在google上搜关键字 : X server for windows很找到很多种,大部分都不是免费的。
Xfree86 也能在windows平台上编译并安装,这在文挡中有提及。但是很困难,很少有人能安装成功。
X应用程序要运行并显示,就需要连接到X服务器。X应用程序是根据系统变量DISPLAY来决定显示到哪个X服务器上的。
默认情况下是本机的X服务器,但是如果这样做:
DISPLAY="192.168.1.100:0.0"
export DISPLAY
那么X应用程序就试图连接192.168.1.100的X服务器(6000号端口),如果在192.168.1.100
上设置允许这台机器的X软件连接(windows平台的x服务器通常不用设置,默认都允许)
,那么本机的X软件,就显示到了192.168.1.100的机器上。
不管192.168.1.100是什么操作系统,只要该机器上有X服务器在运行,就能显示到该机器上。
因此,通常,在WINDOWS机器上登陆到远程机器的桌面,是以下几个步骤:
1,运行windows机器上的X服务器软件,如exceed,winxe等
2,以终端方式远程登陆远程主机,ssh telnet rlogin 等协议都可以。
(假设linux机器IP地址是192.168.1.10,而windows 机器IP是192.168.1.100)
3,登陆后在命令行上修改192.168.1.10的DISPLAY变量:
#DISPLAY="192.168.1.100:0.0" (windows 的IP地址后面的:0.0 表示第0个屏幕,这是默认值)
4,直接在这个终端下输入X应用软件的命令,如:
# xmms &
那么xmms播放器就已经显示在你windows机器上的桌面上了。
这时候 能控制 xmms 播放器,但是你听不到音乐,因为x服务器只负责显示和接受鼠标和键盘动作,
不负责程序的逻辑 运算。xmms的进程还是在 192.168.1.10上运行,消耗的也是192.168.1.10的资源。
5,如果想整个启动桌面,那么直接在登陆的终端中输入启动桌面的命令:
#starkde (启动kde)
或者:
#gnome-session (启动gnome)
这样192.168.1.10的整个桌面就远程显示到了windows机器上。在windows机器上是一个大窗口。
有的windows平台的X服务器会全屏幕显示。
这时候就算断开一开始用于远程登陆的终端也没关系了,所有操作都可以在这个桌面里完成了。
很多人没有这方面的背景知识,以为打开桌面是用startx命令。
startx命令是一个脚本程序,最终调用xinit来初始化并运行x服务器和x服务器的第一个客户端
基本用法: xinit [client] -- [server] : [server number]
如: xinit /usr/X11/bin/xterm -- /usr/X11/bin/XFree86
如果远程登陆到服务器,执行startx命令,最多只能启动远程机器上的X服务器,并不能将桌面显示到本地。
本地的X服务器是用专门在windows上跑的X服务器,见面介绍的exceed ,winxe等。
用VNC,PCanywhere等登陆的原理和方式完全不同。这些软件的原理是在远程机器上运行一个额外的X服务器,X服务器和客户机器都在远程跑。然后通过自己内定的协议(并非X协议)用自己的客户端,或者通过HTTP协议用浏览器显示到本地。原理上是完全不同的。
X天生就是远程显示系统,因此linux-linux /linux - unix 的远程桌面互相访问并不需要额外的软件。
只有windows - linux 远程桌面互访才需要额外的软件。很多人不理解X是一种网络协议,因此总不知道用X天生的远程显示,而要费尽周折的用第三方软件。
很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.
一,linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的.
图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统,linux和Xfree的关系就相当于当年的DOS和WINDOWS3.0一样,windows3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样XFree只是linux下的一个应用程序而已.不是系统的一部分,但是X的存在可以方便用户使用电脑.WINDOWS95及以后的版本就不一样了,他们的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器.这也WINDOWS和linux的重要区别之一.
二,X是协议,不是具体的某个软件:
X是协议,就像HTTP协议,IP协议一样.这个概念很多初学者甚至学习LINUX有一定时间的人都混淆,一个基于X的应用程序需要运行并显示内容时他就联接到X服务器,开始用X协议和服务器交谈.比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.X应用程序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的"画"的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工作是由X服务器来完成的.X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先生,我发现鼠标被按下了,您有什么指示吗?如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正方形,当然他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画--那是服务器的事情.
那么协议是需要具体的软件来实现的,这就是下面我要讲的:
三,X和XFree86的关系.
有了协议就需要具体的软件来实现这个协议.就好比我们有了交通法规就需要交警去根据法规维护交通秩序一样.Xfree86就是这样一个去根据法规实现协议的"交警".他按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务.当然不仅仅是某个特定的交警才可以去维护和实现这个法规,比如还可以由交通协管员来实现交通法规,必要的时候警察也可以介入,当然前提是他们都要懂得交通法规,也就是要懂得协议.所以实现X协议的软件也并不只有XFree86,XFree86只是实现X协议的一个免费X服务器软件.商业上常用MOTIF,现在还有XORG,还有很多很小的由爱好者写的小的X服务器软件.甚至可以在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示.多么神奇.你可以用google找到这样的X服务器软件.只不过在LINUX上最常用的是XFree86.(现在的linux发行版都用Xorg了)顺便说一句,苹果电脑的图形界面用的也是X协议,而且被认为是做的最好的X协议图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很多大型三维图形设计软件都是在苹果平台上的原因.
为了便于理解拿HTTP协议来比较:
协议是HTTP (hyper text transmission protocol)
实现这个协议的常用服务器有:apache IIS 等
请求这些服务器传输文件的客户有:IE ,MOZILLA ,NETSCAPE等.
协议是X
实现这个协议的常用服务器有Xfree86 ,Xorg ,Xnest等
请求这些服务器来完成显示任务的客户:所有的X应用程序.
只不过HTTP协议的服务器和客户端通常都在两台不同的电脑(服务器和客户机)之间来实现,所以一般人对这个比较容易理解.而X协议的服务器和客户端程序通常在同一台电脑上,因此很多用户都感到对此很难理解.既然是协议,那么肯定和平台无关的,因此可以让X应用程序显示在任何装有X服务器的远程计算机上.甚至显示在装有Xnest服务器的windows系统上.只不过在大多数情况下,X应用程序都用本机的X服务器,然后X服务器将显示结果输出到本机的显示器.这也是很多人不理解X是一种协议的原因.
四,X和X11R6又是什么关系?
不知道初学者有没有注意到/usr/X11R6这个目录,这是XFree的默认安装目录
X11R6 实际上是 X Protocol version 11 Release 6
(X协议第11版第六次发行)的意思,就是说目前用的X协议是第11版的,然后经过了6次小的修正.不同版本的X协议是不能通信的.就象我们现在IPV4和IPV6不能通信一样,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6.
另外XFree86 3.3.6 XFree86 4.3.6 等这些版本是实现X协议的软件XFree86的版本号.这是初学者经常高混淆的概念.
协议版本和实现协议的软件的版本--这两个概念的区别你分清楚了吗?
五,X服务器和WM(window manager 窗口管理器)之间是什么关系.
平时大家起动图形界面是怎么启动的呢?
如果你是一开己就进入图形界面那就太遗憾了.应为你错过了了解X服务器起动过程的好时机.不过没关系.你打开一个XTERM输入:
init 3
就可以安全的回到字符界面.
好了,等做完以下实验你就完全明白X和WM(window manager 窗口管理器)之间是什么关系了.
先输入以下命令:
#startx
起动图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境.
你可以最大化,最小化,移动,关闭窗口等.
按ctrl+alt+backspace反回字符界面.
输入:
#xinit
再次启动图形界面,你看到了什么,你看到一个XTERM.而且不能移动.但是你可以在这个XTERM中输入命令打开X应用程序,如果我输入:
#mozilla
打开浏览器,你看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框.
为什么同样一个X应用程序会有这样的不同呢?因为我们用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),如果你用KDE就起动了KDE,如果你用GNOME就起动了GNOME.但是你用xinit起动图形界面的时候却没有起动WM.
现在你明白窗口管理器的作用了吗?他的作用就是最大化,最小化,移动,关闭窗口等.而这些不是X服务器来负责完成的.
如果你用xinit起动图形界面并在xterm中输入twm,看看会有什么?
xterm被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个xterm,twm就是XFree86中自带的窗口管理器,是一个比较简陋的最简单的窗口管理器,但是他具有窗口管理器的全部特征.
如果你不输入twm而输入gnome-session就可以起动GNOME
对应mint12,gnome-session 报错:mint 12 failed load to session ubuntu
如下gnome-session --session=gnome-fallback ,搞定
because of only gnome-session will now give you the Linux Mint Gnome Classic desktop
或者输入startkde起动KDE.
通过以上的实验你就可以清楚的明白他们之间的关系.
六,关于KDE和GNOME
KDE和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单, KDE是K Desktop Environment 的缩写.他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等.
GNOME是GNU Network Object Model Environment 的缩写.和KDE一样,也是一个功能强大的综合环境.
另外在其它UNIX系统中,常常使用CDE作为这样一个环境.
其它的小型窗口管理器有:
window maker,after step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器.REDHAT9中有 window maker 但是默认不安装,大家可以装来试试.只要xinit再wmaker&就可以用windowmaker了.
七,linux图形界面层次关系总结
linux本身-->X服务器<-[通过X协议交谈]->窗口管理器(综合桌面环境)-->X应用程序.
X server 不是指你登录的那台机器,而是指一个程序,它负责在某台机器上接受客户的要求,在屏幕上显示客户请求的图形,并且把消息(键盘,鼠标,窗口消息)通知客户程序。
很多熟悉 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 的网络透明性
刚才那个 Exceed 用户,他的客户程序不仅可以运行在那台 Sun 机器上,而且可以运行在网络里其它的机器上,或者在本机上。比如他有可能同时通过 telnet 登录到几台 Sun 工作站,几台 Linux PC,他可以在那些机器上都起动 xterm,在这台 Windows 机器上的 Exceed 上显示。如果它安装了 cygwin,他还可以启动本机上的 cygwin里 的 xterm,用同样的方式显示。
如果他使用 xrdb 在本机的 Exceed 设置了 xterm 的样式,比如背景 midnightblue, 前景 白色,字体 -*-adobe-courier-*,……,那么,Sun, Linux, cygwin 里的 xterm,虽然没有经过配置,但是它们知道:“这个 X server 要求我用这个背景色,这个前景色,这个字体……”,它们会在你的屏幕上显示同样风格的窗口。
使用鼠标选择一段字符,然后就可以在另外的程序里按鼠标中间,把字符粘贴过去。不论这个程序运行在哪里。
看看更大的一个图景:你的屏幕上有三台机器上的 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 的启动方式很简单。
首先,启动你的 X server。在 Linux 下,你可以直接输入 "X&",让一个 X server 在后台运行。这样,一个占据整个屏幕的布满斜纹的窗口(根窗口)就出现了。如果是 Exceed 或者 X-win32,你需要把屏幕设置为 "single window" 才能看到这个窗口。
接着,Linux 用户需要用 xauth 给你的 X server 设置一个密码,这样别人就不能非法连接你的 X server。你需要Ctrl-Alt-F1切换到tty1才能输入这个命令。Exceed 和 X-win32 的用户不需要这步。以下的例子只用 Linux 作为实例,其它系统的用户可以依葫芦画瓢。
xauth add :0 . `mcookie`
好了,现在你可以试试启动一个 xterm 到这个 X server 上:
xterm -display :0
按 Alt-F7 切换到 X,你看到了一个不受窗口管理器管理的 xterm。试试移动它呢?再切换到 tty1 启动另一个 xterm,两个 xterm 重合了吗?你怎样在第一个 xterm 里输入呢?这样用起来很痛苦吧?那么你可以在 xterm 里启动一个窗口管理器,比如 twm,直接运行 "twm&" 就行了。
你发现xterm的窗口都被加上了标题栏,按钮和边框,你现在可以移动它们了。试试把 twm 杀死,看看那些标题栏,按钮,边框是不是都消失了?你知道了窗口管理器的作用了吧。
What is X Window System
在 1984 年前,有许多商业公司开始为 UNIX 系统开发图形用户接口 (GUI),由于每个公司所发展的图形接口规格不一致,而且所开发的系统大都依赖于各公司所用的计算机系统 (Mainframe、Mini Computer、WorkStation 等),结果各个图形接口不仅无法彼此沟通,要让应用程序能在多个系统上执行,更是一件困难的事;同时由于接口规格不一,程序撰写的方法也会随平台而有所不同,programmer 也因此增加了不少困扰。
一个使用者很容易就能熟悉如 Microsoft Windows 或 Apple Macintosh 等图形接口系统,但对程序员 来说,写 Windows 的程序和写 Machintosh 的程序,其方法与风格是完全不同的两回事 (因为程设接口不一致);再者,这些窗口系统都局限于硬件环境与操作系统制造厂商,可在 Mcrosoft Windows 平台上跑的程序,既无法拿到 Macintosh 上执行,也只限在 PC 环境中使用 (这边所指的是包含了图形接口程序代码的程序)。
有鉴于此,麻省理工学院 (MIT,Massachusetts Institute of Technology) 便在 1984 年开始了 Client-Server 架构的 X Window System 发展计划。X Window 发展的目标,就是『要提供一个与硬件无关、统一的、网络透明的 (Network Transparent) 图形接口环境』,让各种操作系统与计算机硬件都能执行 X Window (与硬件无关),程序设计的方法一致 (统一的),并且能透过网络来分享其它计算机上的 X 资源。
X Server 与 X Client
X Window System 是一个 【Client-Server 结构】的图形接口系统。X Client 指的便是各式各样的应用程序 (文书处理、数据库应用、网络软件等),而 X Server 主要在处理来自 X Client applications 的 请求,在屏幕上绘制图形 (所以又称为 Display Server);并且负责管理可用的字形与屏幕可用的颜色等系统资源,读取使用者的输入 (来自键盘或鼠标),传送键盘、鼠标事件与窗口状态信息给 X Client (也就是应用程序)。
X Protocol
在 X Window System 中,X Server 与 X Client 都是透过 X Protocol 来交换讯息,X Protocol 定义了 X Server 与 X Client 间的讯息交换格式。关于 X Protocol,读者在接触更多 X Programming 的信息后,会慢慢体会到它的存在;目前不妨暂时将 X Protocol 在 X Window System 中所扮演的角色,想象为 HTTP 协议在 Web Server 与 Web Client (Browser) 间所扮演的沟通角色一样。
在 X Window System 中比较特殊的一点,就是 X Protocol 允许 X Server 与 X Client 能跨网络来交换讯息,这意味着 X Server 与 X Client 不限制都得在同一台机器上执行,可在不同的计算机上同时执行。
或许会对此处所讲的【Client-Server 结构】一词有些疑虑,那是因为在 X Window System 的世界里,X Client 与 X Server 间的
【Client-Server 架构】关系,和一般计算机科学中的【Client-Server 结构】一词,两者语意有些不同。
一般而言,Server 指的是在网络上提供某种服务的程序,如 FTP、HTTP、BBS、Email 等 Service;
而 Client 则是向这些 Servers 要求服务的程序,像是 Browser、Email Client (pine、kmail) 等等的。
而在 X Window System 中,X Client 指的是可在网络上任何计算机上执行的各种应用程序,他们的执行结果必须传到某个屏幕显示器上,
而负责将执行结果缯制到屏幕上与管理各种系统资源的程序,便是 X Server。
对于写 X Client 的 programmers 来说,X Client 与 X Server 在不同计算机上执行,并不影响程序的撰写的方法。因为 X Client 会从 DISPLAY 这个环境变量取得 X Server 的位置,
在执行时期才决定应该将执行结果传给哪一个 X Server。这些都是因为使用 X Protocol 的关系,X Protocol 使得 X Server 与 X Client (也许是在本地机器上,也许在网络上) 的实际位置变成透明的 (programmer 看不见,也不须知道),
这种特性我们称之为「网络透明」(Network Transparent)。
还有一点值得注意,大部份的窗口系统都与底层的操作系统习习相关,没有底层的操作系统就不能存活,但是 X 不是操作系统的一部份,我们可将 X 安装在各种操作系统上,
如 UNIX 系列 (FreeBSD、 Linux 等等),IBM OS/2、Microsoft Windows 甚至 DOS 都可以。因此,更能充分利用与分享各平台上的 server 与 client 资源。
X11R6 与 XFree86
由于许多公司认同 X Window System 的优点,X 系统不断的被设计与改良并更新版本,目前最广为人知的版本为 X11 R6 (X Version 11,Release 6),为工业界的标准。
至于什么是 XFree86,XFree86 网站的说明如下:
The XFree86 Project, Inc is a non-profit organisation that produces XFree86. XFree86 is a freely redistributable implementation of the X Window System that runs on UNIX(R) and UNIX-like operating systems (and OS/2). The XFree86 Project has traditionally focused on Intel x86-based platforms (which is where the ``86 in our name comes from), but our current release also supports other platforms. One of our current goals is to increase the range of platforms that XFree86 runs on.
由此可知,XFree86 主要是给 x86-based 机器用的免费 X Window System,现在的 Linux、FreeBSD 等操作系统也都是与 XFree86 搭配使用居多。
KDE 与 Gnome
首先,容笔者说声「KDE and Gnome are NOT just window managers」。许多人一直将 KDE 或 Gnome 当成是 Window Manager,这种说法可以算对,也可以说只对了四分之一。正确的说,KDE 与 Gnome 应该算是 Desktop Environment,而不只是 Window Manager,因为 Window Manager 只是它们的一部份组件而已 (之前读者跑过的 kwm 便是 KDE 内建的 Window Manager)。
所谓的 Desktop Environment ,指的是「提供完整的 X 应用程序、设定工具、容易使用的桌面、开始菜单以及内建 Window Manager 的一整套程序」。最早有 Sun MicroSystems 的 CDE (Common Desktop Environment),而目前 Linux/FreeBSD 系统上普遍流行的 Desktop Environment 则为 KDE (The K Desktop Environment) 与 Gnome (GNU Network Object Model Environment) 这两套。
Desktop Environment 通常都会包含下列几个部份:
项目说明
Applications
各式各样的应用软件,从一般的文书处理、网络软件、数据库处理工具到程序开发工具等等的。 KDE 附的软件通常都以 K 字母开头,如 Kpackage、Kdevelop、KMysql 等,而 Gnome 的软件则是以 G 字母开头,如 Gedit、GIMP、GnoRPM 等。
Desktop
一致性的桌面,面板工具 (Panel) 以及开始菜单 (Start up Menu) 等。并且在使用者离线时 (logout), Desktop Environment 也会将应用程序的执行状态记录下来,以便在下次使用者登入时恢复,这部份称之为「Session Management」。
Configure Tools
一些方便设定系统各种资源 (桌面环境、硬设备、网络设定以及各种服务器等) 的工具。
Window Manager
Desktop Environment 通常都会内建一个 Window Manager,来管理其它窗口并为窗口加上装饰,通常使用者也可以自行将内建的 Window Manager 换成自己特别喜好的。
OBRs
Object Request Brokers (ORBs) 为对象导向底层架构 (或说是组件环境),它可让程序更容易开发、重复使用与维护。
APIs
Desktop Environment 通常会提供一大套函式库,除了一般用途的函式库外,还包括之前提到的「widget set」函式库,以及用来增加生产效率的 Application Development Framework。
因此 Desktop Environment 都会提供其特别的程序设计接口 (Application Programming Interfaces, APIs),让 programmers 来调用其独特的函式库。
发表评论
-
linux系统下分割大文件的方法
2015-05-14 00:46 1424本文介绍下在linux系统中,分割大文件的方法,比如一个5g ... -
ShellShock汇总及对与补丁的看法
2014-10-21 23:19 1330漏洞简介 GNU Bash 4.3及之前版本在评估某些构造 ... -
Linux下硬盘安装windows
2014-10-12 11:35 6117背景如下: 之前电脑上装有window7、win8和Ubu ... -
永远不要相信用户的输入---------ShellShock------------
2014-10-02 14:49 1745什么是ShellShock漏洞? 继上次震惊业内的Hea ... -
那些有意思的linux命令
2014-04-12 17:40 1624who 查看当前登录的所有用户名/时间/方式 whoami ... -
ubuntu下apache httd/cgi的编译与安装
2013-11-06 00:00 1987参考:http://www.jb51.net/articl ... -
linux下查看.txt文件出现乱码
2013-10-19 22:01 935为什么在linux下查看.txt格式的文件会出现乱码呢?因为 ... -
Ubuntu下安装eclipse后,打开报错 Could not load SWT library
2013-05-18 17:43 4324具体错误如下: !SESSION 2013-05-18 17 ... -
ubuntu安装成功,开机花屏问题
2013-05-18 15:16 13183问题描述: ubuntu正常开机花屏,进不入登录界面。从恢复模 ... -
Ubuntu12.04 更新源
2013-05-18 14:47 1075装完系统第一件事,更新下软件。更新前,最好把软件源给换下,下载 ... -
linux 进程组 会话 控制终端
2013-02-27 19:52 2669一个进程可以通过fork() ... -
linux僵尸(zombie)进程
2012-12-31 18:56 2488定义: In UNIX System terminology, ... -
mint 13下编译安装运行Open webOS
2012-12-15 16:02 1379官方网址:https://github.com/openweb ... -
xdm gdm kdm
2012-12-07 10:53 3795gdm -- GNOME Display Man ... -
Linux文件特殊权限
2012-11-20 11:10 1211注:转自http://yuanbin.blog ... -
ubuntu下为apt-get设置代理
2012-11-19 10:01 4540debian、mint都可以按此设置(debian系均可,直接 ... -
linux启动过程
2012-11-10 09:13 884转自:http://my.oschina.net/ ... -
linux mint 13 没有/etc/inittab 文件
2012-11-09 21:49 2570首先,ubuntu自从6.10版本之后就使用了较新的upsta ... -
linux 笔记
2012-09-11 16:24 1563unix 文件系统两个重要概念: 1. 所有的程序或系统设备都 ... -
清华申请退学博士作品:完全用Linux工作
2012-09-04 15:44 1199清华申请退学博士作品 ...
相关推荐
X Window System 是一套在各种位元映像显示器 (bitmapped dispalys) 上具有极大可携性 (portable) 的视窗系统 (window system), 它是由麻省理工学院 (MIT)所发展出来. X Windows System ( 本书以後部 份简称为...
### X Window 用户指南知识点概述 #### 一、X Window 系统简介 X Window系统是一种在计算机上绘制图形的标准协议,主要用于Unix及其类Unix操作系统(如Linux)上。它不仅是一个简单的图形用户界面(GUI),还提供了...
《Xwindow程序设计入门》是一本面向初学者的教程,旨在帮助读者理解并掌握X Window System(简称X11或X Window)的基本概念和编程技巧。X Window是Unix和类Unix系统上广泛使用的图形用户界面(GUI)系统,它提供了一...
**X Window系统详解及其启动流程** X Window系统是Linux操作系统中的图形用户界面(GUI)基础框架,它提供了显示和交互的基础设施,使得用户可以通过鼠标、键盘等设备与计算机进行图形化交互。X Window系统并不只是...
Written by a Silicon Graphics X Window System and OpenGL expert, OpenGL Programming for the X Window System uses the OpenGL Utility Toolkit (GLUT) to show how OpenGL programs can be constructed ...
X Window系统是一种在Unix和类Unix系统上使用的窗口系统,最初由麻省理工学院的计算机科学与人工智能实验室开发。X Window系统为开发者提供了一种在计算机屏幕上显示图形和处理用户输入(如鼠标和键盘事件)的机制。...
**X Window架构与启动代码分析** X Window系统,简称为X11或X Window,是最早的图形用户界面(GUI)系统之一,广泛应用于类Unix操作系统,如Linux和各种Unix变体。它提供了一个开放标准的框架,使得硬件制造商、...
### X Window直接渲染架构:深度解析与实现 #### 引言 在计算机图形学领域,X Window系统一直是桌面环境中的核心组件,为用户提供了一个统一的窗口管理界面。然而,传统上,X Window系统的渲染机制是通过X服务器...
### Xwindow远程对话的两种方式 #### 一、引言 西安高性能计算中心为符合条件的用户提供免费计算资源,用户通常通过远程SSH客户端访问这些资源。然而,当用户需要运行图形用户界面(GUI)应用而非简单的命令行程序时...
在Red Hat Linux系统中,可以使用`redhat-config-xfree86`工具来配置XWindow系统。配置文件通常位于`/etc/X11/XF86Config`,包含了关于服务器布局、文件路径、模块加载等信息。 总之,X Window系统是Linux GUI的...
在深入探讨“cpp-XWindow系统的动态键重映射”这个主题之前,我们首先需要理解X Window系统的基础知识。X Window系统,通常简称为X11或X,是一种图形用户界面(GUI)系统,它允许用户通过网络或者本地进行分布式计算...
Xwindow 是一个非常出色的图形系统,你应该抱怨的是那些不稳定的包装,而不是 Xwindow 本身。
" Unix/Linux 环境下的窗口系统 X Window 概述" X Window 是一种先进的、网络透明的、支持窗口的图形环境,它使传统的 Unix 不仅拥有强大的命令行字符界面,同时也拥有了漂亮的图形界面。X Window 由麻省理工学院...
X Window系统,作为一款在Unix和类Unix操作系统中广泛使用的窗口管理系统,其设计与实现体现了对网络透明性、系统灵活性、高度可携性、阶层次的窗口管理以及免费开源特性的深度考量。以下是对X Window系统核心概念的...
X Window 程式设计入门--第一章 什么是 X Window X Window 程式设计入门--第二章 X Programming 的第一步 X Window 程式设计入门--第三章 绘图(Graphic) X Window 程式设计入门--第三章 绘图(Graphic) X Window 程...
Xming是一款在Windows操作系统上运行的开源软件,它使得用户能够在Windows环境下连接到Linux或Unix系统,体验X Window System(通常简称为X11或X Window)。X Window System是一种图形用户界面(GUI)标准,广泛应用...
【X Window 系统详解】 X Window 系统是Unix和Linux环境下的一种窗口管理系统,它为操作系统提供了图形用户界面的基础架构。X Window的核心并不提供具体的应用程序界面,而是提供了一个基本框架,让开发者能够构建...
Linux与X Window系统基础 Linux与X Window系统基础