Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
ThinkPad T490 + Dell U2723QE (HDMI): external monitor stays black after suspend/resume, i915 "Restoring old state failed with -22" on linux-omarchy 7.2.5
Reported by yonydev · filed Sep 17, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
Summary
After a suspend/resume cycle with the lid closed and an external Dell U2723QE attached to the laptop's built-in HDMI port, the i915 driver on linux-omarchy 7.2.5-3 fails to restore the display state (Restoring old state failed with -22). From that point on, every atomic modeset on HDMI-A-2 is rejected by the kernel with EINVAL, including the 640x480 and 720x400 fallbacks that aquamarine tries.
Hyprland still reports the monitor as connected and enabled, but with mode 0x0@60 at position 0x0 (overlapping eDP-1). Workspaces 1-5 are pinned to that monitor via workspace rules, so they stay assigned to it and every window on them becomes invisible: the windows exist in hyprctl clients, but there is no physical output rendering them, and they are not folded back onto the laptop panel either.
A hyprctl reload (which forces a fresh modeset) fully recovers the output at 3840x2160@30 without a reboot, so the hardware and the cable are fine.
System details
| Item | Value |
|---|---|
| Machine | Lenovo ThinkPad T490 (20N3S4EU06), BIOS N2IETA7P 1.85 (2026-04-07) |
| CPU | Intel Core i5-8365U (Whiskey Lake) |
| GPU | Intel UHD Graphics 620 (WhiskeyLake-U GT2, 8086:3ea0), driver i915 |
| External monitor | Dell U2723QE (27", 3840x2160) on the laptop's native HDMI port, seen as HDMI-A-2. HDMI 1.4 link, so 4K is limited to 30 Hz |
| Internal panel | eDP-1, Chimei Innolux 0x14D4, 1920x1080@60, scale 1.25 |
| Omarchy | 4.0.4-1 |
| Kernel | linux-omarchy 7.2.5-3 (7.2.5-3-omarchy) |
| Hyprland | 0.56.2-2 (commit efb50993) |
| aquamarine | 0.15.0-2 |
| mesa | 26.2.2-1 |
| linux-firmware | 20260810-2 |
| Suspend type | S3 (deep) via logind lid switch |
| USB-C | a generic USB hub (0bda:5483, Realtek) with keyboard, webcam and r8152 Ethernet is attached to the USB-C port. No display goes through it |
These packages were updated on 2026-09-15 (kernel 7.1.9 → 7.2.3/7.2.5, aquamarine 0.14.0 → 0.15.0, mesa 26.2.1 → 26.2.2). The same docked setup worked across suspend/resume before that update.
Steps to reproduce
- Dock the T490: Dell U2723QE on the built-in HDMI port, lid closed, external keyboard on USB-C.
monitors.lua(relevant part):
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = 1.25 })
hl.monitor({ output = "desc:Dell Inc. DELL U2723QE ...", mode = "preferred", position = "0x0", scale = 2 })
for ws = 1, 5 do hl.workspace_rule({ workspace = tostring(ws), monitor = "desc:Dell Inc. DELL U2723QE ...", default = (ws == 1) }) end
for ws = 6, 10 do hl.workspace_rule({ workspace = tostring(ws), monitor = "eDP-1", default = (ws == 6) }) end- Open the lid briefly and close it again, so logind triggers two suspends a few seconds apart (this is what happened here, see the timeline). A single suspend/resume with the lid closed may also be enough; I have not isolated that yet.
- Wake the machine.
Expected: the Dell comes back at 3840x2160@30 and shows workspaces 1-5.
Actual: the Dell stays black. hyprctl monitors shows it as enabled with mode 0x0. Windows on workspaces 1-5 cannot be seen on any screen.
Timeline (journal, current boot)
09:34:26 systemd-logind: Lid closed.
09:34:26 systemd-logind: Suspending...
09:34:38 kernel: PM: suspend entry (deep)
09:35:10 systemd-logind: Lid opened.
09:35:10 kernel: ACPI: PM: Waking up from system sleep state S3
09:35:10 kernel: i915 0000:00:02.0: [drm] *ERROR* [CONNECTOR:135:DP-2][ENCODER:134:DDI C/PHY C][DPRX] Failed to enable link training
09:35:15 systemd-logind: Lid closed.
09:35:35 systemd-logind: Suspending...
09:35:35 kernel: PM: suspend entry (deep)
09:35:42 kernel: ACPI: PM: Waking up from system sleep state S3
09:35:42 kernel: i915 0000:00:02.0: [drm] *ERROR* Restoring old state failed with -22
09:35:42 kernel: PM: suspend exitNote that DP-2 has nothing connected (/sys/class/drm/card1-DP-2/status = disconnected), yet i915 attempted link training on it during the first resume. The second resume is the one that leaves HDMI-A-2 unusable.
Hyprland / aquamarine log after the resume
aquamarine walks down the whole mode list and the kernel rejects every mode, with and without max_bpc:
DEBUG from aquamarine ]: Swapchain: Reconfigured a swapchain to [Vector2D: x: 3840, y: 2160] XR24 of length 3
DEBUG from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET ATOMIC_TEST_ONLY
WARN from aquamarine ]: drm: atomic commit failed with max_bpc set, retrying without max_bpc
DEBUG from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET ATOMIC_TEST_ONLY
... (same for every mode in the list) ...
DEBUG from aquamarine ]: Swapchain: Reconfigured a swapchain to [Vector2D: x: 640, y: 480] XR24 of length 3
DEBUG from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET ATOMIC_TEST_ONLY
DEBUG from aquamarine ]: Swapchain: Reconfigured a swapchain to [Vector2D: x: 720, y: 400] XR24 of length 3
DEBUG from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET ATOMIC_TEST_ONLY
DEBUG from aquamarine ]: drm: Modesetting HDMI-A-2 with [email protected]
ERR from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET PAGE_FLIP_EVENTThis repeats in a loop (Disabling output HDMI-A-2 → Modesetting HDMI-A-2 with [email protected] → failed to commit) until the reload.
State while broken
$ hyprctl monitors
Monitor eDP-1 (ID 0):
[email protected] at 0x0
active workspace: 6 (6)
scale: 1.25
dpmsStatus: 1
disabled: false
Monitor HDMI-A-2 (ID 1):
[email protected] at 0x0 <-- no mode, same position as eDP-1
description: Dell Inc. DELL U2723QE
active workspace: 1 (1)
scale: 1
dpmsStatus: 1
disabled: false
availableModes: [email protected] ... [email protected]
$ hyprctl clients -j | jq -r '.[] | "\(.workspace.id)\t\(.monitor)\t\(.class)"'
1 1 kitty <-- on HDMI-A-2, invisible
1 1 kitty <-- on HDMI-A-2, invisible
6 0 chromium
6 0 kitty
$ cat /sys/class/drm/card1-HDMI-A-2/status /sys/class/drm/card1-HDMI-A-2/enabled
connected
enabledRecovery
$ hyprctl reload
$ hyprctl monitors -j | jq -r '.[] | "\(.name)\t\(.width)x\(.height)@\(.refreshRate)\t\(.x),\(.y)\tscale=\(.scale)"'
HDMI-A-2 [email protected] 0,0 scale=2
eDP-1 [email protected] 1920,0 scale=1.25The reload produced one more transient kernel error (i915: *ERROR* Atomic update failure on pipe B) but the output has been stable since. Unplugging and replugging the HDMI cable would presumably have the same effect.
Why I think this belongs here
- The kernel is Omarchy's own
linux-omarchypackage, and the regression appeared right after the 2026-09-15 update to the 7.2 series. TheRestoring old state failed with -22on resume points at i915 in that kernel. - Independently of the kernel bug, Hyprland/aquamarine leave the output in a half-alive state (
enabled,0x0, workspaces still bound to it) instead of either retrying the modeset after resume or treating the output as gone so the pinned workspaces fold back ontoeDP-1. A user ends up with windows they cannot reach on any screen and no hint of why. If a re-modeset after resume (whathyprctl reloaddoes) could be triggered automatically by Omarchy's sleep hooks, that would make this failure self-healing.
Happy to test kernel parameters, an LTS kernel, or a patched aquamarine, and to attach the full omarchy-debug output on request (it is 1100+ lines and includes network details, so I left it out of the body).
View raw text
## Summary
After a suspend/resume cycle with the lid closed and an external Dell U2723QE attached to the laptop's built-in HDMI port, the i915 driver on `linux-omarchy 7.2.5-3` fails to restore the display state (`Restoring old state failed with -22`). From that point on, **every** atomic modeset on `HDMI-A-2` is rejected by the kernel with `EINVAL`, including the 640x480 and 720x400 fallbacks that aquamarine tries.
Hyprland still reports the monitor as connected and enabled, but with mode `0x0@60` at position `0x0` (overlapping `eDP-1`). Workspaces 1-5 are pinned to that monitor via workspace rules, so they stay assigned to it and every window on them becomes **invisible**: the windows exist in `hyprctl clients`, but there is no physical output rendering them, and they are not folded back onto the laptop panel either.
A `hyprctl reload` (which forces a fresh modeset) fully recovers the output at 3840x2160@30 without a reboot, so the hardware and the cable are fine.
## System details
| Item | Value |
|---|---|
| Machine | Lenovo ThinkPad T490 (20N3S4EU06), BIOS N2IETA7P 1.85 (2026-04-07) |
| CPU | Intel Core i5-8365U (Whiskey Lake) |
| GPU | Intel UHD Graphics 620 (WhiskeyLake-U GT2, 8086:3ea0), driver `i915` |
| External monitor | Dell U2723QE (27", 3840x2160) on the laptop's native HDMI port, seen as `HDMI-A-2`. HDMI 1.4 link, so 4K is limited to 30 Hz |
| Internal panel | eDP-1, Chimei Innolux 0x14D4, 1920x1080@60, scale 1.25 |
| Omarchy | 4.0.4-1 |
| Kernel | `linux-omarchy 7.2.5-3` (`7.2.5-3-omarchy`) |
| Hyprland | 0.56.2-2 (commit efb50993) |
| aquamarine | 0.15.0-2 |
| mesa | 26.2.2-1 |
| linux-firmware | 20260810-2 |
| Suspend type | S3 (`deep`) via logind lid switch |
| USB-C | a generic USB hub (0bda:5483, Realtek) with keyboard, webcam and r8152 Ethernet is attached to the USB-C port. No display goes through it |
These packages were updated on 2026-09-15 (kernel 7.1.9 → 7.2.3/7.2.5, aquamarine 0.14.0 → 0.15.0, mesa 26.2.1 → 26.2.2). The same docked setup worked across suspend/resume before that update.
## Steps to reproduce
1. Dock the T490: Dell U2723QE on the built-in HDMI port, lid closed, external keyboard on USB-C.
2. `monitors.lua` (relevant part):
```lua
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = 1.25 })
hl.monitor({ output = "desc:Dell Inc. DELL U2723QE ...", mode = "preferred", position = "0x0", scale = 2 })
for ws = 1, 5 do hl.workspace_rule({ workspace = tostring(ws), monitor = "desc:Dell Inc. DELL U2723QE ...", default = (ws == 1) }) end
for ws = 6, 10 do hl.workspace_rule({ workspace = tostring(ws), monitor = "eDP-1", default = (ws == 6) }) end
```
3. Open the lid briefly and close it again, so logind triggers two suspends a few seconds apart (this is what happened here, see the timeline). A single suspend/resume with the lid closed may also be enough; I have not isolated that yet.
4. Wake the machine.
**Expected:** the Dell comes back at 3840x2160@30 and shows workspaces 1-5.
**Actual:** the Dell stays black. `hyprctl monitors` shows it as enabled with mode `0x0`. Windows on workspaces 1-5 cannot be seen on any screen.
## Timeline (journal, current boot)
```
09:34:26 systemd-logind: Lid closed.
09:34:26 systemd-logind: Suspending...
09:34:38 kernel: PM: suspend entry (deep)
09:35:10 systemd-logind: Lid opened.
09:35:10 kernel: ACPI: PM: Waking up from system sleep state S3
09:35:10 kernel: i915 0000:00:02.0: [drm] *ERROR* [CONNECTOR:135:DP-2][ENCODER:134:DDI C/PHY C][DPRX] Failed to enable link training
09:35:15 systemd-logind: Lid closed.
09:35:35 systemd-logind: Suspending...
09:35:35 kernel: PM: suspend entry (deep)
09:35:42 kernel: ACPI: PM: Waking up from system sleep state S3
09:35:42 kernel: i915 0000:00:02.0: [drm] *ERROR* Restoring old state failed with -22
09:35:42 kernel: PM: suspend exit
```
Note that `DP-2` has nothing connected (`/sys/class/drm/card1-DP-2/status` = `disconnected`), yet i915 attempted link training on it during the first resume. The second resume is the one that leaves `HDMI-A-2` unusable.
## Hyprland / aquamarine log after the resume
aquamarine walks down the whole mode list and the kernel rejects every mode, with and without `max_bpc`:
```
DEBUG from aquamarine ]: Swapchain: Reconfigured a swapchain to [Vector2D: x: 3840, y: 2160] XR24 of length 3
DEBUG from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET ATOMIC_TEST_ONLY
WARN from aquamarine ]: drm: atomic commit failed with max_bpc set, retrying without max_bpc
DEBUG from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET ATOMIC_TEST_ONLY
... (same for every mode in the list) ...
DEBUG from aquamarine ]: Swapchain: Reconfigured a swapchain to [Vector2D: x: 640, y: 480] XR24 of length 3
DEBUG from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET ATOMIC_TEST_ONLY
DEBUG from aquamarine ]: Swapchain: Reconfigured a swapchain to [Vector2D: x: 720, y: 400] XR24 of length 3
DEBUG from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET ATOMIC_TEST_ONLY
DEBUG from aquamarine ]: drm: Modesetting HDMI-A-2 with [email protected]
ERR from aquamarine ]: atomic drm request: failed to commit: Invalid argument, flags: ATOMIC_ALLOW_MODESET PAGE_FLIP_EVENT
```
This repeats in a loop (`Disabling output HDMI-A-2` → `Modesetting HDMI-A-2 with [email protected]` → `failed to commit`) until the reload.
## State while broken
```
$ hyprctl monitors
Monitor eDP-1 (ID 0):
[email protected] at 0x0
active workspace: 6 (6)
scale: 1.25
dpmsStatus: 1
disabled: false
Monitor HDMI-A-2 (ID 1):
[email protected] at 0x0 <-- no mode, same position as eDP-1
description: Dell Inc. DELL U2723QE
active workspace: 1 (1)
scale: 1
dpmsStatus: 1
disabled: false
availableModes: [email protected] ... [email protected]
$ hyprctl clients -j | jq -r '.[] | "\(.workspace.id)\t\(.monitor)\t\(.class)"'
1 1 kitty <-- on HDMI-A-2, invisible
1 1 kitty <-- on HDMI-A-2, invisible
6 0 chromium
6 0 kitty
$ cat /sys/class/drm/card1-HDMI-A-2/status /sys/class/drm/card1-HDMI-A-2/enabled
connected
enabled
```
## Recovery
```
$ hyprctl reload
$ hyprctl monitors -j | jq -r '.[] | "\(.name)\t\(.width)x\(.height)@\(.refreshRate)\t\(.x),\(.y)\tscale=\(.scale)"'
HDMI-A-2 [email protected] 0,0 scale=2
eDP-1 [email protected] 1920,0 scale=1.25
```
The reload produced one more transient kernel error (`i915: *ERROR* Atomic update failure on pipe B`) but the output has been stable since. Unplugging and replugging the HDMI cable would presumably have the same effect.
## Why I think this belongs here
- The kernel is Omarchy's own `linux-omarchy` package, and the regression appeared right after the 2026-09-15 update to the 7.2 series. The `Restoring old state failed with -22` on resume points at i915 in that kernel.
- Independently of the kernel bug, Hyprland/aquamarine leave the output in a half-alive state (`enabled`, `0x0`, workspaces still bound to it) instead of either retrying the modeset after resume or treating the output as gone so the pinned workspaces fold back onto `eDP-1`. A user ends up with windows they cannot reach on any screen and no hint of why. If a re-modeset after resume (what `hyprctl reload` does) could be triggered automatically by Omarchy's sleep hooks, that would make this failure self-healing.
Happy to test kernel parameters, an LTS kernel, or a patched aquamarine, and to attach the full `omarchy-debug` output on request (it is 1100+ lines and includes network details, so I left it out of the body).
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 14:57 UTC