首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >编写 Wayland 客户端(一)

编写 Wayland 客户端(一)

作者头像
云水木石
发布2025-11-17 14:01:36
发布2025-11-17 14:01:36
780
举报
文章被收录于专栏:信创系统开发信创系统开发

前言

在上一篇文章 干得漂亮,Ubuntu 终于干掉了 X11 写到 Linux 界一哥终于下定决心彻底移除多年来统治 Linux 桌面的 X 系统。但 Wayland 彻底取代 X 系统,不仅仅是操作系统和硬件厂商的事情,应用软件也得跟上。当然如果是使用 Qt、GTK 等 GUI 框架应用,没有直接使用 X11 API,就可以自动适应,不需要修改应用程序。但是在应用开发过程中,不可避免的会使用 X11 API。比如我之前开发的 AiOffice 应用,为了处理按键消息,就跳过了 Qt,直接使用 X11 的按键处理 API。此外,还有些应用,并不会使用 Qt、GTK 之类的重量级框架,比如 Wine,为了高效模拟 Windows API,就直接使用了 X11 的 API。像这类应用,就需要专门针对 Wayland 做适配。

在搜索 Wayland 开发资料,特别是 Wayland 客户端应用开发资料时,发现资料太少了。当然 X 系统的开发资料一样少,可以看出 Linux 在桌面端的地位,很是尴尬。在搜遍全网之后,发现有两个教程还算不错:

  • Writing Wayland clients
  • The Wayland Protocol

前面的教程托管在 gitbook 上,但很可惜的是,部分章节无法访问。这个问题原作者还在网上吐槽过,估计作者也没有保存原稿。同时太过冷门,网上都没有找到搬运的。

第二本是一本参考手册,内容比较全面,作为手册很不错,但是作为开发教程,不是那么友好。

Writing Wayland clients 这份教程结构清晰,通俗易懂,有实例辅助,比较适合作为开发入门资料。虽然现在有 AI,这种入门的 Demo 交给 AI 就可以完成得很好。但是要处理比较复杂的问题,比如 Wine 中的 Wayland 移植,不对 Wayland 有深入的理解,就很难去解决窗口显示、输入法等深层次问题。这部分工作交给 AI 去完成,目前还没有达到所需的智能程度,所以从基础开始入门,逐步深入 Wayland 协议是非常有必要的。

这里以 Writing Wayland clients 这份教程为基础,通过翻译大部分章节,补充缺失的章节,根据最新 Wayland 协议添加一些实例,希望给大家呈现一个比较完整的 Wayland 客户端开发教程。

简介

本指南是对 Wayland 协议的入门介绍。

在学习本指南的过程中,你将了解 Wayland 的基础知识,并创建几个客户端:从最简单的客户端(一个黑色方块),到一个玩具级的工具包库,它将处理许多高级功能,比如更换光标、处理鼠标点击以及渲染客户端窗口装饰。等我自己理清 EGL 后,我们还会进一步探索它。

什么是 Wayland?

Wayland 是一种用于在屏幕上显示图形的现代协议。它的设计目的是弥补前任 X11 的不足。例如,它速度更快、安全性更高,并且支持完善的触控、HiDPI 和多显示器。

你可以在维基百科的相关文章以及官方网站上阅读更多关于 Wayland 的内容。

我需要了解 Wayland 吗?

在开始编写 Wayland 客户端之前,你可能会想:我是否必须深入了解 Wayland 协议?

答案是:不一定

你完全可以在不了解 Wayland 内部细节的情况下开始编写客户端程序。Wayland 提供的 wayland-client 库封装了大部分底层细节,使你可以专注于创建窗口、处理输入和渲染图形,而不必立即理解协议的每一个部分。

当然,如果你希望开发更复杂的客户端,或者想深入优化性能,那么理解 Wayland 的工作原理会非常有帮助。例如,了解 Wayland 的事件循环、缓冲区管理以及与显示服务器的通信方式,会让你在处理输入、渲染和同步时更加高效。

总的来说:

  • 初学者:可以直接使用 wayland-client 编写简单客户端。
  • 高级开发者:了解 Wayland 内部机制会带来更多控制权和优化空间。

本指南不包括的内容

在你开始阅读本指南之前,有必要明确一点:本指南并不是一本全面的 Wayland 客户端开发参考手册

具体来说,本指南不包含以下内容:

  1. Wayland 协议的完整规范
    • 如果你想深入了解 Wayland 协议的每个接口、事件和扩展,这本指南不会覆盖所有细节。
    • 对于这类需求,你应当参考官方文档和协议规范。
  2. 高层 GUI 工具包的使用
    • 本指南聚焦于直接使用 wayland-client 库开发客户端,而不是 GTK、Qt 或其他高级 GUI 工具包。
    • 如果你希望快速开发完整应用程序,使用这些工具包会更方便,但本指南不会涉及它们。
  3. 操作系统或显示服务器的深入原理
    • 虽然你会了解 Wayland 客户端如何与显示服务器交互,但本指南不会深入讨论操作系统内核或显示服务器的实现细节。
  4. 完整的图形渲染教程
    • 本指南会介绍基础的绘图和渲染方法,但不会作为 OpenGL、Vulkan 或 EGL 的全面教程。

本指南适合谁阅读?

本指南主要面向以下读者群体:

  1. 想学习 Wayland 客户端编程的人
    • 你已经熟悉 Linux 编程基础,想了解如何直接与 Wayland 显示服务器交互,而不是依赖高级 GUI 工具包。
  2. 喜欢实践的人
    • 本指南通过示例逐步引导你从最简单的窗口开始,到处理输入事件、渲染内容,最终可能构建一个小型工具库。
  3. 对现代 Linux 图形系统感兴趣的人
    • 如果你想深入理解 Linux 图形栈,了解 Wayland 相比 X11 的优势,以及如何高效管理窗口和输入事件,本指南会很有帮助。

注意

  • 本指南不适合完全没有 C/C++ 或 Linux 编程经验的初学者。
  • 如果你只想快速构建 GUI 应用程序,而不想了解底层机制,使用 GTK、Qt 等工具包可能更合适。

如何阅读本指南

本指南的内容设计为循序渐进,你可以根据自己的需求选择阅读方式:

  1. 顺序阅读
    • 如果你是第一次接触 Wayland 客户端编程,建议按照章节顺序阅读,从最简单的示例开始,一步步理解客户端创建、输入处理和渲染机制。
  2. 按需阅读
    • 如果你只对某些主题感兴趣,例如处理鼠标点击或客户端窗口装饰,可以直接跳到对应章节阅读。
    • 本指南的示例代码大部分独立,每个章节都有自己的实践内容,因此按需阅读也不会影响理解。
  3. 动手实践
    • 强烈建议在阅读每个示例之后,自己在 Linux 环境中运行和修改代码。
    • 通过实践,你会更快理解 Wayland 的客户端机制,也更容易掌握事件循环、缓冲区管理和渲染等核心概念。

鸣谢

作者感谢以下人士和资源对本教程的帮助:

  • 提供反馈和建议的同行开发者
  • Wayland 社区的文档和示例代码
  • 各类开源项目,让学习 Wayland 变得更加方便

作者表示,这本指南虽然尽力覆盖实际开发中常见的场景,但仍可能存在错误和不完善的地方。欢迎读者反馈问题,共同完善内容。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云水木石 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 简介
    • 什么是 Wayland?
    • 我需要了解 Wayland 吗?
    • 本指南不包括的内容
    • 本指南适合谁阅读?
    • 如何阅读本指南
    • 鸣谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档