#应用程序 #选择 #剪贴板 #Wayland #已复制 #监控 #辅助工具

app clipmon

clipmon,或剪贴板监控器,是一个Wayland辅助工具,当复制数据的程序退出时,它将保持选择。

1 个不稳定版本

0.1.0 2024年6月8日

#1016GUI

ISC 许可证

25KB
432

clipmon

builds.sr.ht status

clipmon,或clipboard monitor 是一个Wayland辅助工具,

  1. 它在复制数据的程序退出时保持选择。通常,当复制程序退出时,选择会丢失,这可能会相当令人烦恼。保持选择与现代桌面上的正常期望相匹配。此功能是稳定的
  2. 当应用程序粘贴选择时显示通知。这旨在作为安全措施:当不受信任的应用程序(理想情况下在沙箱中)在剪贴板中窃听时,用户会迅速被通知正在发生的事情。此功能是工作进度

最初的意图只是第二个功能,但由于底层Wayland协议的限制,需要实现剪贴板监控器来实现这一点。

构建

使用 cargo build 进行构建。您也可以使用 cargo run 快速运行此命令。

设计

  • 我们使用 wlr-data-control-unstable-v1 Wayland 协议。
  • 一旦应用程序将数据复制到选择中,我们就复制这些数据并自己声明剪贴板。
  • 因为只有前台应用程序可以获取选择,所以其他应用程序在我们之前尝试读取数据是不可能的。
  • 当另一个应用程序尝试粘贴选择时,我们会收到该请求,并在发送任何数据之前显示通知。尚未实现

此外,clipmon 避免将复制的数据写入磁盘,因为高度敏感的信息可能通过剪贴板传递,这可能导致意外泄露。

调试

使用 WAYLAND_DEBUG=1 查看所有Wayland事件——这通常是调试clipmon所需的。

注意事项

为了保持剪贴板选择,clipmon 需要读取任何复制的选择。

这意味着如果您复制一行文本,clipmon需要读取整个文本并创建它的内存副本,这样当原始应用程序存在时,clipmon仍然在内存中有它的副本。在复制文本时,这通常小于1KB的内存,但是当您复制图像时,原始应用程序可能会将选择项暴露为多种格式(jpeg/png/ico/bmp等)。为了避免任何数据丢失,clipmon必须复制所有这些格式,这可能会占用几兆字节的RAM。

包含复制数据的内存可能会被交换;防止这种情况尚未实现。

当两个选择项以极快的速度连续进行时,可能会出现竞争条件。这是由于底层wayland协议的设计限制,但在现实生活中不太可能发生,因为这对于人类操作员来说需要太快才能触发问题。这需要修改底层Wayland协议才能修复。

开发

请在邮件列表上发送补丁,并将错误报告发送到问题跟踪器。欢迎加入Libera Chat上的#whynothugo。如果您觉得这个工具很有用,请留下小费

许可证

clipmon在ISC许可证下开源。有关详细信息,请参阅许可证。

依赖关系

~3–8.5MB
~64K SLoC