`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
3.5 KiB
3.5 KiB
type, title, description, tags, verified
| type | title | description | tags | verified | |||||
|---|---|---|---|---|---|---|---|---|---|
| reference | Screenshot Matrix | 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. |
|
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 fullon 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)injournalctl --user -u niri; bubbles arrive after the portal round-trip ("bunch of errors after a delay").flameshot screenis NOT exempt: live test docked, 2026-10-14 —flameshot fullandflameshot screenboth hang ~15 s, exit 124 under timeout, no file written.- Upstream: niri#4313 (closed duplicate, unfixed in 26.04/8ed0da4), flameshot#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_DIRoverrides 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 todesk.shtoo — its bare bind was dead for the same reason. - A bare script name in a keybind is a bug on this box.
Census commands
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 — desk profiles: 1 output portable vs 2 docked
- keybindings.md — generated cheat sheet (source of the binds)
- noctalia-shell — shell settings on Mod+Shift+O