Files
command-center/omp-docs/tools/niri/screenshots.md
T
Frank 62a70caebb docs(okf): 53 Obsidian wikilinks become OKF links
`[[page|Label]]` is Obsidian syntax, not OKF. `kb-lint` resolves it Obsidian-style — by
filename, anywhere in the bundle — so it has never tripped the link gate, while every other
consumer of the bundle (an OKF renderer, a Gitea wiki export, `grep` for reachability) sees
bracketed text where a link should be. That is how two generated pages ended up with no
inbound link at all and nobody noticed: the my-first link census of the bundle reported them
as orphans because their only inbound edges were wikilinks.

Mechanical conversion, 52 links across 17 pages, each resolved against the same page set
`kb-lint` uses: an explicit `|Label` is kept verbatim, an unlabelled link takes the target's
frontmatter `title`. Targets are emitted bundle-absolute (`/tools/niri/tips.md`), the form
the spec recommends and the form 99 existing links in this bundle already use.

Two links were `[[index]]`, which resolves by filename to 21 pages — the ambiguity that
filename-resolution invites. Both meant their own directory's index, so both are now written
out in full: `/tools/gitea/index.md`, `/tools/niri/index.md`.

The linter still tolerates wikilinks; whether it should reject them outright is an open
question on #64, because that would replace the two tests pinning today's tolerance.

Refs #64
2026-10-21 02:11:56 -07:00

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)`
(FIXME upstream).
- `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