深入了解系统剪贴板
Kale

因为写的软件中涉及到Linux系统剪贴板的部分操作,所以顺便学习一下相关知识

图形平台

首先需要了解,linux内核并不提供图形化界面,所以需要安装图形化界面软件来实现图形化,这点和windows是不一样的,windows中图形化界面的内容已经写到内核中。

图形平台是一个程序,主要任务是协调客户端与操作系统,硬件以及彼此之间的输入输出,通过相关协议进行通信,例如X Window System和Wayland。

X Window System

X Window System是一种以位图方式显示的软件窗口系统,目前年代已经很久远了,并且X只是工具包以及架构规范,本身并没有实际参与运作的实体,所以需要有可执行的实体,所以基于X的基础上,非常流行的实现版本是xorg,而xorg所用的协议版本是x11。

X采用的是C/S架构模型,是由一个X服务器与多个X客户端程序进行通信,服务器接受对于图形输出窗口的请求并反馈用户输入。

流程

  1. 内核捕获鼠标点击事件并发送给X server。
  2. X server会计算该把这一事件发送给哪个窗口(事实上,窗口位置是由Compositor控制的,X server并不能够正确的计算Compositor做过特效变化之后的按钮的正确位置)。
  3. 应用程序对此事件进行处理(将引发按钮更新动作)。但是,在此之前它得向X server发送绘制请求。
  4. X server接收到这条绘制请求,然后把它发给视频驱动来渲染。X还计算了更新区域,并且这条“垃圾信息”发送给了Compositor。
  5. 这时,Compositor知道它必须要重新合成屏幕上的一块区域。当然,这还是要向X server发送绘制请求的。
  6. 开始绘制。但是X server还会去做一些不必要的本职工作(窗口重叠计算、窗口剪裁计算等)。

Wayland

与X Window不同,它规定由客户机自身负责窗口边框和装饰的绘制,窗口管理器简化成显示管理服务。由于X Window发展这么多年以来已经非常臃肿,并且内容已经慢慢被取代,开发者为了适用X就要开发很多额外的扩展,为了解决这个问题,Wayland出现了。

流程

  1. 内核捕获鼠标点击事件并发送给Wayland Compositor。
  2. 由于是直接发给Wayland Compositor的,所以Wayland Compositor会正确地计算出按钮的位置。同时它会把这一事件发送给按钮所在的应用程序来处理。
  3. 应用程序直接渲染,无需向Wayland Compositor请求。只需在绘制完成之后向Wayland Compositor发送一条信息表明这块区域被更新了。
  4. Wayland Compositor收到这条信息后,立即重新合成整个桌面。

剪贴板

下面主要介绍X中剪贴板的实现,与wayland的实现有较大不同,如在项目中实现即时划词翻译,只有在X平台上才可以实现,在Wayland中则无法通过此种方式实现。

Selections

当在一个窗口中选择了某个内容时,Selections中会更新此部分内容,可以通过监控Selections的方式,来实现即时划词翻译。需要注意这里需要client实现了此部分功能,如果client没有实现此部分功能,则selections不会同步更新,比如zotero就没有实现此功能。

Clipboard

这是X平台的正式的剪贴板,用户显式按下复制时,内容会保存到此缓冲区中。

  • 本文标题:深入了解系统剪贴板
  • 本文作者:Kale
  • 创建时间:2022-08-11 22:31:27
  • 本文链接:https://kalew515.com/2022/08/11/深入了解系统剪贴板/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!