fix(display): docked idle wake + dump without SSH (#127)
All checks were successful
Check / eval (push) Successful in 3m44s

Recover from DPMS/lock blackout without a second machine: undock/enable
always issue dpms on; hypridle on-resume and after_sleep run
nomarchy-display-wake (zero-output undock rescue + auto-dump).
nomarchy-display-dump writes ~/nomarchy-display-dump-*.txt (SUPER+SHIFT+D
or Ctrl+Alt+F3 TTY). HARDWARE-QUEUE #127 no longer requires SSH.

V1: nix flake check --no-build. V3: docked idle on AMD box still open.
This commit is contained in:
2026-07-15 12:37:00 +01:00
parent 52d1581131
commit e9ab0d8d64
7 changed files with 224 additions and 26 deletions

View File

@@ -55,10 +55,16 @@ or (b) undock → `nomarchy-display-transition undock` re-enabling the
panel. Both failed. `after_sleep_cmd` only does `hyprctl dispatch dpms on`
and never re-enables a disabled internal.
**Progress 2026-07-15 (no-SSH path + recovery hardening):** undock/enable
always end with `dpms on`; hypridle `on-resume` / `after_sleep` run
`nomarchy-display-wake` (dpms + zero-output undock rescue + auto-dump);
`nomarchy-display-dump` + SUPER+SHIFT+D + TTY (`Ctrl+Alt+F3`) so capture
does not need SSH. V3 still needs a real docked idle repro.
**Pass:** docked on AC, idle past lock + DPMS; external KB/mouse restores
the external; if the external is unplugged while black, eDP comes back
without reboot; journal shows display-watch undock `result=ok` when the
cable leaves. Capture steps in HARDWARE-QUEUE.
cable leaves. Capture steps in HARDWARE-QUEUE (TTY dump preferred).
## NEXT

View File

@@ -57,25 +57,27 @@ Everything else below stays open; order is convenience, not a gate.
was needed; a long Grok session died with the brick.
**Important distinction:** on AC, hypridle is *not* supposed to
suspend — only lock (5m) + `dpms off` (10m). Confirm next time with
`journalctl -b | rg -i 'Suspending|PM: suspend'` vs hypridle/hyprlock
lines so we know DPMS-stuck vs real S3.
**Repro / capture (next time, before reboot if possible — SSH/TTY):**
1. Dock, confirm dock mode (eDP disabled in `hyprctl monitors all -j`).
2. Leave idle past 10 minutes (or force: `loginctl lock-session` then
`hyprctl dispatch dpms off`).
3. Try external KB key / mouse move — does external wake?
4. Unplug external — does eDP return within a few seconds?
5. Capture (SSH from another machine if the seat is blind):
```
journalctl --user -t nomarchy-display-watch -t nomarchy-display-transition \
-t hypridle --since '-30 min'
journalctl -b --since '-30 min' | rg -i 'suspend|sleep|dpms|lid|hyprlock'
hyprctl monitors all -j; hyprctl keyword monitor 2>&1 | head
systemd-inhibit --list
```
**Pass:** input wakes the external while docked; undock while black
restores eDP without power cycle. Related: docking recovery round 8
(awake undock) and BACKLOG #127.
dump file or journal for `Suspending|PM: suspend` vs hypridle lines
so we know DPMS-stuck vs real S3.
**No SSH required** (post-#127 tooling): Caps Lock alive ⇒ machine is
up. Prefer **local TTY** over SSH:
1. `Ctrl+Alt+F3` → log in on the text console.
2. `nomarchy-display-wake` — try recovery (dpms on + undock rescue).
3. `nomarchy-display-dump` — writes `~/nomarchy-display-dump-*.txt`
(monitors, journals, DRM status). Open that file after the seat
is usable; no second machine needed.
4. Optional while unlocked: `SUPER+SHIFT+D` runs the same dump.
Auto: undock enable-fail and zero-output wake also dump under `~/`.
**Repro (after `nomarchy-home` + relogin so hypridle/watcher pick up):**
1. Dock, confirm dock mode (eDP disabled).
2. Idle past 10 min **or** force: `loginctl lock-session` then
`hyprctl dispatch dpms off`.
3. External KB/mouse — external should wake (`nomarchy-display-wake`
path). If not: TTY → dump → note.
4. Unplug external while black — eDP should return (undock + `dpms on`).
**Pass:** input wakes external while docked; undock while black restores
eDP without reboot; dump files only appear on real failures.
Related: docking recovery round 8 (awake undock) and BACKLOG #127.
- [ ] **#96 battery-limit row on threshold-less firmware (Acer M5-481T)** —
on the Acer (live or installed session with the commit carrying this
entry): open System (`SUPER+CTRL+I`). **Pass:** a "Battery limit" row

View File

@@ -19,6 +19,15 @@ Template:
---
## 2026-07-15 — #127 no-SSH dump + docked idle wake harden
- **Task:** Tackle docked idle blackout without needing SSH mid-brick.
- **Did:** `nomarchy-display-dump` / `nomarchy-display-wake`; undock always
`dpms on`; hypridle resume/after_sleep → wake rescue; SUPER+SHIFT+D;
HARDWARE-QUEUE #127 rewritten for Ctrl+Alt+F3 TTY path.
- **Verified:** V0/V1 flake check. V3: docked idle on AMD box.
- **Pending:** real repro; keep #127 open until V3 pass.
- **Next suggestion:** Bernardo runs forced DPMS dock test + TTY dump if needed.
## 2026-07-15 — #115 suspend-then-hibernate (1h, battery-only + menu)
- **Task:** Human settled delay=1h, battery only, menu enable/disable.
- **Did:** `nomarchy-suspend` + logind/sleep bridge from