22
33一个以 ** Linux Wayland** 为主要使用场景,同时支持 Linux X11、Windows 和 macOS 的轻量截图与标注工具。
44
5- Clipit 通过标准的 [ XDG Desktop Portal] ( https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.portal.Screenshot.html ) 获取屏幕画面 ,再在应用内完成区域选择、标注、保存和复制。它不依赖 X11 抓屏,也不绑定 GNOME Shell 私有接口。
5+ Clipit 在 Wayland 下通过标准的 [ XDG Desktop Portal] ( https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.portal.Screenshot.html ) 获取画面 ,再在应用内完成区域选择、标注、保存和复制。Wayland 路径不依赖 X11 抓屏,也不绑定 GNOME Shell 私有接口。
66
77![ Clipit 程序截图] ( https://img.cdn1.vip/i/6a52698f6b18b_1783785871.webp )
88
@@ -21,7 +21,7 @@ Clipit 要解决的是这段缺失的工作流:**在遵守 Wayland 安全模
2121
2222## 功能
2323
24- - 区域截图、全屏截图和延时截图
24+ - 区域截图、窗口截图、 全屏截图和延时截图
2525- 矩形、箭头、自由画笔和单行文字
2626- 模糊与马赛克隐私处理
2727- 预设色板与屏幕像素取色
@@ -39,19 +39,20 @@ Clipit 要解决的是这段缺失的工作流:**在遵守 Wayland 安全模
3939| 平台 | 截图方式 | 当前状态 |
4040| --- | --- | --- |
4141| GNOME / KDE Wayland | XDG Desktop Portal | 主要支持目标 |
42- | Linux X11 | Qt ` QScreen::grabWindow() ` | 可用 |
43- | Windows | Qt ` QScreen::grabWindow() ` | 基础支持 |
44- | macOS | Qt ` QScreen::grabWindow() ` | 基础支持,需要录屏权限 |
42+ | Linux X11 | X11 活动窗口查询 + Qt ` QScreen::grabWindow() ` | 可用 |
43+ | Windows | Win32 活动窗口查询 + Qt ` QScreen::grabWindow() ` | 基础支持 |
44+ | macOS | Qt + Core Graphics | 基础支持,需要录屏权限 |
4545
46- Wayland 下,portal 负责向 Clipit 交付一帧完整屏幕画面,区域选择和标注由 Clipit 自己完成。 首次使用或受沙箱策略影响时,系统仍可能显示授权界面 ;这是 Wayland 安全模型的一部分,应用无法绕过。
46+ Wayland 下,portal 负责向 Clipit 交付截图。区域截图仍先获取完整屏幕,再由 Clipit 完成框选和标注。窗口截图优先请求 portal v3 的 ` Active Window ` 目标;如果系统只提供窗口选择或旧版交互接口,会显示系统选择界面。 首次使用或受沙箱策略影响时,系统也可能显示授权界面 ;这是 Wayland 安全模型的一部分,应用无法绕过。
4747
4848### 跨平台设计
4949
5050Clipit 使用 C++、Qt 6 和 QML 开发。主界面、区域选择、标注、PNG 保存与剪贴板等核心逻辑由各平台共用,平台差异集中在“如何安全地取得屏幕画面”这一层:
5151
52- - ** Linux Wayland** :通过标准 XDG Desktop Portal 请求屏幕画面,兼容采用 portal 的 GNOME、KDE 等桌面环境;
53- - ** Linux X11、Windows 和 macOS** :通过 Qt 的跨平台屏幕接口获取主屏幕画面;
54- - ** macOS** :沿用系统录屏权限机制,用户需要在首次使用时授权。
52+ - ** Linux Wayland** :通过标准 XDG Desktop Portal 请求屏幕或窗口画面,兼容采用 portal 的 GNOME、KDE 等桌面环境;
53+ - ** Linux X11** :通过 X11 查询活动窗口,再由 Qt 获取窗口画面;
54+ - ** Windows** :通过 Win32 查询活动窗口,再由 Qt 获取窗口画面;
55+ - ** macOS** :通过 Core Graphics 查询并获取最前方窗口画面,沿用系统录屏权限机制,用户需要在首次使用时授权。
5556
5657这种方式不要求为每个平台重新实现整套编辑器,也避免把 Wayland 支持绑定到某个桌面环境的私有接口。相同的截图一旦交给 Clipit,后续框选、标注、保存和复制行为保持一致。
5758
@@ -62,6 +63,7 @@ Clipit 使用 C++、Qt 6 和 QML 开发。主界面、区域选择、标注、PN
6263- Qt 6.8 或更高版本
6364- Qt Quick
6465- Linux:Qt DBus、` xdg-desktop-portal ` 和当前桌面对应的 portal 后端
66+ - Linux X11 窗口截图:构建时需要 X11 开发库;未找到时仍可构建,但不包含 X11 窗口截图
6567- Wayland 命令行模式:` wl-clipboard ` ,用于在 Clipit 退出后继续保留剪贴板内容
6668
6769GNOME 通常使用 ` xdg-desktop-portal-gnome ` ,KDE Plasma 通常使用 ` xdg-desktop-portal-kde ` 。
@@ -100,19 +102,25 @@ ctest --test-dir build/release --output-on-failure
100102# 区域截图
101103./build/release/appClipit --region
102104
105+ # 窗口截图
106+ ./build/release/appClipit --window
107+
103108# 全屏截图
104109./build/release/appClipit --fullscreen
105110
106111# 延时 3 秒后全屏截图
107112./build/release/appClipit --fullscreen --delay 3
108113```
109114
110- 短参数分别为 ` -r ` 、` -f ` 和 ` -d ` 。` --region ` 与 ` --fullscreen ` 互斥,延时范围为 0–3600 秒。
115+ 短参数分别为 ` -r ` 、` -w ` 、` -f ` 和 ` -d ` 。` --region ` 、` --window ` 与 ` --fullscreen ` 互斥,三种截图模式都可以与 ` --delay ` 组合,延时范围为 0–3600 秒。
116+
117+ ` --window ` 在 X11、Windows 和 macOS 下截取当前活动窗口。Wayland 下优先截取活动窗口;portal 不支持该目标时会打开系统界面,由用户选择窗口。
111118
112119Clipit 暂不自行注册全局快捷键。可以在 GNOME 的“设置 → 键盘 → 查看及自定义快捷键 → 自定义快捷键”中绑定以下命令,路径需要替换为可执行文件的实际绝对路径:
113120
114121``` text
115122/home/user/apps/Clipit/appClipit --region
123+ /home/user/apps/Clipit/appClipit --window
116124/home/user/apps/Clipit/appClipit --fullscreen
117125```
118126
@@ -130,21 +138,21 @@ Clipit 暂不自行注册全局快捷键。可以在 GNOME 的“设置 → 键
130138
131139Clipit 针对不同环境选择不同的抓屏后端,但复用同一套区域选择和标注流程:
132140
133- 1 . ` PortalScreenCaptureBackend ` 在 Wayland 下通过 ` org.freedesktop.portal.Screenshot ` 请求屏幕画面 ;` QtScreenCaptureBackend ` 在其他平台通过 Qt 获取画面 。
141+ 1 . ` PortalScreenCaptureBackend ` 在 Wayland 下通过 ` org.freedesktop.portal.Screenshot ` 请求屏幕或窗口画面 ;` QtScreenCaptureBackend ` 在其他平台查询活动窗口并通过平台接口获取画面 。
1341422 . ` CaptureOverlay.qml ` 在静态画面上完成区域选择与标注。
1351433 . ` ScreenshotService ` 管理截图状态,` AnnotationRenderer ` 合成最终图片,` ScreenshotStorage ` 以原子方式保存 PNG。
136144
137- 程序有三种启动模式 :完整 GUI、仅区域截图和仅全屏截图。全屏命令模式不会加载 QML 界面,适合快捷键或脚本调用。
145+ 程序有四种启动模式 :完整 GUI、仅区域截图、仅窗口截图和仅全屏截图。窗口与全屏命令模式不会加载 QML 界面,适合快捷键或脚本调用。
138146
139147项目将可独立测试的图片逻辑放在 ` src/core/ ` ,将 portal、Qt 抓屏和剪贴板实现放在 ` src/platform/ ` 。详细模块边界和扩展方式见 [ 架构说明] ( docs/architecture.md ) 。提交代码前请阅读 [ 贡献指南] ( CONTRIBUTING.md ) 。
140148
141149## 当前限制
142150
143- - 非 Wayland 平台目前只捕获主屏幕 ,尚不支持多显示器联合框选。
151+ - 非 Wayland 平台的全屏与区域模式目前只捕获主屏幕 ,尚不支持多显示器联合框选。
144152- 尚未接入 Wayland ` GlobalShortcuts ` portal,需要通过桌面设置绑定快捷键。
145153- 文字标注目前只支持单行输入。
146154- 模糊工具的编辑预览是视觉近似,最终 PNG 会执行实际模糊处理。
147- - 尚无窗口自动识别、 OCR、托盘和持久化截图历史。
155+ - 尚无 OCR、托盘和持久化截图历史。
148156- macOS 首次截图需要在系统设置中授予录屏权限。
149157
150158## 参与开发
0 commit comments