Xwindow System

简介:
X Window 系统最早是由 MIT (Massachusetts Institute of Technology, 麻省理工学院) 在1984 年发展出来的, 当初 X 是在 Unix 的 System V 上 以应用程序的概念开发出来的,而非以操作系统来开发。
直到1987 年X版本发展到 X11 ,这一版 X 取得了明显的进步, 后来的X Window都是基于此一版本,因此后来  X 窗口也被称为 X11 。这个版本持续在进步当中,到了 1994 年发布了新版的  X11R6 ,后来的架构都是沿用此一释出版本。
1992 年 XFree86计划顺利展开, 该计划持续在维护 X11R6 的功能性,包括对新硬件的支持以及更多新增的功能等等。当初定名为 XFree86 其实是根据“ X + Free software + x86”而来的。早期 Linux 所使用的 X Window 的主要核心都是由 XFree86 这个计划所提供的,因此,我们常常将 X 系统与 XFree86划上等号。
不过由于一些授权的问题导致 XFree86 无法继续提供类似 GPL 的自由软件,后来 Xorg 基金会就接手 X11R6 的维护! Xorg利用当初 MIT 发布的类似自由软件的授权, 将 X11R6 拿来进行维护,并且在 2004 年发布了 X11R6.8 版本,更在 2005 年后发表了 X11R7.x 版。 而X11R6/X11R7 的版本是自由软件,因此很多组织都利用这个架构去设计他们的图形介面,包括 Mac OS X v10.3 也曾利用过这个架构来设计他们的窗口。

X Window System采用C/S结构,但和我们常见的C/S不同。常见的C/S结构中,称提供服务的一方为server,即服务器端(如HTTP服务,FTP服务 等),使用服务的称为client,即客户端。但在X Window System中,client是执行程序的一方,在上面执行各种X程序,而server则是负责显示client运行程序的窗口的一方。
X Window System的组成可以分为X server,X client,X protocol三部分。X server主要控制输入输出,维护字体,颜色等相关资源。它接受输入设备的输入信息并传递给X client,X client将这些信息处理后所返回的信息,也由X server负责输出到输出设备(即我们所见的显示器)上。X server传递给X client的信息称为Event,主要是键盘鼠标输入和窗口状态的信息。X client传递给X server的信息则称为Request,主要是要求X server建立窗口,更改窗口大小位置或在窗口上绘图输出文字等。X client主要是完成应用程序计算处理的部分,并不接受用户的输入信息,输入信息都是输入给X server,然后由X server以Event的形式传递给X client(这里感觉类似Windows的消息机制,系统接收到用户的输入信息,然后以消息的形式传递给窗口,再由窗口的消息处理过程处理)。X client对收到的Event进行相应的处理后,如果需要输出到屏幕上或更改画面的外观等,则发出Request给X server,由X server负责显示。
常见的情况是X server与X client都在同一台电脑上运行,但他们也可分别位于网络上不同的电脑上。在X Window System中,X client是与硬件无关的,它并不关心你使用的是什么显卡什么显示器什么键盘鼠标,这些只与X server相关。我们平常安装完XFree86后运行xf86config或xf86cfg进行的配置实际上只是与X server有关,可以说就是配置X server吧,不配置照样可以运行X client程序。
X protocol就是X server于X client之间通信的协议了。X protocol支持现在常用的网络通信协议。
 
总结下运行过程:
(1) 用户通过鼠标键盘对X server下达操作命令
(2) X server利用Event传递用户操作信息给X client
(3) X client进行程序运算
(4) X client利用Request传回所要显示的结果
(5) X server将结果显示在屏幕上

