linux图形化X窗口

【linux图形化协议框架】
X、X11系统:X协议,X服务器,窗口管理器,X客户端(客户端库Xcb,Xlib库等),输入、绘制
Wayland系统:Wayland 协议,合成器、客户端(libwayland-client、libwayland-cursor)
以上,已经看到存在2种多个不通版本的图形化系统,为了保障桌面环境和应用程序的一致性、互操作性、兼容性等,这里都得(或部分)遵循XDG标准。

通过环境变量,查看桌面环境后端的图形化系统,如下。展示为x11代表桌面环境后端图形系统是x11系统,如果是tty则是非图形化(比如麒麟服务器vncserver远程后之前提权弹窗问题就是由于窗口的环境变量不标准,在图形化环境种xdg指定为了tty,而非x11),.desktop桌面程序菜单展示的标准即出自该标准,窗口任务栏,系统托盘标准也都是在XDG标准约定。
myb@myb-kylinV10:~/桌面$ echo X D G S E S S I O N T Y P E x 11 m y b @ m y b − k y l i n V 10 : / 桌面 XDG_SESSION_TYPE x11 myb@myb-kylinV10:~/桌面 XDGSESSIONTYPEx11myb@mybkylinV10: /桌面

gtk和qt都提供了对以上图形化系统的支持。
图形化系统这块核心的服务器、合成器需要硬件驱动支持。ubuntu
以下说明围绕的是X窗口。

【X服务器与显示】
绘图显示,处理鼠标键盘输入转换成基本的事件(该事件需要进一步传递给窗口管理器处理)
Xorg X窗口图形服务器,与X客户端通过X协议进行通信,同时提供硬件交互。QT依赖的xcb就是一个客户端的C实现库。
在linux上图形窗口可通过QT,gtk。这两个实现都是基于xcb(或xlib)接口与X服务器进行通信,实现窗口界面相关功能。

【X客户端】
窗口管理器,应用程序UI都是X客户端。通过X协议(X11协议、Wayland协议或框架规范)与X服务器交互。
名字,任意UI程序。

【X桌面应用】
桌面应用基于X协议进行桌面开发,X协议实现如Xcb,Xlib,包括QT底层默认用Xcb。
所以开发桌面应用可以用最基础的Xcb库,封装后的gtk库,封装后的Qt库。

【X窗口管理器】
窗口布局与管理(如位置,大小层叠顺序等装饰器行为)、监听X服务器的需要窗口管理器处理的事件并处理
装饰器(基本的窗口最大化,最小化,移动,边框,标题栏,主体样式,焦点,布局),窗口管理器提供所有窗口的管理操作(统一的风格样式和统一的窗口功能),窗口管理器和普通UI一样也是一个X客户端。而窗口事件分身是X服务器直接分发的。窗口自身的事件由X服务器直接分发,而窗口作为一个整体在系统内部则需要窗口管理器处理,比如一个窗口最小化了自己,那就需要窗口管理器处理让其后的窗口能够展示出来。
名字如KWM,Mutter

【X窗口事件过程】

  1. 用户输入鼠标
  2. X服务器接收鼠标事件,转换成X事件
  3. 事件传递,将事件传给窗口管理器(如果是窗口布局相关的需要窗口管理器介入处理)
  4. 窗口管理器处理事件,分发给对应程序处理移动,缩放等事件(如果是窗口内部事件如按钮点击,则直接由X服务器分发,如果是窗口自身布局相关则窗口管理器处理后二次分发)
  5. 应用程序响应,执行事件处理动作,提交窗口管理器(如果非窗口管理器布局相关事件则直接到提交X服务器)
  6. 窗口管理器转换为绘图请求,提交X服务器
  7. X服务器绘制,刷新显示器输出,完成绘制

【X窗口创建过程】

  1. 应用程序使用XCB接口创建窗口(即向X服务器发送一个创建请求),X服务器维护窗口对象
  2. 应用程序调用Xcb接口映射窗口(像X服务器发送映射请求),X服务器通知窗口管理器窗口的创建
  3. 窗口管理器监听X服务器的窗户事件、应用程序监听窗口内部事件
  4. 窗口管理器分发事件,接收请求、或应用程序直接处理事件

