hermes - 💡(How to fix) Fix Desktop app crashes on NVIDIA 580+ drivers (Ubuntu 24.04)

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Error Message

[ERROR:ui/gl/init/gl_factory.cc:111] Requested GL implementation (gl=none,angle=none) not found in allowed implementations: [(gl=egl-angle,angle=default)] [ERROR:ui/gl/angle_platform_impl.cc:42] Display.cpp:1097 (initialize): ANGLE Display::initialize error 12289: Invalid visual ID requested. [ERROR:content/browser/gpu/gpu_process_host.cc:1004] GPU process exited unexpectedly: exit_code=15 [FATAL:content/browser/gpu/gpu_data_manager_impl_private.cc:415] GPU process isn't usable. Goodbye.

Root Cause

Two compounded bugs:

  1. NVIDIA 580 driver EGL bug: eglInitialize() fails with EGL_BAD_PARAMETER ("Invalid visual ID requested", error 12289). This is a regression in the 580.x driver series.

  2. Electron 40 GL backend restriction: gl_factory.cc hardcodes only [(gl=egl-angle,angle=default)] as allowed GL implementations. Commands like --use-gl=swiftshader or --use-gl=desktop are rejected as "not found in allowed implementations".

  3. SwiftShader timeout: Even with --use-angle=swiftshader, ANGLE still probes the host EGL driver during display init, hitting the NVIDIA bug. SwiftShader's pure-CPU initialization exceeds Chromium's GPU process health check timeout, causing SIGTERM (exit_code=15) to the GPU process.

Fix Action

Fix / Workaround

Working Workaround

Created a small LD_PRELOAD shim (hermes-egl-shim.so) that intercepts EGL calls from ANGLE, returning success without touching the broken NVIDIA driver. Combined with the existing HERMES_DESKTOP_DISABLE_GPU patch and --use-gl=angle --use-angle=swiftshader flags, the app launches and renders correctly via SwiftShader.

Patched apps/desktop/electron/main.cjs to auto-detect NVIDIA 580+ via nvidia-smi and route ANGLE through SwiftShader.

Code Example

[ERROR:ui/gl/init/gl_factory.cc:111] Requested GL implementation (gl=none,angle=none) not found in allowed implementations: [(gl=egl-angle,angle=default)]
[ERROR:ui/gl/angle_platform_impl.cc:42] Display.cpp:1097 (initialize): ANGLE Display::initialize error 12289: Invalid visual ID requested.
[ERROR:content/browser/gpu/gpu_process_host.cc:1004] GPU process exited unexpectedly: exit_code=15
[FATAL:content/browser/gpu/gpu_data_manager_impl_private.cc:415] GPU process isn't usable. Goodbye.
RAW_BUFFERClick to expand / collapse

Bug Report: Desktop App Crashes on NVIDIA 580+ Drivers

Environment

  • OS: Ubuntu 24.04.2 LTS
  • GPU: NVIDIA GeForce RTX 3060 (12GB)
  • Driver: NVIDIA 580.159.03
  • Electron: 40.9.3 (bundled in hermes-agent v0.15.1)
  • X11: X.Org 21.1.11, GNOME desktop

Problem

The Hermes desktop app fails to launch on systems with NVIDIA 580.x proprietary drivers. The GPU process crashes within ~19 seconds, causing the entire app to abort.

Root Cause

Two compounded bugs:

  1. NVIDIA 580 driver EGL bug: eglInitialize() fails with EGL_BAD_PARAMETER ("Invalid visual ID requested", error 12289). This is a regression in the 580.x driver series.

  2. Electron 40 GL backend restriction: gl_factory.cc hardcodes only [(gl=egl-angle,angle=default)] as allowed GL implementations. Commands like --use-gl=swiftshader or --use-gl=desktop are rejected as "not found in allowed implementations".

  3. SwiftShader timeout: Even with --use-angle=swiftshader, ANGLE still probes the host EGL driver during display init, hitting the NVIDIA bug. SwiftShader's pure-CPU initialization exceeds Chromium's GPU process health check timeout, causing SIGTERM (exit_code=15) to the GPU process.

Error Output

[ERROR:ui/gl/init/gl_factory.cc:111] Requested GL implementation (gl=none,angle=none) not found in allowed implementations: [(gl=egl-angle,angle=default)]
[ERROR:ui/gl/angle_platform_impl.cc:42] Display.cpp:1097 (initialize): ANGLE Display::initialize error 12289: Invalid visual ID requested.
[ERROR:content/browser/gpu/gpu_process_host.cc:1004] GPU process exited unexpectedly: exit_code=15
[FATAL:content/browser/gpu/gpu_data_manager_impl_private.cc:415] GPU process isn't usable. Goodbye.

Working Workaround

Created a small LD_PRELOAD shim (hermes-egl-shim.so) that intercepts EGL calls from ANGLE, returning success without touching the broken NVIDIA driver. Combined with the existing HERMES_DESKTOP_DISABLE_GPU patch and --use-gl=angle --use-angle=swiftshader flags, the app launches and renders correctly via SwiftShader.

Files created:

  • ~/.local/bin/hermes-egl-shim.c — C source (~250 lines, no EGL headers needed)
  • ~/.local/bin/hermes-egl-shim.so — Compiled shared library (17KB)
  • ~/.local/bin/hermes-desktop-app — Wrapper with LD_PRELOAD + flags

Patched apps/desktop/electron/main.cjs to auto-detect NVIDIA 580+ via nvidia-smi and route ANGLE through SwiftShader.

Recommended Fix

  1. Add a --use-gl=swiftshader option in the GL allowlist (or a --use-gl=swiftshader-webgl option for WebGL-only)
  2. Increase GPU process health check timeout when SwiftShader is detected (initialization is CPU-bound and can take >15s)
  3. Consider providing a pre-built desktop .deb/AppImage that bundles the fix

Tested

  • App launches and runs stably for 2+ minutes
  • All 7 processes alive: main, 2 zygote, GPU (SwiftShader @ 448% CPU), network, audio, renderer
  • Windows visible: 1920x1048 main window, WebSocket to ws://127.0.0.1:9120/api/ws connected
  • Backend connection successful, fonts loaded, audio rendering started
  • Only error in logs: dbus/systemd1.UnitExists (harmless, scope unit already loaded)

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING