Linux 上的 Wayland 是什么?它与 X 有何不同?

news2025/1/10 10:47:10
导读Wayland 是 Linux 发行版的替代窗口系统。它取代了老化的 X11 标准。由于它需要修改应用程序才能使用它,因此迄今为止采用速度很慢。在撰写本文时,增强的安全性是相对于 X11 的主要优势。

X11 或 X Window 系统可让您的图形桌面环境显示和控制窗口。 Wayland 是 X11 的替代品。它的设计速度更快、更安全。以下是您需要了解的有关它们的信息。

Linux 上的 Wayland 是什么?它与 X 有何不同?Linux 上的 Wayland 是什么?它与 X 有何不同?

什么是Wayland?

Wayland 是 X11 的现代替代品,几十年来 X11 一直是 Linux 上的默认窗口系统。 Wayland 是一种通信协议,定义 X Window 显示服务器和客户端应用程序之间的消息传递。 Wayland 项目提供了客户端和服务器库,使应用程序能够使用该协议。

Wayland 项目由红帽开发人员于 2008 年启动。

X的众多名字

X Window System 是一个窗口系统,由麻省理工学院于 1984 年首次针对 Unix 操作系统发布。应用程序可以基于窗口系统提供的功能来生成用户界面。

到 1987 年,X Window 系统已达到版本 11,并被称为 X11。它现在由 X.Org 基金会管理。尽管自 1987 年以来已经出现了许多较小的版本,但它仍处于版本 11。截至撰写本文时,当前的稳定版本是 X11R7.7。

名称中的“X”并不表示罗马数字中的“10”,也不表示“Xtra”、“Xtending”或类似的意思。以前的窗口系统被称为“W”,代表“windows”,当他们开始新项目时,他们只是简单地移动到字母表中的下一个字母。

您会听到 X Window 系统被称为“X”、“X11”、“Xorg”、“X Windows”和“X Window System”。

X11 的工作原理

X Window 系统处理低级事件和原语,例如与鼠标交互以及绘制和移动窗口。应用程序处理视觉效果和界面设计。窗口的外观、它们有哪些按钮以及这些按钮的位置是应用程序程序员做出的选择。 X Window 系统将最终的设计绘制到屏幕上。

X11 提供了在工作的 X Window 系统的各个组件之间必须传递的通信的定义。这种通信是必需的,因为启用 X 的应用程序用于绘制其窗口和界面元素的代码不在应用程序内部。该工作由 X 服务器和窗口管理器共享。

应用程序是 X 服务器的客户端。窗口管理器是一种特殊类型的客户端。 X 服务器负责管理资源、执行绘图请求以及将按键和鼠标单击等事件编组到适当的应用程序。

它还充当窗口管理器和应用程序之间通信的中间人,在它们之间来回代理消息。窗口管理器维护应用程序已打开的窗口列表、它们在屏幕上的位置、它们的大小、它们是否重叠等等。

合成窗口管理器为每个窗口维护一个离屏缓冲区。它将这些缓冲区合成为一个图像,该图像代表最顶层的窗口(代表整个桌面)并写入屏幕。

所有现代图形桌面环境,包括 GNOME 和 KDE,都使用合成窗口管理器。

Wayland 的工作原理

Wayland 旨在解决 X11 的问题。 X11 架构需要大量消息传递。 X 服务器位于客户端和窗口管理器之间。它还位于所有东西和(通过内核)图形硬件之间。消息量过大可能会导致延迟和滞后、跳跃的视觉体验。

还有一个庞大的代码库。有服务器应用程序、窗口管理器应用程序和客户端使用的 X11 库。您的代码库越大(且越旧),维护起来就越困难,并且您将更加难以处理遗留代码。

通过改变架构,Wayland 实现了代码库的现代化和简化,带来了性能优势并提高了安全性。

实际上,他们已将服务器和窗口管理器合并到一个应用程序中。他们删除了执行现在由内核执行的功能的所有代码。他们没有重复工作,而是利用了内核的功能。

使用 Wayland,合成器和客户端应用程序可以直接通信。合成器维护其内部映射,其中包括哪些窗口在桌面上的位置、它们的大小和状态。它代理键盘、鼠标和窗口更改事件,并将它们发送到拥有这些窗口的应用程序。

应用程序相应地更新用户界面。主要区别在于渲染是在应用程序本身内部使用链接的 Wayland 库执行的。

应用程序要么更新用于保存窗口的缓冲区,要么创建一个新缓冲区并丢弃旧缓冲区。然后,客户端应用程序向合成器发送通知,告诉它更新其窗口映射并使用新的或更新的视频缓冲区。

这种简化的架构和现代代码设计提供了性能改进,尤其是窗口大小调整和拖动,显得平滑流畅。

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

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

相关文章

【C语言】指针的进阶(一)

目录 前言 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5. 函数指针 前言 指针在C语言中可谓是有着举足轻重的…

MySQL夺命20连问

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

Seata 源码篇之核心思想 - 01

Seata 源码篇之核心思想 - 01 引言基础架构数据源代理分支事务提交和回滚隔离级别解决脏写读未提交读已提交 小结 笔者个人项目中使用到了seata来做分布式事务管理,面试过程中也经常被问到seata的原理,seata源码本身也不是很复杂,所以准备出一…

FWT小结

核心思想:把 a , b a,b a,b 化成 f w t ( a ) , f w t ( b ) fwt(a),fwt(b) fwt(a),fwt(b),相乘后再化为 a a a 化的过程用的是分治 所以和FFT其实一模一样 OR / AND 卷积 不需要什么技巧,暴力分治转移即可 每次分治下去,…

瑞萨MCU入门教程(非常详细的瑞萨单片机入门教程)

瑞萨MCU零基础入门系列教程 前言 得益于瑞萨强大的MCU、强大的软件开发工具(e studio),也得益于瑞萨和RA生态工作室提供的支持,我们团队编写了《ARM嵌入式系统中面向对象的模块编程方法》,全书37章,将近500页: 讲解面向对象编程…

硬件笔记:组装“固态 U 盘”的八年,从 100 块到 1000 块

这篇文章,聊聊自从 2015 年开始,到目前为止,我使用固态硬盘组装的高速 U 盘,以及它们的使用体验,以及一些明显的坑。 写在前面 2015 年的 8 月,我剁手下单了一块 32G 大小,NGFF接口的三星 22x…

关于 C/C++ 中在指针前加 const 关键字的作用说明

1. 作用说明: 在指针前加 const 的用途为:不可改变指针指向的内存的值,即将该指向指向的内存中的变量置为只读(read-only) 变量。 但是,可以给 const 的指针赋值,即将具有 const 属性的指针指向别的内存地…

Linux 内核镜像分析

文章目录 前言一、概述二、bzImage2.1 镜像分析 三、zImage3.1 镜像分析参考链接 前言 介绍了vmlinux的来源,以及分析方法; 一、概述 在linux系统中,vmlinux(vmlinuz)是一个包含linux kernel的静态链接的可执行文件…

JavaScript中的原型继承和类继承之间的区别

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 原型继承(Prototype Inheritance)⭐ 类继承(Class Inheritance)⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启…

MySQL开启安全审计日志,开启查询日志

MySQL 查询开启日志 在 MySQL 数据库中,开启查询日志是一个非常有用的技术,它能帮助你追踪每一个执行的查询语句,以便更好地优化 SQL 语句和性能。本文将介绍如何在 MySQL 数据库中开启查询日志。 开启查询日志 MySQL 中的查询日志是一种记…

Mysql开启binlog

本案例基于mysql5.7.16实验 1、在linux中进入mysql查询binlog是否打开,执行命令如下: mysql -u root -p 2、查询binlog是否开启命令如下,如果log_bin为OFF则证明mysql的binlog没有打开 show variables like %log_bin%; 3、退出mysql终端&…

OPC DA如何实现跨平台

目录 简介 EntireX DCOM Utgard OPC XML DA OPC UA 协议转换代理 简介 本文介绍OPC DA跨平台通讯的几种方案。 OPC官方说明文档 OPC(OLE for Process Control)是为过程控制专门设计的OLE 技术,基于COM/DCOM的数据访问的标准。常说的O…

vmware去虚拟化

路径:C:\Program Files (x86)\VMware\VMware Workstation\x64\vmware-vmx.exe ,复制一份备份 用16进制工具打开修改这个文件,如winhex 1、搜索 25 73 2E 65 6E 61 62 6C ,找到上面有两个"VMware"开头的 2、硬盘SCSI格…

JAVASE---String类

String类的重要性 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而…

Java 类和对象

在面向对象语言中万物皆对象,一切都围绕对象来进行,找对象、建对象,用对象等。 类:把具有相同特征和行为的一组对象抽象为类,类是抽象概念,如人类、车类等,无法具体到每个实体。 对象&#xff…

71、Spring Data JPA 的 样本查询--参数作为样本去查询数据库的数据,也可以定义查询的匹配规则

★ 样本查询 给Spring Data传入一个样本数据,Spring Data就能从数据库中查询出和样本相同的数据。被查询的数据并不需要和样本是完全相同的,可能只需要和样本有几个属性是相同的。总结: 样本查询–就是把参数作为样本去查询数据库的数据&…

一、 计算机网络概论

一、计算机网络概论 1、计算机网络概述 1.1、概念 计算机网络是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统 是一些互连的、自治的计算机系统的集合 以能够相互共享资源的方…

【Git】Git 变基(rebase)以及rebase和merge之间的区别

Git 变基 1.变基 — rebase 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。 在前面的文章中已经介绍了merge,这里我们来学习另一个指令rebase。 变基的基本操作 回顾之前在 分支的合并 中的一个例子,在该例子中&am…

go Gorm连接数据库,并实现增删改查操作

Gorm 1. 准备工作 首先进入终端下载我们需要的包(确保go和mysql安装完成,并设置了环境变量) go get -u gorm.io/driver/mysql go get -u gorm.io/gorm有两份官方文档有对 GORM 更详细的讲解。 创建 | GORM - The fantastic ORM library f…

EndNote21 | 账户同步问题

问题:无法同步,提示如下图所示。 原因:网络问题。 解决方法:国内网络无法实现同步,解决上网问题即可。