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-4616GitHub issuePublicReceived

Screensaver/idle triggers during Firefox video playback — portal Inhibit falls back to unowned org.freedesktop.ScreenSaver

Reported by sumitrampal · filed Aug 17, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #6475 (R-1888). GitHub close reason: completed.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

Screensaver/idle triggers during Firefox video playback — portal Inhibit falls back to unowned org.freedesktop.ScreenSaverrevision 1 · captured 2026-10-04 12:03 UTC via poll

What happened

Screensaver / idle lock fires on schedule (idle.screensaver in
~/.config/omarchy/shell.json) even while a video is actively playing in
Firefox (e.g. YouTube). The video keeps playing behind the screensaver —
Firefox never successfully inhibits idle.

What I expected

Playing video in the browser should suppress the screensaver/lock the same
way it does on GNOME/KDE, for the duration of playback.

Root cause (traced via journal + source)

Omarchy's idle system is a Quickshell service
(/usr/share/omarchy/shell/plugins/services/idle/Service.qml), not
hypridle — no hypridle process runs in an Omarchy session even though
~/.config/hypr/hypridle.conf still ships/exists. The Quickshell service
uses Quickshell.Wayland.IdleMonitor with respectInhibitors: true, which
only honors Wayland-protocol idle inhibitors
(idle-inhibit-unstable-v1), the kind fullscreen mpv/VLC register
directly against a surface.

Firefox instead requests idle inhibition via the freedesktop portal
(org.freedesktop.impl.portal.Inhibit) while a <video> is playing. Tracing
that call:

  • /usr/share/xdg-desktop-portal/portals/hyprland.portal (the backend

selected UseIn=... Hyprland ...) does not list
org.freedesktop.impl.portal.Inhibit in its Interfaces= — only
Screenshot;ScreenCast;GlobalShortcuts;InputCapture.
- xdg-desktop-portal therefore falls back to
xdg-desktop-portal-gtk (UseIn=gnome) as the only backend implementing
Inhibit.
- xdg-desktop-portal-gtk's Inhibit implementation proxies to the legacy
org.freedesktop.ScreenSaver D-Bus interface — but nothing in an Omarchy
session owns that well-known name (no gnome-screensaver-alike service), so
every call fails.

Journal, repeating every few seconds while the video plays:

xdg-desktop-portal-gtk[1929]: Backend call failed: Cannot invoke method; proxy is for the
well-known name org.freedesktop.ScreenSaver without an owner, and proxy was constructed
with the G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START flag
/usr/lib/xdg-desktop-portal[1739]: A backend call failed: Inhibiting other than idle not supported

So the inhibit request is silently swallowed and the Quickshell idle monitor
never sees it — the screensaver/lock timers proceed unaffected by playback.