【系统托盘】
以上,可以看到窗口本身和托盘弹窗没关系。桌面显示只关心窗口的显示,而弹窗相当于桌面上一个弹窗程序和其他程序的通信。在linux托盘弹窗定义在不通桌面环境的标准中。一般基于dbus进行通信。
系统托盘自身有标准协议,是桌面组件之一,提供图标展示。
系统托盘通常遵循特定的标准协议,例如System Tray Protocol(也称为Systray Protocol)或者更新的StatusNotifierItem规范,这使得不同的应用程序能够以一致的方式与系统托盘交互
早期gtk2和gtk3提供了GtkStatusIcon托盘操作,gtk4废弃,要实现gtk可采用三方库如libappindicator,或gnome桌面环境可采用其Adwaita库。其他如qt实现了托盘的功能对接,提供QSystemTrayIcon支持多种桌面环境(实际围绕2类图形化系统标准X或wayland)的兼容。
所以要实现这个需要和标准组件接口进行对接。当前可选的:
gtk、qt、gnome下Adwaita,三方库libappindicator(基于gtk,跨桌面环境,兼容性多种桌面环境)

【桌面组件与环境】
如资源管理器,任务管理器,开始菜单,桌面面板,系统托盘等都是桌面的UI组件,这些组件都是独立的X客户端,组件间通过dbus服务进行通信,共同组成了桌面环境。诸如,GNOME,KDE,XFCE等。这些桌面环境也可能支持不通的图形化协议系统。

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

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

相关文章

Python CGI编程-cookie的设置、检索

设置检索 其他: 1. http.cookies和http.cookiejar区别: http.cookies主要用于创建和操作单个cookie对象,适用于需要精细控制单个cookie属性的场景。http.cookiejar则用于管理多个cookie,适用于需要自动处理多个请求和响应中的coo…

算法实现 - 快速排序(Quick Sort) - 理解版

文章目录 算法介绍算法分析核心思想三个版本运行过程挖坑法Hoare 原版前后指针法 算法稳定性和复杂度稳定性时间复杂度平均情况O(nlogn)最差情况O( n 2 n^2 n2) 空间复杂度 算法介绍 快速排序是一种高效的排序算法,由英国计算机科学家C. A. R. Hoare在1960年提出&a…

探索Python新境界:Buzhug库的神秘面纱

文章目录 探索Python新境界:Buzhug库的神秘面纱第一部分:背景介绍第二部分:Buzhug库是什么?第三部分:如何安装Buzhug库?第四部分:Buzhug库函数使用方法第五部分:Buzhug库使用场景第六…

Samtec 技术大咖说 | PCB VS 电缆背板?

【摘要/前言】 选择背板设计需要对特定的网络拓扑结构和应用进行权衡。在某些情况下,对PCB与电缆背板的评估不是 "非此即彼",而是一种组合方式。 Samtec的工程师Andrew Josephson、Brandon Gore和Jonathan Sprigler进行了一次讨论&#xff0c…

一文解析axios源码

写了几年项目,也用了几年的axios,但是一直也不是很了解其中的原理,为啥他能请求前拦截,也为啥他能响应后拦截,正好有空,所以对他的源码进行分析,从github把他的源码拉下来进行分析: 从package.…

Linux权限问题(账号切换,权限,粘滞位)

1.什么是权限? 在Linux下有两种用户,分别是超级用户(root)和普通用户。超级用户可以在Linux下做任何事情,几乎不受限制,而普通用户一般只能在自己的工作目录下(/home/xxx)工作&#…

暴雨高频交易服务器,解决金融行业痛点

随着计算机技术、大数据、人工智能和通信技术的飞速发展,金融市场的交易方式迎来了革命性变化。交易决策和执行过程自动化、智能化,极大提高了交易效率和速度,推动了金融行业的整体创新和发展。 在技术的不断进步和全球金融市场的数字化转型…

