图形界面GUI相关概念GLX/Wayland/X11/DRM/DRI

news2025/2/22 3:10:35

1. GUI图形界面是什么

GUI是graphical user interface的缩写,图形用户接口,实现了基本的WIMP(windows,icons,menus,pointer)。一个GUI的基本组成:display server实现windowing system。参考下图:
在这里插入图片描述

1.1 windowing system

windowing system:管理不同的display screens的软件。是一种GUI的实现。

下表是常见的windowing system,我主要感兴趣的是Wayland和X Window System

类unix系统Windows NT家族系统Web其他
Quartz Compositor(Mac OS X)DWM(Desktop Window Manager)(微软Vista及之后系统用的视窗系统)DojoMiniGUI
WaylandReactOS ExplorerExtJSDM
X Window SystemClassic ShellVWS
W Window SsytemTalisman Desktop

1.1.1 display server

windowing system中主要的组成是display server(或者window server,compositor)。任何用来在窗口中显示GUI界面的软件应用,都是该display server的一个client客户端

display server与client之间的交互协议叫做display server communications protocol

display server
X.Org server(主要是类unix)
Wayland(主要是类unix)
Mir(主要是类unix)
SurfaceFlinger(谷歌安卓)
Quartz Compositor(苹果MacOS)
Desktop Window Manager(微软)

1.1.2 display server communications protocols

X11

X.Org server跑在类unix系统kernel之上,用于接收用户数据并处理然后传给其clients,也用于接收clients传来的数据,进行处理影响合成compositing,并将数据传给kernel模块三者之一:DRM,gem,KMS drvier它是通过将数据写入framebuffer,然后framebuffer中的数据通过GLX传给相关的screen显示

  • GLX:opengl extension to the X window system。是OpenGL与X Window System之间的连接桥梁。

X.Org是一种X Window System实现,但其实现还依赖于另一个软件compositing window manager来做影响合成,比如Mutter和KWin,实现X11客户端库可以依赖于Xlib和XCB。

下图是X.Org server与X clients(比如Amarok)通过X11协议来通信交互。
在这里插入图片描述

通常,X、X11、X Window System的说法可以混为一谈,都代表一种windowing system,那就是X11系统,而X.Org是X Window System中display server的一种实现,通常也叫它X Server

在这里插入图片描述

GLX

GLX(OpenGL Extension to the X Window System)是指OpenGL在X Window System上的扩展,它允许OpenGL程序与X Window System进行交互,并在X Window System中显示图形。GLX最初是由SGI(Silicon Graphics International)开发的,后来成为了OpenGL的标准扩展之一。目前,GLX已经成为了Linux和Unix系统中OpenGL标准的一部分,提供了一种可靠且高效的图形编程方式。

GLX最初的实现是GLX API,叫GLcore,是在X系统中加载了一个mesa渲染器来渲染opengl命令。

随着DRI(direct rendering infrastructure)发展,可以通过direct render方式来加速opengl命令。后来又有DRI2(通过KMS,kernel mode-setting内核模块)替换了DRI。再后来,linux kernel3.12出现render node直接渲染。

下图是通过DRM(direct rendering manager)直接访问到显卡来做处理
在这里插入图片描述

早期通过DRM API,是通过DRM设备/dev/dri/cardX来处理的,后来kernel中合入了render node,/dev/dri/renderDX。

linux kernel3.12开始render node被合入。wayland是通过EGL来direct rendering
在这里插入图片描述

wayland

wayland也是一种display server。同X11类似,wayland也需要依赖wayland compositors,比如Weston、mutter、KWin等。

Wayland compositors与Wayland Clients之间交互协议是Wayland display server protocol。该协议定义client可以通过EGL rendering API来直接访问framebuffer。

在这里插入图片描述

1.2 window manager

什么是window manager?GUI中,在window system中,负责控制视窗位置、外表等的系统软件。大部分window manager具备提供desktop环境的能力。

Gnome、Xfce、KDE都是window manager,不过它们都是工作在X display server上,所以又都是X window manager

window manager描述实例
X window manager使用X window systemGNOME、KDE、Xfce
Microsoft windoes微软从windows2.0开始就提供了集成window manger
ChromeOSAsh

