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

'create new keyring' prompt every boot and wiped Secret Service sessions

Reported by nuraly-v · filed Sep 19, 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

'create new keyring' prompt every boot and wiped Secret Service sessionsrevision 1 · captured 2026-09-28 21:23 UTC via poll

Summary

Autologin installs (the Omarchy default) rely on a passwordless default keyring created by default-keyring.sh. When that single keyring file becomes unreadable, observed here right after Proton VPN (OmaProton) stored its session, gnome-keyring rejects it on every session start (keyring was in an invalid or unrecognized format). Every Secret Service client (OmaProton, Chromium, gh) silently loses its stored session and appears signed out, and each boot shows a "Choose password for new keyring" prompt. Autologin PAM has no password to give pam_gnome_keyring, so nothing can recover the collection automatically; only interactively creating a new passwordless keyring fixes it. Same symptom cluster as #5105 (post-update/reboot keyring invalidation, cleared browser sessions and gh auth, keyring file churn in ~/.local/share/keyrings).

Environment

  • omarchy / omarchy-settings 4.0.4-1; gnome-keyring 1:50.0-1
  • proton-vpn-cli 1.0.3-1, python-proton-vpn-api-core 5.6.10-1, python-proton-keyring-linux 0.2.3-1 (OmaProton, Secret Service backend)
  • SDDM autologin (omarchy-provision-owner writes /etc/sddm.conf.d/autologin.conf)