Notably, Omarchy's idle service already has the exact mechanism needed to
fix this cleanly: the existing stayAwake state
(~/.local/state/omarchy/indicators/stay-awake, toggled via the bar's "Stay
Awake" indicator or omarchy-shell idle enable|disable). A small D-Bus
service that implements org.freedesktop.ScreenSaver
(Inhibit/UnInhibit) — or extending xdg-desktop-portal-hyprland's
.portal file / omarchy-shell to implement
org.freedesktop.impl.portal.Inhibit — and drives that same stayAwake
flag would let Firefox (and any other portal/D-Bus-based app: mpv without
--no-osc... etc.) properly suppress idle during playback.

Steps to reproduce

  1. Fresh Omarchy session on Hyprland (not GNOME).
  2. Open Firefox, play any YouTube video (windowed, not fullscreen).
  3. Leave mouse/keyboard untouched past idle.screensaver seconds

(default/configured 300s here).
4. Screensaver launches while video audio/playback continues in the
background.
5. journalctl --user -b | grep -i -E 'ScreenSaver|Inhibit' shows the
failed D-Bus calls timed to the video's inhibit heartbeat.

System details

  • Omarchy: 4.0.0-1
  • Hyprland: 0.56.2-1
  • xdg-desktop-portal: 1.22.1-2
  • xdg-desktop-portal-gtk: 1.15.3-1
  • xdg-desktop-portal-hyprland: 1.4.1-1
  • Firefox: 153.0.4-1
  • Kernel: 7.1.8-arch1-3
  • GPU: AMD Radeon RX 7900 XTX (amdgpu), iGPU Raphael
  • idle.screensaver = 300s, idle.lock = 604800s (per ~/.config/omarchy/shell.json)

Workaround

Toggle the bar's "Stay Awake" indicator (or omarchy-shell idle disable)
before watching video, and omarchy-shell idle enable afterward.

View raw text
## What happened

Screensaver / idle lock fires on schedule (`idle.screensaver` in
`~/.config/omarchy/shell.json`) even while a video is actively playing in
Firefox (e.g. YouTube). The video keeps playing behind the screensaver —
Firefox never successfully inhibits idle.

## What I expected

Playing video in the browser should suppress the screensaver/lock the same
way it does on GNOME/KDE, for the duration of playback.

## Root cause (traced via journal + source)

Omarchy's idle system is a Quickshell service
(`/usr/share/omarchy/shell/plugins/services/idle/Service.qml`), not
`hypridle` — no `hypridle` process runs in an Omarchy session even though
`~/.config/hypr/hypridle.conf` still ships/exists. The Quickshell service
uses `Quickshell.Wayland.IdleMonitor` with `respectInhibitors: true`, which
only honors **Wayland-protocol** idle inhibitors
(`idle-inhibit-unstable-v1`), the kind fullscreen `mpv`/VLC register
directly against a surface.

Firefox instead requests idle inhibition via the **freedesktop portal**
(`org.freedesktop.impl.portal.Inhibit`) while a `<video>` is playing. Tracing
that call:

- `/usr/share/xdg-desktop-portal/portals/hyprland.portal` (the backend
  selected `UseIn=... Hyprland ...`) does **not** list
  `org.freedesktop.impl.portal.Inhibit` in its `Interfaces=` — only
  `Screenshot;ScreenCast;GlobalShortcuts;InputCapture`.
- `xdg-desktop-portal` therefore falls back to
  `xdg-desktop-portal-gtk` (`UseIn=gnome`) as the only backend implementing
  `Inhibit`.
- `xdg-desktop-portal-gtk`'s Inhibit implementation proxies to the legacy
  `org.freedesktop.ScreenSaver` D-Bus interface — but nothing in an Omarchy
  session owns that well-known name (no gnome-screensaver-alike service), so
  every call fails.

Journal, repeating every few seconds while the video plays:

```
xdg-desktop-portal-gtk[1929]: Backend call failed: Cannot invoke method; proxy is for the
well-known name org.freedesktop.ScreenSaver without an owner, and proxy was constructed
with the G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START flag
/usr/lib/xdg-desktop-portal[1739]: A backend call failed: Inhibiting other than idle not supported
```

So the inhibit request is silently swallowed and the Quickshell idle monitor
never sees it — the screensaver/lock timers proceed unaffected by playback.

Notably, Omarchy's idle service already has the exact mechanism needed to
fix this cleanly: the existing `stayAwake` state
(`~/.local/state/omarchy/indicators/stay-awake`, toggled via the bar's "Stay
Awake" indicator or `omarchy-shell idle enable|disable`). A small D-Bus
service that implements `org.freedesktop.ScreenSaver`
(`Inhibit`/`UnInhibit`) — or extending `xdg-desktop-portal-hyprland`'s
`.portal` file / omarchy-shell to implement
`org.freedesktop.impl.portal.Inhibit` — and drives that same `stayAwake`
flag would let Firefox (and any other portal/D-Bus-based app: mpv without
`--no-osc`... etc.) properly suppress idle during playback.

## Steps to reproduce

1. Fresh Omarchy session on Hyprland (not GNOME).
2. Open Firefox, play any YouTube video (windowed, not fullscreen).
3. Leave mouse/keyboard untouched past `idle.screensaver` seconds
   (default/configured 300s here).
4. Screensaver launches while video audio/playback continues in the
   background.
5. `journalctl --user -b | grep -i -E 'ScreenSaver|Inhibit'` shows the
   failed D-Bus calls timed to the video's inhibit heartbeat.

## System details

- Omarchy: 4.0.0-1
- Hyprland: 0.56.2-1
- xdg-desktop-portal: 1.22.1-2
- xdg-desktop-portal-gtk: 1.15.3-1
- xdg-desktop-portal-hyprland: 1.4.1-1
- Firefox: 153.0.4-1
- Kernel: 7.1.8-arch1-3
- GPU: AMD Radeon RX 7900 XTX (amdgpu), iGPU Raphael
- `idle.screensaver` = 300s, `idle.lock` = 604800s (per `~/.config/omarchy/shell.json`)

## Workaround

Toggle the bar's "Stay Awake" indicator (or `omarchy-shell idle disable`)
before watching video, and `omarchy-shell idle enable` afterward.

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

  • Related PRpr/9768· confirmed

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.

No decision has been recorded yet.