fix: resolve desktop entry launch failure and hide Electron menu bar on Linux

- Add --ozone-platform-hint=auto before app.whenReady() so Electron
  auto-detects X11 vs Wayland when launched from a desktop entry where
  the display protocol is not guaranteed (fixes immediate crash on
  Fedora/GNOME Wayland sessions)
- Add autoHideMenuBar: true to BrowserWindow so the default Chromium
  File/Edit/View/Help menu bar is hidden by default (still accessible
  via Alt); removes visible Electron significance from the packaged app
- Add scripts/rpm-after-install.sh and wire it via afterInstall in the
  electron-builder RPM config to chmod 4755 chrome-sandbox, ensuring
  the setuid sandbox works on kernels with restricted user namespaces

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DhanushSantosh
2026-02-26 10:53:58 +05:30
parent 6408f514a4
commit 46ee34d499
4 changed files with 18 additions and 1 deletions

View File

@@ -275,7 +275,8 @@
"libuuid" "libuuid"
], ],
"compression": "xz", "compression": "xz",
"vendor": "AutoMaker Team" "vendor": "AutoMaker Team",
"afterInstall": "scripts/rpm-after-install.sh"
}, },
"nsis": { "nsis": {
"oneClick": false, "oneClick": false,

View File

@@ -0,0 +1,6 @@
#!/bin/bash
# Set the setuid bit on chrome-sandbox so Electron's sandbox works on systems
# where unprivileged user namespaces are restricted (e.g. hardened kernels).
# On Fedora/RHEL with standard kernel settings this is not strictly required,
# but it is a safe no-op when not needed.
chmod 4755 /opt/Automaker/chrome-sandbox 2>/dev/null || true

View File

@@ -46,6 +46,9 @@ export function createWindow(): void {
contextIsolation: true, contextIsolation: true,
nodeIntegration: false, nodeIntegration: false,
}, },
// Hide the default Electron/Chromium menu bar on Linux (File/Edit/View/Help).
// It still appears on Alt-press so keyboard-only users aren't locked out.
autoHideMenuBar: true,
// titleBarStyle is macOS-only; use hiddenInset for native look on macOS // titleBarStyle is macOS-only; use hiddenInset for native look on macOS
...(process.platform === 'darwin' && { titleBarStyle: 'hiddenInset' as const }), ...(process.platform === 'darwin' && { titleBarStyle: 'hiddenInset' as const }),
backgroundColor: '#0a0a0a', backgroundColor: '#0a0a0a',

View File

@@ -48,6 +48,13 @@ if (isDev) {
} }
} }
// On Linux, auto-detect X11 vs Wayland so the app launches correctly from
// desktop entries where the display protocol isn't guaranteed to be X11.
// Must be set before app.whenReady() — has no effect on macOS/Windows.
if (process.platform === 'linux') {
app.commandLine.appendSwitch('ozone-platform-hint', 'auto');
}
// Register IPC handlers // Register IPC handlers
registerAllHandlers(); registerAllHandlers();