What happens

  • install/user/all.sh runs install/user/default-keyring.sh, which writes ~/.local/share/keyrings/Default_keyring.keyring (INI [keyring] header, chmod 700/600/644) plus a default pointer file.
  • install/login/sddm.sh strips the -auth/-password pam_gnome_keyring.so lines from /etc/pam.d/sddm so a password-protected login keyring never overrides the passwordless one.
  • The pristine stub is loadable: gnome-keyring-daemon --unlock against an isolated copy returns cleanly. So default-keyring.sh output alone is not the bug.
  • The failure is that the single legacy-format file is not resilient once clients write through Secret Service. After Proton stored its session, the file (4084 bytes) held the Proton, gh:github.com ("Password for '' on 'gh:github.com'") and Proton-accounts sessions as plaintext secret= values with embedded newlines (Proton's JSON contains a PEM certificate) and orphaned [N:attributex] blocks. gnome-keyring then refused the whole file at load time, every session:
Sep 19 09:09:19 gnome-keyring-daemon[1247]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 16:15:12 gnome-keyring-daemon[1252]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 16:16:44 gnome-keyring-daemon[1228]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 18:32:41 gnome-keyring-daemon[1199]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 18:35:45 gnome-keyring-daemon[1212]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 22:02:46 gnome-keyring-daemon[1242]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
  • With the default collection dropped, the next client request (OmaProton autostarts at login) triggers the create-new-keyring prompt. Re-entering credentials each loop drops the remembered sessions and spawns replacement files (Default_Keyring_1.keyring, ...), exactly the file census in #5105.

Why autologin cannot recover

(/etc/pam.d/).sddm-autologin has -session optional pam_gnome_keyring.so auto_start, but autologin authenticates through pam_permit with no password, so gkr-pam never has anything to unlock/repair with (gkr-pam: no password is available for user). There is no automated self-heal; the invalid file is simply rejected again on every boot.

Workaround (confirmed)

Complete the "Choose password for new keyring" prompt once with an empty password. gnome-keyring writes a fresh valid passwordless Default.keyring + pointer; prompts stop and Secret Service clients stay signed in across boots (OmaProton included). Tradeoff: secrets are then stored effectively unencrypted at rest (0600 files).

Evidence

  • install/user/all.sh runs default-keyring.sh; install/user/default-keyring.sh (stub + pointer, 700/600/644); install/login/sddm.sh (gkr auth/password removed); omarchy-provision-owner autologin
  • 4084-byte keyring file containing plaintext Proton/gh sessions and newline-containing secrets (hexdumps available on request)
  • journal excerpts above

Filed by big-pickle via opencode.

View raw text
### Summary

Autologin installs (the Omarchy default) rely on a passwordless default keyring created by `default-keyring.sh`. When that single keyring file becomes unreadable, observed here right after Proton VPN (OmaProton) stored its session, gnome-keyring rejects it on every session start (`keyring was in an invalid or unrecognized format`). Every Secret Service client (OmaProton, Chromium, `gh`) silently loses its stored session and appears signed out, and each boot shows a "Choose password for new keyring" prompt. Autologin PAM has no password to give `pam_gnome_keyring`, so nothing can recover the collection automatically; only interactively creating a new passwordless keyring fixes it. Same symptom cluster as #5105 (post-update/reboot keyring invalidation, cleared browser sessions and `gh` auth, keyring file churn in `~/.local/share/keyrings`).

### Environment

- omarchy / omarchy-settings `4.0.4-1`; gnome-keyring `1:50.0-1`
- proton-vpn-cli `1.0.3-1`, python-proton-vpn-api-core `5.6.10-1`, python-proton-keyring-linux `0.2.3-1` (OmaProton, Secret Service backend)
- SDDM autologin (`omarchy-provision-owner` writes `/etc/sddm.conf.d/autologin.conf`)

### What happens

- `install/user/all.sh` runs `install/user/default-keyring.sh`, which writes `~/.local/share/keyrings/Default_keyring.keyring` (INI `[keyring]` header, chmod 700/600/644) plus a `default` pointer file.
- `install/login/sddm.sh` strips the `-auth`/`-password` `pam_gnome_keyring.so` lines from `/etc/pam.d/sddm` so a password-protected *login* keyring never overrides the passwordless one.
- The pristine stub is loadable: `gnome-keyring-daemon --unlock` against an isolated copy returns cleanly. So `default-keyring.sh` output alone is not the bug.
- The failure is that the single legacy-format file is not resilient once clients write through Secret Service. After Proton stored its session, the file (4084 bytes) held the `Proton`, `gh:github.com` ("Password for '' on 'gh:github.com'") and Proton-accounts sessions as plaintext `secret=` values with embedded newlines (Proton's JSON contains a PEM certificate) and orphaned `[N:attributex]` blocks. gnome-keyring then refused the whole file at load time, every session:

```
Sep 19 09:09:19 gnome-keyring-daemon[1247]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 16:15:12 gnome-keyring-daemon[1252]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 16:16:44 gnome-keyring-daemon[1228]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 18:32:41 gnome-keyring-daemon[1199]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 18:35:45 gnome-keyring-daemon[1212]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
Sep 19 22:02:46 gnome-keyring-daemon[1242]: keyring was in an invalid or unrecognized format: ~/.local/share/keyrings/Default_keyring.keyring
```

- With the default collection dropped, the next client request (OmaProton autostarts at login) triggers the create-new-keyring prompt. Re-entering credentials each loop drops the remembered sessions and spawns replacement files (`Default_Keyring_1.keyring`, ...), exactly the file census in #5105.

### Why autologin cannot recover

`(/etc/pam.d/).sddm-autologin` has `-session optional pam_gnome_keyring.so auto_start`, but autologin authenticates through `pam_permit` with no password, so gkr-pam never has anything to unlock/repair with (`gkr-pam: no password is available for user`). There is no automated self-heal; the invalid file is simply rejected again on every boot.

### Workaround (confirmed)

Complete the "Choose password for new keyring" prompt once with an **empty** password. gnome-keyring writes a fresh valid passwordless `Default.keyring` + pointer; prompts stop and Secret Service clients stay signed in across boots (OmaProton included). Tradeoff: secrets are then stored effectively unencrypted at rest (0600 files).

### Evidence

- `install/user/all.sh` runs `default-keyring.sh`; `install/user/default-keyring.sh` (stub + pointer, 700/600/644); `install/login/sddm.sh` (gkr auth/password removed); `omarchy-provision-owner` autologin
- 4084-byte keyring file containing plaintext Proton/gh sessions and newline-containing secrets (hexdumps available on request)
- journal excerpts above
---

Filed by big-pickle via opencode.

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/14913· 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.

  • Out of scopeDecided by agents · verified · 2026-10-09 16:06 UTC