1.2.1 gnome/kde desktops

GNOME,KDE和Xfce desktops是Linux环境下的desktop。display server比如X11只提供基本的绘画能力,然后client通过Xlib和XCB等库来作用X11,具备了不同的视觉能力。

如何开发一个GUI?,通过widget toolkits,比如GTK和Qt

开发套件窗口管理器
GTKGNOME,Xfce
QtKDE

1.2.2 display manager

不同的desktop可能使用不同的display manager(更准确的应该叫做graphical login manager,图形登录系统)。

window managerdisplay manager
GNOMEgdm3
Xfcelightdm
KDEkdm,sddm
LXDELXDM

display manager提供在X server上(或远程)启动一个session会话的功能。

下图示意了基本的框架理解
在这里插入图片描述

【参考文档】

  1. https://en.wikipedia.org/wiki/Windowing_system#List_of_windowing_systems

  2. https://unix.stackexchange.com/questions/345344/difference-between-xorg-and-gnome-kde-xfce

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/470390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

传统制造企业如何数字化转型?中国减速机Top 1企业给出这份答案

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 数字中国建设正在如火如荼地展开,百业千行也都在寻求自身业务与数字化的深度融合。 2022年制造业增加值占GDP比重约为30%,在数字经济赋能新发展的当下,制造业成为数字技术重点实施落地的载…

2023/4/27总结

第一周任务 - Virtual Judge (vjudge.net) 1.这道题目穷举即可 最多90次 #include<stdio.h> int getLucky(int x) {int a[10],i,n,tx,max0,min10;for(i0;t;i){a[i]t%10;t/10;if(a[i]>max) maxa[i];if(a[i]<min) mina[i];}return max-min; } int slove(int l,int r…

Layui 2.8.1 正式发布,朴实归来

Layui 是一套开源免费的 Web UI 组件库&#xff0c;采用自身轻量级模块化规范&#xff0c;遵循原生态的 HTML/CSS/JavaScript 开发模式&#xff0c;极易上手&#xff0c;拿来即用。其风格简约轻盈&#xff0c;而内在雅致丰盈&#xff0c;甚至包括文档在内的每一处细节都经过精心…

docker部署harbor

Harbor介绍 以Docker为代表的容器技术的出现&#xff0c;改变了传统的交付方式。通过把业务及其依赖的环境打包进Docker镜像&#xff0c;解决了开发环境和生产环境的差异问题&#xff0c;提升了业务交付的效率。如何高效地管理和分发Docker镜像&#xff1f;是众多企业需要考虑…

Shenll编程之循环语句与函数

循环语句 一、for循环二、continue跳出循环continue二次跳出循环 三、break终止循环 循环是一种控制流程的结构&#xff0c;用于重复执行一段代码 遍历是一种数据操作的过程&#xff0c;用于访问并处理数据构成中的每个元素 在某些情况下&#xff0c;循环和遍历可以结合使用&am…

c++标准模板(STL)(std::array)(二)

定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起) std::array 是封装固定大小数组的容器。 此容器是一个聚合类型&#xff0c;其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数…

苹果id密码忘记了怎么重新设置?请收好这份攻略!

案例&#xff1a;怎么重新设置apple ID密码&#xff1f; 【9敏&#xff01;想下载美颜相机&#xff0c;结果忘记苹果id密码了&#xff0c;有什么方法重新设置吗&#xff1f;】 在日常使用中&#xff0c;我们有时候会遇到忘记苹果ID密码的问题&#xff0c;这时候需要重新设置苹…

车联网OTA安全实践

摘要&#xff1a; 近年来&#xff0c;智能汽车已成为全球汽车产业发展的战略方向&#xff0c;汽车技术与工程核心逐渐从传统硬件层面转移到软件层面&#xff0c;汽车行业已经踏上了软件定义汽车&#xff08;SDV&#xff09;的变革之路。 在SDV的大趋势下&#xff0c;汽车零部件…

界面控件DevExpress WinForm的垂直网格,让数据展示更灵活(二)

