Wayland 入门

这篇具有很好参考价值的文章主要介绍了Wayland 入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

Wayland 是一个用于构建显示服务器和客户端应用程序的通信协议和库。它旨在取代 X Window System(X11)作为 Linux 和其他操作系统上的图形显示系统。

相对于 X11,Wayland 设计更为简单、现代化,并具有更好的性能和安全性。它采用了一种更直接的通信模型,通过消息传递机制进行客户端和服务器之间的通信,而不是像 X11 一样使用网络协议。

Wayland 的核心思想是将图形显示系统拆分为两个主要组件:

  1. Wayland 服务器(Compositor):负责显示的合成、窗口管理和输入事件的处理。它是 Wayland 协议的服务器端实现,并与底层图形驱动和硬件交互。
  2. Wayland 客户端:应用程序通过 Wayland 协议与服务器进行通信,发送绘图指令和接收输入事件。

Wayland 协议定义了服务器和客户端之间的通信规范,包括窗口管理、输入事件、缓冲区交换等。它使用对象和接口的概念来描述不同的功能,并通过消息传递进行交互。

Wayland 的优势包括:

  1. 更低的延迟:Wayland 的设计目标之一是减少显示系统的延迟,提供更流畅的用户体验。
  2. 更高的性能:由于 Wayland 的通信模型更简单直接,可以减少不必要的复制和转换操作,从而提高图形渲染性能。
  3. 更好的安全性:Wayland 采用了精细的权限控制和隔离机制,确保客户端应用程序无法访问其他应用程序的图形缓冲区数据。
  4. 易于开发和调试:Wayland 的设计简单清晰,易于理解和实现,使开发者能够更轻松地构建和调试图形应用程序。

X11 架构

在讲 Wayland 架构前,我们先了解 X11 的架构

  1. 内核从输入设备获取事件并通过 evdev 输入驱动程序将其发送到 Xorg。内核通过驱动设备并将不同的设备特定事件协议转换为 linux evdev 输入事件标准来完成所有的工作。
  2. Xorg 服务器确定事件影响哪个窗口,并将其发送到在该窗口上绑定的客户端。Xorg 服务器实际上并不知道如何正确执行此操作,因为屏幕上的窗口位置由合成器控制,并且可能以 Xorg 服务器无法理解的多种窗口转换方式,如(缩小、旋转、摆动、 ETC)。
  3. 客户端查看事件并决定做什么。通常,UI 必须更改以响应事件 。 也许单击了复选框或指针进入了必须突出显示的按钮。因此,客户端将渲染请求发送回 Xorg 服务器。
  4. 当Xorg 服务器收到渲染请求时,它会将其发送给驱动程序,让其对硬件进行编程来进行渲染。Xorg 服务器还计算渲染的边界区域,并将其作为damage事件发送到合成器。
  5. damage 事件告诉合成器窗口中发生了某些变化,并且它必须重新合成屏幕上该窗口可见的部分。合成器负责根据场景图和 X 窗口的内容渲染整个屏幕内容。然而,它必须通过 X 服务器来呈现它。
  6. Xorg 服务器接收来自合成器的渲染请求,并将合成器后缓冲区复制到前缓冲区或执行翻页。

Wayland 架构

在 Wayland 中,合成器就是显示服务器。我们将 KMS 和 evdev 的控制权转移给合成器。Wayland 协议允许合成器将输入事件直接发送到客户端,并让客户端将损坏事件直接发送到合成器:

  1. 内核获取一个事件并将其发送到合成器。这与 X11的情况类似,因为我们可以重用内核中的所有输入驱动程序。
  2. 合成器查看其场景图以确定哪个窗口应接收事件。场景图对应于屏幕上的内容,合成器了解它可能应用于场景图中元素的转换。因此,合成器可以选择正确的窗口并通过应用逆变换将屏幕坐标转换为窗口本地坐标。可以应用于窗口的变换类型仅限于合成器可以执行的操作,只要它可以计算输入事件的逆变换即可。
  3. 与 X11 情况一样,当客户端收到事件时,它会更新 UI 作为响应。但在 Wayland 的情况下,渲染发生在客户端,客户端只需向合成器发送请求以指示已更新的区域。
  4. 合成器从其客户端收集损坏请求,然后重新合成屏幕。合成器可以直接发出 ioctl 来使用 KMS 安排页面翻转。

Wayland 的必要硬件支持

通常,硬件启用包括 modesetting/display、EGL/GLES2和 EGL/GLES2。最重要的是,Wayland 客户端和服务端都需要一种在进程之间有效共享缓冲区的方法。

目前常见已经支持Wayland 的SOC/GPU

  1. NXP 的 IMX6Q,IMX8M 系列,GPU为 Vivante 系列
  2. ST 的 stm32mp 系列,GPU 为 Vivante 系列
  3. rockchip 的 rk3399,rk3568,rk3588 等支持图形的 SOC,GPU为 Mali 系列

