很多
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
或者输入
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
应用程序
.