1 个不稳定版本
0.1.0 | 2024年6月8日 |
---|
#1016 在 GUI
25KB
432 行
clipmon
clipmon
,或clipboard monitor
是一个Wayland辅助工具,
- 它在复制数据的程序退出时保持选择。通常,当复制程序退出时,选择会丢失,这可能会相当令人烦恼。保持选择与现代桌面上的正常期望相匹配。此功能是稳定的。
- 当应用程序粘贴选择时显示通知。这旨在作为安全措施:当不受信任的应用程序(理想情况下在沙箱中)在剪贴板中窃听时,用户会迅速被通知正在发生的事情。此功能是工作进度。
最初的意图只是第二个功能,但由于底层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