Niri 截图贴图工作流配置
Niri 贴图(截图浮动置顶)配置记录
需求
在 niri 下实现截图 + 贴图(截图后图片浮动置顶显示,用于参考对照)。
环境
- Compositor: niri
- 截图工具: grim + slurp
- 图片查看: Pineapple Pictures (ppic)
方案探索
已排除方案
| 方案 | 问题 |
|---|---|
niri 内置 screenshot action |
自带交互界面(Space/P 快捷键),与其他快捷键冲突,不适合自动化流程 |
mpv --ontop |
resize 时卡顿严重;滚轮会调节音量;显示 OSC 控件,体验差 |
| Flameshot | Wayland 支持不稳定,贴图功能不可靠 |
| wlsnap | 新项目,贴图功能还在路线图中未实现 |
最终方案
grim + slurp 选区截图 → Pineapple Pictures 浮动打开 → 手动右键 Stay on Top
为什么还能手动操作 Stay on Top?
- mpv 性能差、界面杂,体验不好
- Pineapple Pictures 暂不支持命令行设置 Stay on Top,只能手动开启
关键配置
1. 截图脚本
~/.config/niri/scripts/ppic-screenshot.sh
1 | |
更新 (2026-06-30):添加了 slurp 取消时的错误处理(
|| exit 0),以及 grim 成功后才启动 ppic 的条件判断(&&),避免截图失败时弹出空窗口。
注意:二进制名为
ppic,不是pineapple-pictures,后者在spawn-sh中无法找到。
2. 快捷键
~/.config/niri/binds.kdl
1 | |
3. 浮动窗口规则
~/.config/niri/rule.kdl
1 | |
Pineapple Pictures 的 app-id 为
ppic。
4. 其他截图快捷键(参考)
~/.config/niri/binds.kdl
1 | |
依赖安装
1 | |
生效方式
热重载 niri 配置:
1 | |
或重新登录 niri 会话。
使用流程
- 按
Ctrl+1 - 鼠标拖选截图区域
- Pineapple Pictures 自动浮动打开
- 在 Pineapple Pictures 窗口中右键 → Stay on Top 完成贴图
- 关闭贴图:聚焦窗口按
q或Esc
移动贴图窗口
Pineapple Pictures 内部会吞掉鼠标拖拽用于缩放/平移图片,直接拖拽无法移动窗口。需要 按住 Mod 键 + 左键拖动 来移动浮动窗口位置。
缩放贴图窗口
同样需要在 Pineapple Pictures 内先调小图片(Ctrl + 滚轮或菜单),再用 Mod + 右键拖动 调整窗口大小。
故障排查
1. ppic 启动时段错误 (segfault)
症状:Ctrl+1 截图后 ppic 没有出现,终端报 段错误(核心已转储)。
原因:Pineapple Pictures 1.4.1 在 Wayland 下调用 qApp->screenAt(QCursor::pos()) 时可能返回空指针,导致空指针解引用崩溃。两个位置受影响:
MainWindow::centerWindow()— 构造时居中窗口MainWindow::adjustWindowSizeBySceneRect()— 打开图片时调整窗口大小
解决:已通过 patch 修复,在 screenAt() 返回 null 时回退到 primaryScreen()。patch 位置:
~/.cache/yay/pineapple-pictures/fix-centerWindow-nullptr.patch
2. Wayland 下大量 “window opacity” 警告
症状:启动 ppic 后终端输出大量 This plugin does not support setting window opacity。
原因:ppic 使用了 Qt::WA_TranslucentBackground 和 windowOpacity 动画,Wayland 不支持。
解决:已通过同一 patch 修复,Wayland 下自动跳过透明背景和窗口淡出动画。
3. slurp 取消时弹出空 ppic 窗口
原因:原脚本没有处理用户按 Esc 取消 slurp 选区的情况。
解决:脚本已更新,slurp 取消后 exit 0 不再继续执行。
Niri 截图目录
截图文件保存路径(niri 内置截图):
~/Pictures/Screenshots/Niri-screenshots/
配置在 ~/.config/niri/config.kdl 中:
1 | |
日期
2026-06-30