=========================================================
下面通过实验来深入了解X Window
 
 
  1. 首先通过运行级3进入系统,在tty1中执行如下操作:
  2. [root@rhel5 ~]# tty 
  3. /dev/tty1 
  4. [root@rhel5 ~]# X &                     将在ctrl+alt+F7中启动一张空白的真实纸(DISPLAY:0.0),并自动切换到ctrl+alt+F7中 
  5. ctrl+alt+F1                             切换回tty1中 
  6. [root@rhel5 ~]# export DISPLAY=:0.0      
  7. [root@rhel5 ~]# xterm &                 切换到DISPLAY:0.0中可看到打开了一个xterm窗口(因为未启动窗口管理器,所以窗口无法移动) 
  8. [root@rhel5 ~]# metacity &              切换到DISPLAY:0.0中可看到启动了gnome的窗口管理器(现在可对xterm窗口进行移动,改变大小了)
  9. [root@rhel5 ~]# gnome-panel &           启动gnome的面板(即顶端和底端类似于Windows的任务栏) 
  10. [root@rhel5 ~]# gnome-session &         启动gnome的桌面环境(包含了metacity、gnome-panel等) 
  11.   
  12. ctrl+alt+F2                             切换到tty2并登陆系统中准备启动第二个X Window
  13. [root@rhel5 ~]# tty
  14. /dev/tty2
  15. [root@rhel5 ~]# xinit -- :1 &           将在ctrl+alt+F8中启动一张真实纸(DISPLAY:1.0)和一个xterm窗口,相当于X+xterm(由于DISPLAY:0.0已被占用) 
  16. [root@rhel5 ~]# twm -display :1 &       切换到DISPLAY:1.0中可看到启动了一个twm的X Window 
  17. [root@rhel5 ~]# xclock -display :1 &    切换到DISPLAY:1.0中可看到启动了一个xclock的应用程序 
  18. [root@rhel5 ~]# gnome-session &         启动第二个X Window(Gnome)的桌面环境(将会看到奇特的现象,Gnome浮在桌面上) 
  19.   
  20. ctrl+alt+F3                             切换到tty3并登录系统中准备启动第三个X Window
  21. [root@rhel5 ~]# tty
  22. /dev/tty3
  23. [root@rhel5 ~]# startx -- :3            将按顺序在ctrl+alt+F9中启动一个X Window桌面环境
  24. 注:若/etc/sysconfig/desketop文件不存在或为空到时候则默认启动Gnome桌面环境
  25.  
  26. 由于真实纸所用的端口号为6000+(F7、F8、F9、F10...),我们可以通过netstat查看系统正在监听到端口 
  27. 因为现在已经启动了三个X Window(DISPLAY:0,DISPLAY:1和DISPLAY:3),所以将会看到系统监听到三个端口6000,6001和6003 
  28. [root@rhel5 ~]# netstat -lntp | grep :600 
  29. tcp        0      0 0.0.0.0:6000                0.0.0.0:*                   LISTEN      3835/X               
  30. tcp        0      0 0.0.0.0:6001                0.0.0.0:*                   LISTEN      4156/X               
  31. tcp        0      0 0.0.0.0:6003                0.0.0.0:*                   LISTEN      4269/X               
  32. tcp        0      0 :::6000                     :::*                        LISTEN      3835/X               
  33. tcp        0      0 :::6001                     :::*                        LISTEN      4156/X               
  34. tcp        0      0 :::6003                     :::*                        LISTEN      4269/X      

      本文转自Vnimos51CTO博客,原文链接:http://blog.51cto.com/vnimos/1097699,如需转载请自行联系原作者



相关文章
|
7月前
|
算法 Java
System类
System类
23 0
“System.out.println(的正确格式
“System.out.println(的正确格式
85 0
使用System.out.println()
使用System.out.println()
46 0
ZCMU - 1992: Swiss-system tournament
ZCMU - 1992: Swiss-system tournament
87 0
一次由 Scanner(System.in) 引起的 TLE
继昨天一次由System.out.println() 引起的 MLE&TLE后,今天随机到一道快速选择的题(P1923),又遇到相似的问题,写完快速排序后修改几行代码就得到快速选择的代码,本以为轻松解决问题,然后又莫名其妙的 TLE。
一次由 Scanner(System.in) 引起的 TLE
|
Java 关系型数据库 Oracle
System.out.println
This Java tutorial is to explain what System.out.println is and how it works. It is love at first type.
1091 0
|
JavaScript Linux 前端开发
|
网络协议 关系型数据库 网络安全
|
Oracle 关系型数据库 Java
|
JavaScript 前端开发