盈彩体育注册(中国)有限公司
盈彩体育注册(中国)有限公司 您所在的位置:网站首页 盈彩体育注册(中国)有限公司 Linux图形界面显示原理

Linux图形界面显示原理

2024-05-06 05:35:18| 来源: 网络整理

0x03 显示管理器

  显示管理器用于开机后显示登陆界面,并启动窗口管理器等XWindow组件。如果没有显示管理器,Linux开机会显示命令行登陆界面,需要使用命令行登陆后手动启动X server和窗口管理器才能显示GUI。

0x04 窗口管理器12341 窗口层级2 子框架重定向3 二次排版4 窗口合成管理器

  窗口管理器是前端的核心组件,其主要负责管理每个独立窗口如何显示/移动,怎样反馈输入,怎样组织各个窗口。目前常用的窗管有XFCE的xfwm,Gnome的mutter,KDE的Kwin等。XWindow并未指定一个专用的窗口管理器,也没有定义窗口管理器的行为,因此用户可以任意替换。关于如何写一个窗口管理器可以参考文献[1]。  窗口管理器的本质上就是一个常规的X Client,它并没有超级用户权限,也并不能直接调用内核函数。但是,窗管能通过X Server提供的特殊API来控制屏幕显示(X Server至多只会有一个窗口管理器的存在)。窗管与X Server的交互是通过属性和事件机制实现的。下面将详细介绍窗管实现的细节:

1、窗口层级  在显示器显示的时候,所有窗口的管理实际上是一个树形结构,这个树的根就是顶层窗口(一个虚拟的,不可见的窗口,但是它的大小跟屏幕一样,同时会永远的存在)。有Qt开发经验的都清楚,每个界面应用(X Client)都有一个QWindows(QWidget)作为主窗口,而所有的主窗口最后都会挂载到顶层窗口中。

2、子框架重定向  在X Window System的设计理念中,X Server并不直接管理窗口显示,这个功能均转交给窗管实现。实际上如果没有窗管,那么显示就由X Server直接处理,然而在有窗管存在的情况下,显示过程中窗管会先拦截X Client对界面显示操作的请求,这种拦截技术被称为子框架重定向(Substructure Redirection)。

  X Server在任何情况下,只允许一个窗口管理器注册子框架重定向。当有第二个窗管在对一个已被注册子框架重定向的X Server进行注册时,原先的窗管不会从X Sever解注册,断连或者崩溃。

3、二次排版

  为了实现窗口风格的统一,窗口管理器在接收到X Client的窗口绘制时会主动为其添加包含标题栏的框架窗口(Frame Window),这也是为什么Qt窗口应用默认会有标题栏的原因。

4、窗口合成管理器  现代的界面显示已经不能满足于窗口了,例如Shift Switcher:

  为了实现更加复杂的显示,出现了离屏内存缓冲区的概念(Wayland中使用的DRM技术)。实现步骤如下:

1. 渲染每一个顶层窗口以及它的内部UI节点到一个离屏内存缓冲区,而不是直接输出到硬件上;2.根据我们的设计,使用旋转,扭曲这样的方式来变化每个缓冲区的样式;3.将这些经过变化的缓冲区融合到一个最终的缓冲区中,同时还需要将背景和其他需要展示的UI也合并进来;4.将这个最终缓冲区的内容渲染到屏幕上。

0x05 文件管理器

  管理硬盘的分区显示。

0x06 常见问题

  1.通过Windows的远程桌面功能远程连接到Linux的桌面系统,无法显示水印进程。而直接在Linux上安装向日葵,并远程连接,可以正常显示水印进程。

0x07 引用文献

[1]https://jichu4n.com/posts/how-x-window-managers-work-and-how-to-write-one-part-i



【本文地址】 转载请注明 

最新文章

推荐文章

CopyRight 2018-2019 盈彩体育注册(中国)有限公司 版权所有 豫ICP备16040606号-1