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-961GitHub issuePublicDecided· Out of scope

omarchy-launch-screensaver: pgrep -f matches unrelated processes, so the screensaver silently no-ops with exit 0

Reported by granite4lyfe · filed Sep 4, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 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

omarchy-launch-screensaver: pgrep -f matches unrelated processes, so the screensaver silently no-ops with exit 0revision 1 · captured 2026-09-28 21:24 UTC via poll

What happened

omarchy-launch-screensaver decides whether a screensaver is already running with:

# Exit early if screensaver is already running
pgrep -f '[o]rg.omarchy.screensaver' && exit 0

pgrep -f matches against the full command line of every process on the system, not
just screensaver terminals. So any unrelated process whose command line happens to contain
the string org.omarchy.screensaver satisfies this check, and the launcher exits early.

The failure is silent and reports success: **exit code 0, no output, no notification, and
no screensaver.** Every other early-exit path in the script (ttfx missing, the
screensaver-off toggle, an unsupported terminal) exits 1, and the unsupported-terminal
case at least sends a notification. This one is indistinguishable from a normal successful
launch.

It affects the idle path as well as manual invocation. omarchy-shell runs the launcher and
logs only the exit code, so the log shows what looks like a healthy cycle:

DEBUG qml: omarchy idle ... process-start: screensaver [[ $(omarchy-shell lock isLocked 2>/dev/null) == "true" ]] || omarchy-launch-screensaver
DEBUG qml: omarchy idle ... process-exit: screensaver exitCode=0 status=0

What I expected

The screensaver to launch, or failing that, to fail visibly rather than report success.

Steps to reproduce

# 1. Confirm no screensaver is running
pgrep -f '[o]rg.omarchy.screensaver'; echo "exit=$?"     # -> exit=1

# 2. Start any unrelated process whose command line contains the class string.
#    (Nothing here touches the screensaver; $0 is simply set to that string.)
sh -c 'sleep 120' org.omarchy.screensaver &

# 3. Ask for the screensaver
omarchy-launch-screensaver force; echo "exit=$?"
#    -> prints the PID of the sleep, exits 0, and no screensaver appears

This is not contrived. I hit it while diagnosing an unrelated screensaver question: a
command containing select(.class=="org.omarchy.screensaver") was enough to suppress the
screensaver on the next invocation, with no indication why.

Suggested fix

Test the actual condition (is a screensaver window mapped) rather than a string in an
arbitrary command line. The script already calls hyprctl ... -j | jq a few lines further
down, so this adds no dependency:

# current
pgrep -f '[o]rg.omarchy.screensaver' && exit 0

# proposed
hyprctl clients -j | jq -e 'any(.[]; .class == "org.omarchy.screensaver")' >/dev/null && exit 0

Happy to open a PR for this if the approach looks right.

System details

  • Omarchy 4.0.2-1
  • Hyprland 0.56.2
  • hypridle 0.1.8-1, foot 1.27.0-2, ttfx 0.3.2-1, procps-ng 4.0.7-1
  • AMD Ryzen 5 7600X, Radeon RX 9070 XT (Navi 48)
  • Single monitor, terminal is foot
View raw text
### What happened

`omarchy-launch-screensaver` decides whether a screensaver is already running with:

```bash
# Exit early if screensaver is already running
pgrep -f '[o]rg.omarchy.screensaver' && exit 0
```

`pgrep -f` matches against the **full command line of every process on the system**, not
just screensaver terminals. So any unrelated process whose command line happens to contain
the string `org.omarchy.screensaver` satisfies this check, and the launcher exits early.

The failure is silent and reports success: **exit code 0, no output, no notification, and
no screensaver.** Every other early-exit path in the script (`ttfx` missing, the
`screensaver-off` toggle, an unsupported terminal) exits 1, and the unsupported-terminal
case at least sends a notification. This one is indistinguishable from a normal successful
launch.

It affects the idle path as well as manual invocation. `omarchy-shell` runs the launcher and
logs only the exit code, so the log shows what looks like a healthy cycle:

```
DEBUG qml: omarchy idle ... process-start: screensaver [[ $(omarchy-shell lock isLocked 2>/dev/null) == "true" ]] || omarchy-launch-screensaver
DEBUG qml: omarchy idle ... process-exit: screensaver exitCode=0 status=0
```

### What I expected

The screensaver to launch, or failing that, to fail visibly rather than report success.

### Steps to reproduce

```bash
# 1. Confirm no screensaver is running
pgrep -f '[o]rg.omarchy.screensaver'; echo "exit=$?"     # -> exit=1

# 2. Start any unrelated process whose command line contains the class string.
#    (Nothing here touches the screensaver; $0 is simply set to that string.)
sh -c 'sleep 120' org.omarchy.screensaver &

# 3. Ask for the screensaver
omarchy-launch-screensaver force; echo "exit=$?"
#    -> prints the PID of the sleep, exits 0, and no screensaver appears
```

This is not contrived. I hit it while diagnosing an unrelated screensaver question: a
command containing `select(.class=="org.omarchy.screensaver")` was enough to suppress the
screensaver on the next invocation, with no indication why.

### Suggested fix

Test the actual condition (is a screensaver window mapped) rather than a string in an
arbitrary command line. The script already calls `hyprctl ... -j | jq` a few lines further
down, so this adds no dependency:

```bash
# current
pgrep -f '[o]rg.omarchy.screensaver' && exit 0

# proposed
hyprctl clients -j | jq -e 'any(.[]; .class == "org.omarchy.screensaver")' >/dev/null && exit 0
```

Happy to open a PR for this if the approach looks right.

### System details

- Omarchy 4.0.2-1
- Hyprland 0.56.2
- hypridle 0.1.8-1, foot 1.27.0-2, ttfx 0.3.2-1, procps-ng 4.0.7-1
- AMD Ryzen 5 7600X, Radeon RX 9070 XT (Navi 48)
- Single monitor, terminal is foot

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 10:52 UTC