Summary
After returning from a prolonged GNOME screen lock, opening Settings > Linux desktop can render only the generic error boundary:
Oops, an error has occurred
This was observed on the same session where tray Quit later stopped responding. The two symptoms may share a damaged Electron/WebContents resume lifecycle, but they are reported separately because that relationship is not yet proven.
Environment
- OS: Ubuntu 24.04.4 LTS
- Desktop: Ubuntu GNOME
- Session: X11
- Kernel: 6.8.0-134-generic
- Package format: deb
- codex-desktop-linux: 0.9.5 at
2e04d928babaf09b321c870f4d8b9befd28921a5
- Installed package version:
2026.07.12.122632
- Electron: 42.1.0
- Upstream Codex app: 26.707.51957
- Optional Linux features: none
Steps observed
- Start Codex Desktop normally.
- Lock the GNOME desktop for an extended period.
- Unlock and return to the existing app instance.
- Open Settings.
- Select Linux desktop.
Actual behavior
The settings route displays only:
Oops, an error has occurred
Expected behavior
The generated Linux Desktop settings page should render its launcher, tray, warm-start, update, and build-information controls after session resume.
Build and static checks
The installed patch report records keybinds-settings as applied. The generated asset:
/opt/codex-desktop/content/webview/assets/linux-desktop-settings-linux.js
- passes
node --check;
- has all referenced module exports present;
- imports successfully in an ESM runtime;
- returns a valid React element when
LinuxDesktopSettings({}) is evaluated.
The existing generated-page unit test also passes, but it renders simplified mocked components and does not exercise the real Electron suspend/resume lifecycle.
Runtime observations
The launcher log contains repeated lifecycle errors around affected sessions:
MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 destroyed listeners added to [WebContents]
Error occurred in handler for 'codex_desktop:message-from-view': TypeError: Object has been destroyed
The generic error boundary does not currently log the renderer exception or component stack to launcher.log, which prevents identifying the exact crashing component.
Possible direction
- Log the Linux Desktop route error-boundary exception and component stack.
- Validate or recreate destroyed auxiliary
WebContents after unlock/resume.
- Add a real-browser/runtime smoke test for the generated settings route instead of relying only on mocked component rendering.
- Expose recent Linux lifecycle diagnostics on the page when it can render.
Summary
After returning from a prolonged GNOME screen lock, opening Settings > Linux desktop can render only the generic error boundary:
This was observed on the same session where tray Quit later stopped responding. The two symptoms may share a damaged Electron/WebContents resume lifecycle, but they are reported separately because that relationship is not yet proven.
Environment
2e04d928babaf09b321c870f4d8b9befd28921a52026.07.12.122632Steps observed
Actual behavior
The settings route displays only:
Expected behavior
The generated Linux Desktop settings page should render its launcher, tray, warm-start, update, and build-information controls after session resume.
Build and static checks
The installed patch report records
keybinds-settingsas applied. The generated asset:node --check;LinuxDesktopSettings({})is evaluated.The existing generated-page unit test also passes, but it renders simplified mocked components and does not exercise the real Electron suspend/resume lifecycle.
Runtime observations
The launcher log contains repeated lifecycle errors around affected sessions:
The generic error boundary does not currently log the renderer exception or component stack to
launcher.log, which prevents identifying the exact crashing component.Possible direction
WebContentsafter unlock/resume.