X Window 系统旨在允许多个程序共享对一组通用硬件的访问。该硬件包括输入设备(如鼠标和键盘)和输出设备:视频适配器和连接到它们的显示器。其主要架构特点是Server/Client网络模型。不论是本地、远程的应用程序,都统一通过Server/Client模型来运作,比如:让远程的应用程序跑在本地上。

X server 被指定为硬件的控制器,为客户端应用程序提供硬件设备的服务。X 服务器通常向许多同时存在的客户端提供其服务。X 服务器的运行时间比大多数客户端都要长,并侦听来自新客户端的传入连接。

流程演示说明

通过这些箭头,你已经可以明白一些X Window的工作机制了,不过还从一个应用场景来解释一下,想像一下,当你点击了Firefox(X Client)的"刷新"按钮,将会发生以下事情:

  1. 你用鼠标点击了Firefox的"刷新"按钮,这时内核中的device drivers收到了鼠标发来的事件,并输入到evdev,其中

    evdev (short for 'event device') is a generic input event interface in the Linux kernel and FreeBSD.[1] It generalizes raw input events from device drivers and makes them available through character devices in the /dev/input/ directory.这时内核实际上做了很多事情,包括将不同品牌的鼠标发出的不同信号转换成了标准的"evdev"输入信息。

  2. 再发送至了X Server。
  3. 这时X Server可以判断哪个Window该收到这个消息,并将某坐标按下按钮的消息发往X Client----Firefox。但事实上X Server并不知道它得到的窗口信息是不是正确!为什么呢?因为当前的Linux桌面早已经不是10年前的那样了,现在是"Composite"即合成桌面的时代,合成桌面的一个特点便是:Compositor(如Compiz)管理窗口的一切,X Server只能知道屏幕的某个点收到了鼠标消息,却不知道这个点下面到底有没有窗口----谁知道Compiz是不是正在搞一个漂亮的、缓慢的动画,把窗口收缩起来了呢?
  4. 假设应用场景没这么复杂,X Client Firefox顺利地收到了消息,这时Firefox要决定该如何做:按钮要有按下的效果。于是Firefox再发送请求给X Server,说:"麻烦画一下按钮按下的效果。"
  5. 当X Server收到消息后,它就准备开始做具体的绘图工作了:首先它告诉显卡驱动,要画怎么样一个效果,然后它也计算了被改变的那块区域,同时告诉Compiz那块区域需要重新合成一下。
  6. Compiz收到消息后,它将从缓冲里取得显卡渲染出的图形并重新合成至整个屏幕----当然,Compiz的"合成"动作,也属于"渲染(render)",也是需要请求X Server,我要画这块,然后 X Server写入显示器frame buffer,显示合成的内容。The X server does not keep track of what it has drawn on the display. Once bits are rendered to the frame buffer, its responsibility for them has ended.

现代应用程序X Client 时常使用各种客户端渲染库,例如用于渲染 2D 图像的 Cairo 或用于 3D 渲染的 OpenGL。然后这些库可能会将图像推送到 X 服务器进行显示,或者使用 DRI 绕过 X 服务器并直接与本地视频硬件交互,利用 GPU 加速来渲染需要展示的图像.

