Fedora 43 + Niri 上玩转 Satty:截图、编辑,一气呵成!
Satty 真是个截图神器!它不仅能帮你交互式选择截图区域,还能直接编辑,简直太方便了。不过呢,你可能会发现,在 Fedora 43 的官方软件仓库里,它并没有“安家”。别担心!这篇教程就带你一步步手动安装 Satty 的二进制文件,并搞定在 Niri (Wayland) 环境下运行它所需的各种依赖。看完保证你也能轻松上手!
准备工作
- Fedora 43 系统(这肯定少不了)
- Niri (Wayland) 合成器(或者其他 Wayland 桌面环境也行)
- 一点点终端操作基础(别怕,很简单!)
Satty 安装教程(跟着做准没错!)
第一步:下载 Satty 二进制文件
既然 Satty 官方仓库里没有,那我们就得自己动手,从它的GitHub 发布页面直接下载预编译好的二进制文件啦。
找到最新的 Release 版本,然后下载那个名字叫 satty-x86_64-unknown-linux-gnu.tar.gz 的文件就行了。
第二步:解压并“安放”好它
下载完之后,打开你的终端,cd 到下载目录(或者你存到哪里就去哪里),然后把压缩包解压出来。接着,我们把 satty 这个可执行文件移动到系统 PATH 环境变量包含的目录里,比如 /usr/local/bin/ 就很不错,这样你以后在任何地方都能直接敲命令运行它了。
# 导航到你的下载目录
cd ~/Downloads
# 解压 tar.gz 文件
tar -xzf satty-*.tar.gz
# 将可执行文件移动到 /usr/local/bin/
sudo mv satty /usr/local/bin/
第三步:检查并安装必要依赖
想要让 Satty 在 Niri 这种 Wayland 环境下顺畅运行,它通常需要“搭档”两个好帮手来完成屏幕选择和截图:slurp 和 grim。好消息是,这两个工具通常在 Fedora 的官方仓库里就能找到!
slurp: 负责让你用鼠标选定屏幕区域,非常直观。grim: 专门负责把选中的屏幕像素“抓”下来,也就是真正实现截图的工具。
使用 dnf 命令安装这些依赖:
sudo dnf install slurp grim
Satty 怎么用?看这里!
satty、slurp 和 grim 都安装好之后,你就可以开心地用 Satty 来满足你的截图需求了!
一个最典型的用法,就是像下面这样:
satty --output-file ~/Pictures/screenshot-$(date +%Y%m%d%H%M%S).png
这条命令会帮你做这些事:
- 启动
slurp,让你能自由选择屏幕上的任意区域。 - 接着用
grim把你选中的区域拍下来。 - 然后把这张图直接用 Satty 打开,方便你马上进行编辑。
- 最后,它会把编辑好的图片保存到你的
Pictures目录下,文件名嘛,会带上当前的日期时间,方便你查找。
怎么样?有了 Satty,你的 Fedora 43 和 Niri 桌面环境,是不是瞬间多了一个功能强大的截图加编辑利器呢!
截图脚本
这边作者找到了一个脚本用于在niri中使用快捷键进行截图编辑:
~/.config/niri/scripts
○ cat screenshot.sh
#!/usr/bin/env bash
# 设定触发新逻辑的目标版本号
# 注意:官方 Niri 目前版本是 0.1.x。请确保你的 niri -V 输出格式符合你的预期。
TARGET_VERSION="25.08"
# 获取当前 niri 版本 (例如: "niri 0.1.10" -> "0.1.10")
CURRENT_VERSION=$(niri -V | awk '{print $2}')
# 版本比较函数 (使用 sort -V 处理版本号排序)
# 如果 $1 (当前) >= $2 (目标),返回 true (0)
version_ge() {
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" != "$1" ] || [ "$1" = "$2" ]
}
# === 分支逻辑 ===
if version_ge "$CURRENT_VERSION" "$TARGET_VERSION"; then
# [逻辑 A] 新版本 Niri: 基于事件流 (Event Stream)
# 优点: 直接获取文件路径,精准,无需轮询,无剪贴板冲突
# 1. 在后台启动截图交互,不阻塞脚本继续执行
niri msg action screenshot &
# 2. 监听事件流,阻塞等待直到捕获到 "Screenshot captured" 这一行
# grep -m 1: 匹配到一行后立即停止监听,脚本继续向下
log_output=$(niri msg event-stream | grep -m 1 --line-buffered "Screenshot captured")
# 3. 提取路径字符串 (删除 "saved to " 及其之前的所有内容)
# 输出示例: ... saved to /home/user/Pic/1.png -> /home/user/Pic/1.png
file_path="${log_output##*saved to }"
# 4. 传递给 satty 编辑
# 检查路径是否非空(防止用户按 Esc 取消导致 grep 没抓到东西)
if [ -n "$file_path" ]; then
satty --filename "$file_path"
fi
else
# [逻辑 B] 旧版本/回退: 基于剪贴板哈希 (Clipboard Polling)
# 2. 记录基准哈希和开始时间
CLIP_BASE=$(wl-paste | sha1sum)
START_TIME=$SECONDS
TIMEOUT_SEC=3 # 设置超时时间 (秒)
# 3. 启动截图
niri msg action screenshot
# 4. 循环检测: 只要剪贴板哈希没变,就一直等待
while [ "$(wl-paste | sha1sum)" = "$CLIP_BASE" ]; do
# 超时判断: 如果耗时超过阈值,静默退出脚本 (防止死循环)
if (( SECONDS - START_TIME > TIMEOUT_SEC )); then
exit 0
fi
sleep 0.5
done
# 5. 剪贴板变化后,管道传递给 satty
wl-paste | satty -f -
fi
fi
在niri的配置文件上配置好它:
Mod+Shift+S { spawn "~/.config/niri/scripts/screenshot.sh"; }
这样使用win+shift+s快捷键就可以进行截图编辑了。
效果预览:


7832

被折叠的 条评论
为什么被折叠?



