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
2
3
#!/bin/sh
geometry=$(slurp) || exit 0
grim -g "$geometry" /tmp/niri-pin-screenshot.png && ppic /tmp/niri-pin-screenshot.png

更新 (2026-06-30):添加了 slurp 取消时的错误处理(|| exit 0),以及 grim 成功后才启动 ppic 的条件判断(&&),避免截图失败时弹出空窗口。

注意:二进制名为 ppic,不是 pineapple-pictures,后者在 spawn-sh 中无法找到。

2. 快捷键

~/.config/niri/binds.kdl

1
Ctrl+1  hotkey-overlay-title="截图后用 Pineapple Pictures 打开并浮动 for pinning" { spawn-sh "~/.config/niri/scripts/ppic-screenshot.sh";}

3. 浮动窗口规则

~/.config/niri/rule.kdl

1
2
3
4
5
6
window-rule {
// ... 其他浮动规则 ...
match app-id="ppic"
// ...
open-floating true
}

Pineapple Pictures 的 app-id 为 ppic

4. 其他截图快捷键(参考)

~/.config/niri/binds.kdl

1
2
3
4
Print        {spawn-sh "niri msg action screenshot --show-pointer false && pkill -f -USR1 screenshot-sound.sh";}
Ctrl+Print {spawn-sh "niri msg action screenshot-window --show-pointer false && pkill -f -USR1 screenshot-sound.sh";}
Shift+Print {spawn-sh "niri msg action screenshot-screen --show-pointer false && pkill -f -USR1 screenshot-sound.sh";}
Mod+Shift+S {spawn-sh "wl-paste | satty -f -";}

依赖安装

1
2
sudo pacman -S grim slurp
yay -S pineapple-pictures

生效方式

热重载 niri 配置:

1
niri msg action load-config-file

或重新登录 niri 会话。

使用流程

  1. Ctrl+1
  2. 鼠标拖选截图区域
  3. Pineapple Pictures 自动浮动打开
  4. 在 Pineapple Pictures 窗口中右键 → Stay on Top 完成贴图
  5. 关闭贴图:聚焦窗口按 qEsc

移动贴图窗口

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_TranslucentBackgroundwindowOpacity 动画,Wayland 不支持。

解决:已通过同一 patch 修复,Wayland 下自动跳过透明背景和窗口淡出动画。

3. slurp 取消时弹出空 ppic 窗口

原因:原脚本没有处理用户按 Esc 取消 slurp 选区的情况。

解决:脚本已更新,slurp 取消后 exit 0 不再继续执行。

Niri 截图目录

截图文件保存路径(niri 内置截图):

~/Pictures/Screenshots/Niri-screenshots/

配置在 ~/.config/niri/config.kdl 中:

1
screenshot-path "~/Pictures/Screenshots/Niri-screenshots/%Y-%m-%d %H-%M-%S.png"

日期

2026-06-30


Niri 截图贴图工作流配置
https://tingfeng347.github.io/2026/06/29/Niri 截图贴图工作流配置/
作者
Tingfeng
发布于
2026年6月29日
许可协议