X window 概念及原理图相关推荐

  1. Storm中的Window机制

    2019独角兽企业重金招聘Python工程师标准>>> 上星期在学习计算机网络的运输层时,发现TCP协议中有window机制,看完之后觉得概念有相通之处,如果懂了再去看storm中的 ...

  2. 【Cadence 17.4电路设计与仿真笔记】02-元件库维护及原理图设计

    [说明]:本文内容包括: 参考资料: 1-Cadence OrCAD 原理图快捷键详解--廖光铖 2-Cadence Allegro 快捷键设置--吴川斌的博客 6-<Cadence Alleg ...

  3. Android解析Window机制

    一.window介绍 什么是window 什么是view树?例如你在布局中给Activity设置了一个布局xml,那么最顶层的布局如LinearLayout就是view树的根,他包含的所有view就都 ...

  4. Android:Window相关理解

    文章目录 一.Window概述 Window概念 Window和DecorView 二.Window属性和类型 Window的类型 应用窗口 子窗口 系统窗口 Window的属性 type参数 Fla ...

  5. Android之Window和弹窗问题

    目录介绍 10.0.0.1 Window是什么?如何通过WindowManager添加Window(代码实现)?WindowManager的主要功能是什么? 10.0.0.2 Window概念解析?W ...

  6. Android 4.4(KitKat)表格管理子系统 - 骨架

    原文地址:http://blog.csdn.net/jinzhuojun/article/details/37737439 窗体管理系统是Android中的主要子系统之中的一个.它涉及到App中组件的 ...

  7. 面试官: Flink双流JOIN了解吗? 简单说说其实现原理

    摘要:今天和大家聊聊Flink双流Join问题.这是一个高频面试点,也是工作中常遇到的一种真实场景. 本文分享自华为云社区<万字直通面试:Flink双流JOIN>,作者:大数据兵工厂 . ...

  8. 图解Android - Android GUI 系统 (1) - 概论

    http://www.cnblogs.com/samchen2009/p/3364327.html Android的GUI系统是Android最重要也最复杂的系统之一.它包括以下部分: 窗口和图形系统 ...

  9. Android 4.4(KitKat)窗口管理子系统 - 体系框架

    原文地址:http://blog.csdn.net/jinzhuojun/article/details/37737439 窗口管理系统是Android中的主要子系统之一,它涉及到App中组件的管理, ...

  10. Calcite-学习笔记(入门篇)

    目录 参考文章 什么是Apache Calcite? 为什么需要Apache Calcite? 什么是关系代数Relational algebra ? 什么是数据库系统的查询优化? Calcite架构 ...

最新文章

  1. 33 个 2017 年必须了解的 iOS/swift 开源库第三方库
  2. 迈克尔戴尔展望医疗愿景:信息驱动创新
  3. 表单如何提交后mysql_如何在表格中添加表单,并提交MYSQL数据库
  4. 美国的机器人军团要来了吗?
  5. kafka详解 转载
  6. 快速排序算法的简短描述
  7. Service Fabric 用 Powershell 部署应用到本地
  8. 一个可以支持多版本的MediaPlayer的控件做法(支持MediaPlayer6,7,8,9,10的播放)
  9. 苹果cms安装 php映射,苹果cmsV10安装过程中的常见问题处理办法
  10. R语言︱用excel VBA把xlsx批量转化为csv格式
  11. 创建线程的三种方法c语言,创建线程 - Python教程 - C语言网
  12. seo和sem的区别是什么?网站seo具体怎么做?
  13. [历朝通俗演义-蔡东藩-前汉]第002回 诛假父纳言迎母 称皇帝立法愚民
  14. c语言写死循环程序,通过简单的例子看c程序死循环
  15. 安卓紧急警报_我们的紧急警报系统依赖于重叠的私有服务混乱局面
  16. 阿里IOT 应用托管部署 (2020/12/02)
  17. 小米路由器登录服务器无响应是怎么回事,小米路由器登录界面打不开怎么办? | 192路由网...
  18. V3S-Zero TF卡无法引导Linux启动问题
  19. SQL Server 2019数据库还原数据报错
  20. rdd数据存内存 数据量_超全spark性能优化总结

热门文章

  1. 黑马品优购项目的总结-首页
  2. java的dtd文件_Eclipse中在XML中如何关联.dtd文件
  3. redhat 5安装mysql_如何在redhat linux advancex 上安装mysql5
  4. HTML中的控制模块,嵌入式Web控制模块 网页控制单片机 Web IO 网页远程控制器 浏览器IO控制...
  5. java获取元素创建时间_Golang中使用Date进行日期格式化(沿用Java风格)
  6. for input string:是什么原因出现的_「汽车空调异味」周期性出现:原因是什么呢?...
  7. python字符串转为ascii码_Python学习经验:无重复字符的最长子串
  8. php strictbool,PHP 7 Bool类型提示不起作用
  9. php转到qq并分享,php怎么实现qq分享
  10. 《大话数据结构》学习笔记