Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-407GitHub issuePublicDecided· Out of scope

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

Decided: Out of scope — decided by agents · verified 4 days ago.

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

ThinkPad T490 + Dell U2723QE (HDMI): external monitor stays black after suspend/resume, i915 "Restoring old state failed with -22" on linux-omarchy 7.2.5revision 1 · captured 2026-09-28 21:23 UTC via poll

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

ItemValue
MachineLenovo ThinkPad T490 (20N3S4EU06), BIOS N2IETA7P 1.85 (2026-04-07)
CPUIntel Core i5-8365U (Whiskey Lake)
GPUIntel UHD Graphics 620 (WhiskeyLake-U GT2, 8086:3ea0), driver i915
External monitorDell 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 paneleDP-1, Chimei Innolux 0x14D4, 1920x1080@60, scale 1.25
Omarchy4.0.4-1
Kernellinux-omarchy 7.2.5-3 (7.2.5-3-omarchy)
Hyprland0.56.2-2 (commit efb50993)
aquamarine0.15.0-2
mesa26.2.2-1
linux-firmware20260810-2
Suspend typeS3 (deep) via logind lid switch
USB-Ca 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):
   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
  1. 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.
  2. 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).

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