DevExpress WinForm Vertical Grid&#xff08;垂直网格&#xff09;组件设计用于提供UI灵活性&#xff0c;它允许显示数据集中的单个行&#xff0c;或在其90度反向网格容器中显示多个数据集行。此外&#xff0c;开发者还可以将其用作属性网格&#xff0c;就像在Visual Studio …

VueBaiDuMap百度地图组件常用案例

VueBaiDuMap获取可视区边界点坐标_毛三仙的博客-CSDN博客【代码】VueBaiDuMap获取可视区边界点坐标。百度地图&#xff0c;左上角左下角右上角右下角坐标https://blog.csdn.net/m0_74149462/article/details/130420983?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%…

《springboot实战》 第十二章 SpringBoot整合swagger-bootstrap-ui

前言 SpringBoot整合swagger&#xff0c;使用swagger-bootstrap-ui美化页面。 1、环境配置 1.1、导入依赖包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version…

不得不说的结构型模式-代理模式

目录 代理模式&#xff1a; 下面是一个简单的C代码案例 下面是面试中可能遇到的问题&#xff1a; 代理模式&#xff1a; 代理模式是一种结构型设计模式&#xff0c;它通过引入一个代理对象来控制对另一个对象的访问。代理对象充当原始对象的中介&#xff0c;通过拦截对原始…

倾斜摄影超大场景的三维模型的顶层合并的点云抽稀处理技术分析

倾斜摄影超大场景的三维模型的顶层合并的点云抽稀处理技术分析 倾斜摄影超大场景的三维模型的顶层合并需要进行点云抽稀处理&#xff0c;以减小数据量和提高数据处理和展示性能。以下是几种常用的点云抽稀处理技术&#xff1a; 1、体素栅格化&#xff1a;将点云数据转换为3D体…

【TCP 协议】报文格式,数据可靠传输的机制(一)

哈喽&#xff0c;大家好~我是你们的老朋友&#xff1a;保护小周ღ 本期为大家带来的是网络编程的 TCP 传输控制协议的概念 &#xff0c;首先会讲解 TCP 协议的报文格式&#xff0c;在学习报文格式之后&#xff0c;会学习两种 TCP 保证数据可靠传输的机制&#xff0c;确认应答…

getType() 和 getGenericType()的区别

处理泛型时会经常用到这两个方法&#xff0c;但是二者的区别是什么&#xff1f; 先看看官方的解释&#xff1a; getType 》&#xff1a;Returns a Class object that identifies the declared type for the field represented by this Field object. 返回字段对象声明类型的…

nodejs+python+php+springboot+vue 婚庆公司服务网站管理系统

管理员模块 &#xff08;1&#xff09;信息管理模块&#xff1a;对商家和个人的查看&#xff0c;修改。 &#xff08;2&#xff09;留言管理模块&#xff1a;对留言进行管理&#xff0c;确定是否能进行发布&#xff0c;对留言进行回复。 &#xff08;3&#xff09;权限管理&…

Git常用命令2

git commit --amend 有时候我们提交完了才发现漏掉了几个文件没有添加&#xff0c;或者提交信息写错了。 此时&#xff0c;可以运行带有 --amend 选项的提交命令来重新提交,这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改&#xff08;例如&#xff0c;…

【C++入门】一篇搞懂auto关键字

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】 目录 作用不那么大的场景auto真正的价值注意点auto不能推导的场景范围for范围for的使用条件 作用不那么大的场景 在C中推出了…

工业元宇宙对于制造业的影响有哪些?

伴随元宇宙的快速发展&#xff0c;它在诸多现实场景中都实现了广泛应用&#xff0c;特别是在全球科技与产业竞争核心的智能制造领域。元宇宙与智能制造融合的本质是重构企业研发、制造、销售、终端四大场景&#xff0c;相当于把企业打包进虚拟世界&#xff0c;在虚拟世界中建设…

(五)ArcCatalog应用基础——ArcCatalog基本操作

&#xff08;二&#xff09;ArcCatalog应用基础——ArcCatalog基本操作 当ArcCatalog 与文件夹、数据库或者 GIS 服务器建立链接之后&#xff0c;就可以通过 ArcCatalog 来浏览其中的内容。ArcCatalog 具有浏览地图和数据、创建元数据、搜索地图数据、管理数据源等功能&#x…