转载
清华大学高性能所 刘立坤
第一部分:常见问题问题
* 我该装哪个X-window?
* Gnome和KDE哪个更好些?
* XFree86是什么?
* 我的GUI起不来了怎么办?
What this lecture covers?
* X-window的基本概念和架构
* Xwin的启动过程
* Xwin的配置(刷新频率和显示模式的配置)
* Xwin的基本工具 (xwin自带)
* Xwin的字体系统的简介(xwin的美化)
Xwindow的基本概念和架构
* What is Xwindow
o 一个非常出色的窗口图形系统
o 是很多其他图形系统的概念基础
o 多年以来的工业标准
* 历史就说了
架构
* X-Windows被设计成为一种客户端--服务器(client-server)的系统。这样做的优点是你可以把服务器运行于和你的显示器所在的机器不同的另一台机器上
* X Window System的组成可以分为X server,X client,X protocol三部分
Xserver
* 就是X的服务器端,负责所有有关图形显示的操作,包括所有你可以见到的图形元素的绘制。
* XServer负责和设备打交道,负责具体的管理的显卡,显示器的显示模式和参数设置(这也是整个x系统中最复杂的部分)
* Xsever还包括最低层的与设备相关的图形库,目前主要是xlib
* 目前的Xserver主要有XFree86和Xorg两个
XClient
* 任何一个X应用程序,包括WM在内都是XClient
* XClient不负责任何图形相关的具体操作,只和xserver交互,由xserver负责完成其图形显示任务,这种交互一般来说是通过在底层调用xlib实现的
* Xclient的核心任务是计算和数据处理。更确切的说是消息处理
X protocol
* X protocol是Xserver与XCleint之间的通信协议。
* 从本质上来说,它是一种远程显示协议。该显示协议与后面的vnc不同是基于胖客户端的。
X-window的工作过程
* (1) 用户通过鼠标键盘对X server下达操作命令
* (2) X server利用Event传递用户操作信息给X client
* (3) X client进行程序运算
* (4) X client利用Request传回所要显示的结果
* (5) X server将结果显示在屏幕上
X-window的网络透明性
* 在一个xserer上面你可以显示多个机器上的x应用程序,而不必关心这些应用程序具体属于哪个机器
o Ex:使用鼠标选择一段字符,然后就可以在另外的程序里按鼠标中间,把字符粘贴过去。不论这个程序运行在哪里。
* 不同机器上的xclient只要显示在当前的xserver上,他们就具有相似的行为,就服从当前xserver的统一的风格和工作方式。
* Xclient可以向xserer暗示它要如何如何,但xserver可以采纳也可以不采纳
实验一
* 看看Xserver的模样?
o 在 Linux 下,你可以直接输入 “X&”,这样,一个占据整个屏幕的布满斜纹的窗口(根窗口)就出现了 ,这就是X Server.
o #X :1
* 看看一个XClient到底是个什么样子
o Xterm :1
X-window的组件
* 显然X-window的核心原理是相当简单的
* 但在X下面还有一大堆令人迷惑的概念
Window Manager
* 一个运行于 X Window 之上的application,主要功能是:移动窗口,改变窗口大小,图标化(最小化)窗口,改变窗口层叠顺序
* 窗口上的标题,按钮,漂亮的边框,全都是窗口管理器提供的
* 不同的机器在本机显示的窗口,由窗口管理器统一装饰和指挥
* 你可以有多个不同的WM,但一次只能启动一个
* GNOME和KDE不是窗口管理器
一些常见的WM
* TWM
o 最早的WM,一切WM的原型
* FVWM (一个可扩展,完全自定义的WM)
o Freedom
* KWin
o KDE的WM
* englightenment,sawmill,iceWM,metacity
o GNOME常用的WM
* Sawfish
o 类似与FVWM,但可以用LISP语言编程控制
实验三
* # Twm:1
* # Fvwm:10
* 看看原始的WM是个什么样子
问题?
* KDE和GNOME到底是什么?
* 他们和WM又有什么关系?
* 两个误区:
o Gnome和KDE 是窗口管理器
o Gnome和KDE是 Xwindow
o 经常看到有人问:“装哪种 Xwindow 好啊?Gnome 还是 KDE?”
Widget
* 小器件,装饰品
* 常规的工具库
* 用于构造象按钮和菜单这样的标准控件(
* 一个应用程序使用的wedget集是由程序员来选择的,而不是用户。
* 可以同时运行使用不同widget set写的程序
* 实际上是一种图形组件集 EX:GTK、QT等