`key-bindings-syntax.md` told you to run `wev` and read `sym: XXXX` — a placeholder nobody fills in, for a tool that is not on the machine: `command -v wev` is empty, `pacman -Ss --sync wev` is empty on CachyOS, and the AUR carries it as `wev-git`. The bind token is an XKB keysym, and the complete list is already on every box that links libxkbcommon, so the page now leads with the grep against `/usr/include/xkbcommon/xkbcommon-keysyms.h` (run here: `a A Escape Left Return Tab`), and keeps `wev` as the "press the key and see" option with its real package name and where to get it. `screenshots.md` line 35 read `(FIXME upstream).`, which scans as unfinished work in a page that is finished: the defect is upstream's, tracked in the two issue links six lines below. Reworded to say that. Refs #64
81 lines
3.5 KiB
Markdown
81 lines
3.5 KiB
Markdown
---
|
|
type: reference
|
|
title: Screenshot Matrix
|
|
description: "Screenshot setup on blankpad — flameshot retired (all modes hang via portal on 2+ outputs, niri#4313); niri-native binds: all-monitors script, focused-screen capture, interactive UI. Includes the niri spawn-sh PATH trap."
|
|
tags:
|
|
- niri
|
|
- flameshot
|
|
- screenshots
|
|
- multi-monitor
|
|
- portal
|
|
verified: 2026-10-14
|
|
---
|
|
|
|
# Screenshot Matrix
|
|
|
|
**Flameshot is retired on this box (2026-10-14).** Every flameshot mode
|
|
on Wayland captures through xdg-desktop-portal →
|
|
`xdg-desktop-portal-gnome` → niri's GNOME-Screenshot compatibility API,
|
|
which is hard-limited to one output. All binds are niri-native now.
|
|
|
|
## Live binds
|
|
|
|
| Bind | Action | Output |
|
|
|------|--------|--------|
|
|
| `Print` / `Ctrl+Shift+1` / `Mod+Shift+S` | `screenshot-desk.sh` — one PNG **per monitor** | `~/Pictures/Screenshots/Screenshot from … <connector>.png` |
|
|
| `Alt+Print` / `Ctrl+Shift+2` | `screenshot-screen` — focused monitor | same dir (niri `screenshot-path`) + clipboard |
|
|
| `Ctrl+Print` / `Ctrl+Shift+3` | `screenshot` UI — interactive region/window/screen, Space saves, Esc cancels | same dir + clipboard; single-output selection by design |
|
|
|
|
Noctalia settings lives on `Mod+Shift+O` (moved off Mod+Shift+S).
|
|
|
|
## Why flameshot died (and not just `full`)
|
|
|
|
- Portal chain: flameshot 14 → `xdg-desktop-portal-gnome` → niri D-Bus
|
|
API → `screenshot_all_outputs` → `ensure!(outputs.len() == 1)`
|
|
(an upstream defect, still unfixed — issue links below).
|
|
- `flameshot full` on 2 outputs: each press emits **3 refusals**
|
|
(composited screen + per-output) — `WARN niri::niri: error taking a
|
|
screenshot: Condition failed: outputs.len() == 1 (2 vs 1)` in
|
|
`journalctl --user -u niri`; bubbles arrive after the portal
|
|
round-trip ("bunch of errors after a delay").
|
|
- `flameshot screen` is NOT exempt: live test docked, 2026-10-14 —
|
|
`flameshot full` and `flameshot screen` both hang ~15 s, exit 124
|
|
under timeout, **no file written**.
|
|
- Upstream: [niri#4313](https://github.com/niri-wm/niri/issues/4313)
|
|
(closed duplicate, unfixed in 26.04/8ed0da4),
|
|
[flameshot#4449](https://github.com/flameshot-org/flameshot/issues/4449).
|
|
- Portable desk (1 output): flameshot would work again — that is the
|
|
portal's only supported shape.
|
|
|
|
## The all-monitor path: `scripts/screenshot-desk.sh`
|
|
|
|
- Per active output (`niri msg --json outputs`): `focus-monitor` →
|
|
`screenshot-screen --path` (absolute) → restore prior focus.
|
|
- All niri-native; no grim, no portal. `SCREENSHOT_DIR` overrides the
|
|
output dir.
|
|
|
|
## The spawn-sh PATH trap (why "it works in the shell" lies)
|
|
|
|
niri's environment `PATH` is the **system** path — `~/.local/bin` is
|
|
**absent** (`tr '\0' '\n' < /proc/$(pidof niri | awk '{print $1}')/environ`).
|
|
`spawn-sh "some-user-script"` fails silently. Rules:
|
|
|
|
- Keybinds use **absolute** script paths
|
|
(`/home/blank/.omp/scripts/…`). Applies to `desk.sh` too — its bare
|
|
bind was dead for the same reason.
|
|
- A bare script name in a keybind is a bug on this box.
|
|
|
|
## Census commands
|
|
|
|
```bash
|
|
niri msg outputs # how many outputs live
|
|
journalctl --user -u niri --since today | grep -i screenshot # WARN vs DEBUG saves
|
|
tr '\0' '\n' < /proc/$(pgrep -x niri | head -1)/environ | grep ^PATH # spawn-sh environment
|
|
```
|
|
|
|
## See Also
|
|
|
|
- [displays.md](/tools/niri/displays.md) — desk profiles: 1 output portable vs 2 docked
|
|
- [keybindings.md](/tools/niri/keybindings.md) — generated cheat sheet (source of the binds)
|
|
- [noctalia-shell](/tools/noctalia-shell.md) — shell settings on Mod+Shift+O
|