三、Kafka集群

一、Kafka集群的概念 1、目的 高并发、高可用、动态扩展。 主备数据架构、双活节点、灾备数据中心。 如果是服务的地理范围过大也可以使不同的集群节点服务不同的区域,降低网络延迟。 2、Kafka集群的基本概念 1)复制(镜像) kaf…

基于 Transformer 的语言模型

基于 Transformer 的语言模型 Transformer 是一类基于注意力机制(Attention)的模块化构建的神经网络结构。给定一个序列,Transformer 将一定数量的历史状态和当前状态同时输入,然后进行加权相加。对历史状态和当前状态进行“通盘…

大数据之文件服务器方案

大数据文件服务器方案 一,文件服务器常用框架 二,文件服务器常用框架的实现技术 文件服务器常用框架 文件服务器是一种专门用于存储、管理和共享文件的服务器,其常用框架的实现技术涉及多个方面,以下是一些主要的实现技术及其详…

【刷题15】字符串专题

目录 一、字符串相加二、最长公共前缀三、最长回文子串四、二进制求和五、字符串相乘 一、字符串相加 题目: 思路: 字符串中的每一位的字符转换为数字后要相加,相加的必须是同一位的,即个位加个位,十位加十位。所以…

企业数据安全举报投诉如何有效处理?

相关制度、流程图等获取请联系作者!! 在当今数字化和信息化的浪潮中,企业数据安全问题越来越受到重视,而对于数据安全的举报和投诉处理是保障企业数据安全、提升用户信任度的重要手段之一。一个完善的举报投诉处理机制能够有效应对…

[综述笔记]Deep learning for brain disorder diagnosis based on fMRI images

论文网址:Deep learning for brain disorder diagnosis based on fMRI images - ScienceDirect 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向…

论文提交步骤 | 2024年第五届MathorCup大数据竞赛

2024年第五届MathorCup数学应用挑战赛—大数据竞赛于2024年10月25日下午6点正式开赛。 论文和承诺书、支撑材料(可选)及计算结果文档由各参赛队队长电脑登录下方报名主页提交: https://www.saikr.com/vse/bigdata2024 初赛作品提交截止时间为…

[sa-token]StpUtil.getLoginId

闲聊 一般情况下,我们想用uid,可能需要前端将uid传过来,或者将token传来,然后我们进行识别。 用了sa-token之后,可以使用StpUtil.getLoginId()方法获取当前会话的用户id 代码展示 例如以下代码: public Res…

双向 Type-C 转 DP 线:高清视频输出的灵活解决方案

在当今数字化生活中,人们对高效能和高清晰度的需求日益增长。双向 Type-C 转 DP 线应运而生,它以其灵活便捷的特点,为用户提供了一种高清视频输出的解决方案。本文将详细介绍双向 Type-C 转 DP 线的技术原理、适用设备、性能参数以及市场选择…

一键式配置适合 Web 开发的Ubuntu系统

大家好,今天给大家分享一个专为Ubuntu设计的Web开发者配置方案Omakub。 项目介绍 Omakub是一个为开发者打造的、经过精心配置的 Ubuntu 环境项目,由 Ruby on Rails 的创造者 David Heinemeier Hansson(DHH)发起。目的是为了简化他…

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦!🤩 基本配置 打包工具:Vite 前端框架:ElementPlus 开发语言:Vue3、TypeScript、Sass 代码检查:ESLint、Prettier IDE&#xf…

【OpenGL】vs中glsl高亮显示插件

vs中glsl高亮显示插件 扩展搜索glsl安装

谷歌CEO劈柴吹了个牛,被自家员工“反诈”

Google的CEO Sundar Pichai,可以说是渲染“AI取代人类”的恐慌氛围的帮凶之一了。 谷歌大部分部门都启用了“AI人力”的策略,进行大规模裁员。与一年前相比,现在谷歌的员工整体数量减少了1112人。 甚至,在最新的公司财报电话会议…