目前常见已经支持 Wayland 的PC端GPU

  1. NVidia 显卡:目前 NVidia 由于开源了内核部分的驱动代码,加之社区舆论的压力下,基本已全系列支持 Wayland
  2. AMD 显卡:AMD 是 Wayland 社区做的最好的,不仅内核驱动全部开源在 Linux 主线,就连 opengl 部分的源码也开源在 Mesa 上游

目前本人调试过不支持 Wayland的国产显卡文章来源地址https://www.toymoban.com/news/detail-820931.html

  1. 景嘉微显卡:JM9230

到了这里,关于Wayland 入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PHP从入门到精通—PHP开发入门-PHP概述、PHP开发环境搭建、PHP开发环境搭建、第一个PHP程序、PHP开发流程

    每开始学习一门语言,都要了解这门语言和进行开发环境的搭建。同样,学生开始PHP学习之前,首先要了解这门语言的历史、语言优势等内容以及了解开发环境的搭建。 PHP概述 Ø 认识PHP PHP最初是由Rasmus Lerdorf于1994年为了维护个人网页而编写的一个简单程序。这个程序用来显

    2024年02月14日
    浏览(46)
  • 一文带你入门Arco Design,快速构建一个Arco项目Demo

    确保你的机器中有Node.js和Git环境,如果没有,参考如下文章: Node.js安装及环境配置 Git安装配置教程 开始开发之前,请确认本地环境中安装好了 node , git 和 arco cli 其中 arco cli 是安装项目模版的工具,请运行以下命令安装: 在某一个文件夹下运行Shell,运行如下命令新建项

    2024年02月13日
    浏览(33)
  • Pyside6入门教学——编写一个UI界面并显示

    1、安装Pyside6 输入下列命令安装Pyside6。 2、设计UI 打开Qt设计工具(在安装Pyside6包的目录下)。 【注】我这用的是anaconda虚拟环境,所以我的路径是D:AppAnaconda3envssnakeLibsite-packagesPySide6。 设计一个界面,如何设计这里不详细讲解。 设计完后保存,得到一个ui文件。(另存

    2024年01月20日
    浏览(35)
  • 【监控仪表系统】Grafana 中文入门教程 | 构建你的第一个仪表盘

    Grafana 读音:/grəˈfɑːnˌɑː/ 在大厂工作久了,时常对一些工具的存在觉得理所当然。 比如说,需要计算资源的时候,一个配置文件就可以要来两百台虚拟化好的机子。需要试下缓存?点下鼠标就可以要到几十个配置好的 Redis 结点。 最省心的是,这些工具都已经根据工作流

    2024年02月02日
    浏览(32)
  • 【VTK】读取一个 STL 文件,并使用 Qt 显示出来,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 直接先把效果放出来,有需要就往下看。 骷髅3D打印3D模型

    2024年02月14日
    浏览(52)
  • 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)

    【spring authorization server系列教程】(一)入门系列,快速构建一个授权服务器 spring authorization server是spring团队最新的认证授权服务器,之前的oauth2后面会逐步弃用。不过到现在发文的时候,我看到官网已经把之前oauth2仓库废弃了。 现在spring authorization server已经到生产就绪阶段了

    2024年02月05日
    浏览(41)
  • Ubuntu22.04设置独显用于深度学习运算,核显用于屏幕显示

    目前有需求配置台式机win11+Ubuntu的双系统,安装双系统的教程比较多,安装n卡驱动的教程也比较多,但是大多数的教程都到独显驱动安装完毕为止,这意味着按照教程配置好之后桌面会占用独显的现存大概100-200M,对于显存比较紧张的深度学习运算的情况下很有可能是致命的

    2024年02月02日
    浏览(28)
  • Docker Consul概述及构建

    Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。 Consul是分布式的、高可用的、可横向扩展的用于实现分布式系统的服务发现与配置。 在client模式下,所有注册到当前节点的服务会被

    2024年02月07日
    浏览(25)
  • Docker Harbor概述及构建

    Harbor是VMware公司开源的企业级Docker Registry 项目,其目标是帮助用户迅速搭建一个 企业级的Docker Registry 服务。 Harbor以Docker 公司开源的Registry 为基础,提供了图形管理UI、基于角色的访问控制(Role Based AccessControl)、AD/LDAP集成、以及审计日志(Auditlogging)等企业用户需求的功能,同

    2024年02月08日
    浏览(27)
  • UE构建基础和实践:一、概述

    构建这个概念是和应用程序包及资源等相关的,它的特点是使用脚本控制一系列的任务的处理,以减少人力操作带来的成本和操作失误风险。 在UE的概念里,构建往往是和打包相关的(如编译、cook、压缩打包等)。但是在项目日常的开发中,构建的语义会更加的广泛,据我所

    2024年02月16日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包