博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下X Server工作方式
阅读量:5036 次
发布时间:2019-06-12

本文共 1835 字,大约阅读时间需要 6 分钟。

下午看了会儿Linux下X Window的工作方式,可能X Window的工作方式和我们平时所想了还是有些不一样,记录一下自己的假设。等些日子自己熟悉了,再回来看看自己的假设是否正确。

 

先说些概念:GNU/Linux,X Server,X Client(xterm),Window Manager。

通常,我们所说的Linux是指Linux的发行版,比如Ubuntu,Fedora,Redhat等等。其实从概念上说Linux指得应该是Linux的内核。

有了内核,再有了Bash这样的命令行解释器(加上一些命令工具)。一个可以工作的Linux也就形成了。但是不是所有人都可以/喜欢用命令行工作。世界是多彩的,Linux也需要一个图形界面。

但Linux的图形界面,只是作为内核之外的一个工具提供的。你可以使用图形界面来完成工作,你也可以使用命令行来完成工作。图形界面只是Linux下一个普通的应用程序。

 

从概念上来讲这个应用程序是C/S架构的一个应用程序,通常由一个X Server和一些X Client组成。我们的X Client可以请求X Server帮忙显示一些界面,比如说窗口啊,按钮啊,给用户。我们从概念上来张图,解释一下。

不同的Client端通常X11协议和X Server通信,并将自己的需求通过X11协议传给X Server。X Server在接到X Client的请求后,在与X Server相连的显示器上显示相关的窗口,按钮,等等。由上图可以看出,一个X Server可以同时满足几个X Client的需求,同时显示在显示器上。

 

X Client的请求需求大概是:我想画一个窗口(200*200),在窗口上有一个按钮(12*8),相对位置是……。X Server接到要求绘出这样的界面给用户。

但还有两个问题没有解决:首先,X Server要采用什么颜色呢,要不要一些标准组件呢(比如类似Windows应用程序右上角的最小化,最大化,关闭按钮)。这是一个问题。

其次,显示问题解决了,但怎么处理交互呢。比如一个用户按下了按钮,X Client怎么知道呢。

 

针对上面的问题Window Manager(窗口管理器)出现了。X Client的请求,交给X Server。X Server经过处理后,再将请求交给Window Manager。Window Manager根据相应的配置来显示请求中的那个窗口——不单单显示了200*200的窗口和按钮,显示了默认的标题,添加了窗口标准按钮,等等。如果X Client想显示自己的标题怎么办,给X Server发消息时指明标题不就可以了嘛 :)

 

当用户在窗口按下按钮后,Window Manager根据用户在窗口上的动作,产生一个点击事件/消息。比如,按钮A已经被点击,点击的相对坐标为(2, 5)。这个消息打包发给X Server,再由X Server通过X11协议传给X Client。类似:嗨,X Clinet 5兄,你的鼠标被点了,你看着办吧。等X Client处理好点击消息后,比如X Client接到消息后,需要显示一个文本框。那么X Client会再次呼叫X Server。整个过程,如此反复。

还有一点需要注意的是通常意义上的Server(服务器),可能在X Server-X Client通信中,是一个X Client的角色。比如我们在自己的Laptop上需要管理3台服务器,我们可以在自己的Laptop上打开X Server和Window Manager。然后不同的服务器通过X11协议,将自己的应用程序窗口显示在Laptop上。此时这台Laptop显示三个服务器应用程序的窗口,并可以通过窗口来管理服务器的配置。

 

上面只是由目前我了解到的信息和我个人的的猜想,可能并不正确。我们可以做一下替换,将技术替换成具体的应用程序。

Linux发行版->Ubuntu,Fedora, SUSE….

X Server –> XFree86, XOrg,….

X Client –> Xterm.

Window Manager –> FVWM, GNU/Window Maker,….

 

我要抽些时间在我自己的Linux发行版上,找找这些东西都在什么地方 :)

转载于:https://www.cnblogs.com/Jerry-Chou/archive/2010/12/29/1921123.html

你可能感兴趣的文章
Knotter 0.7.0 发布,交错图案设计工具
查看>>
Blue Mind 1.0 正式版发布,消息和协作平台
查看>>
最小生成树(luogu 3366)
查看>>
Python os.path.join 双斜杠的解决方法
查看>>
高并发下线程安全的单例模式
查看>>
牛客网2018年全国多校算法寒假训练营练习比赛(第二场)
查看>>
TD的访问地址
查看>>
Centos下的IO监控与分析
查看>>
在python包管理中使用easy_install软件的步骤
查看>>
JS笔记一:动态修改css样式
查看>>
一道关于数组的前端面试题
查看>>
为何要有交叉编译
查看>>
Retrotranslator使用简介(JDK1.5->1.4)
查看>>
Qss All
查看>>
C# 以ThreadStart方式实现多线程
查看>>
查询近一个月的表空间使用情况
查看>>
PTM人员(产品技术经理)
查看>>
Delphi 的RTTI机制浅探<一>
查看>>
SqlServer中循环和条件语句示例!
查看>>
Sokect异步连接发送
查看>>