build: next attempt 2 #5252

This commit is contained in:
Johannes Millan 2025-10-13 17:12:24 +02:00
parent 55f40afe5e
commit 7fd8f57d3e
3 changed files with 38 additions and 37 deletions

View file

@ -83,7 +83,20 @@ snap:
- libglu1-mesa
- libosmesa6
- libgl1-mesa-dri
- libgl1
- libegl1
- libgles2
- libgbm1
- libdrm2
- libxcb1
- libxcb-dri3-0
- libxcb-present0
- libxcb-sync1
- libxdamage1
- libxext6
- libxxf86vm1
- libvulkan1
- mesa-vulkan-drivers
- libtinfo6
- libnspr4
- libnss3

View file

@ -224,8 +224,15 @@ export class IdleTimeHandler {
private async getGnomeIdleTime(): Promise<number | null> {
try {
// Try gdbus first as it might work better in snap environments
const isSnap = !!process.env.SNAP;
if (isSnap) {
log.warn(
'Skipping GNOME idle detection for snap environment (DBus not guaranteed)',
);
return null;
}
// Try gdbus first as it might work better in snap environments
let command =
'gdbus call --session --dest org.gnome.Mutter.IdleMonitor --object-path /org/gnome/Mutter/IdleMonitor/Core --method org.gnome.Mutter.IdleMonitor.GetIdletime';

View file

@ -112,8 +112,8 @@ export const startApp = (): void => {
return true;
};
const enableSwiftshaderFallback = (): void => {
log('Snap: Forcing Chromium SwiftShader software renderer fallback');
const enableSwiftshader = (): void => {
log('Snap: Enabling Chromium SwiftShader software renderer');
process.env.ELECTRON_ENABLE_SWIFTSHADER = '1';
app.commandLine.appendSwitch('use-angle', 'swiftshader');
app.commandLine.appendSwitch('use-gl', 'angle');
@ -122,19 +122,9 @@ export const startApp = (): void => {
app.commandLine.appendSwitch('ignore-gpu-blocklist');
};
// Workaround for Electron 38+ snap package GPU issues (issue #5252)
// Electron 38.1+ has GPU/Mesa driver access issues in snap confinement
const isForceGpu = process.argv.some((val) => val.includes('--enable-gpu'));
const isSnap = process.platform === 'linux' && !!process.env.SNAP;
let canUseSnapSoftwareRenderer = false;
const isForceGpu = process.argv.some((val) => val.includes('--enable-gpu'));
if (isSnap) {
if (isForceGpu) {
log('Snap: --enable-gpu detected, skipping software renderer override');
delete process.env.MESA_LOADER_DRIVER_OVERRIDE;
delete process.env.LIBGL_ALWAYS_SOFTWARE;
} else {
canUseSnapSoftwareRenderer = ensureSnapSoftwareRendering();
}
app.on('gpu-process-crashed', () => {
if (!app.commandLine.hasSwitch('disable-gpu')) {
log('Snap: GPU process crashed, disabling GPU and relaunching');
@ -143,30 +133,21 @@ export const startApp = (): void => {
app.exit(0);
}
});
}
if (isSnap && !isForceGpu && canUseSnapSoftwareRenderer) {
log(
'Snap: Disabling hardware acceleration to avoid Mesa driver access issues (issue #5252)',
);
log(
'Snap: Using software rendering (llvmpipe) with snap strict confinement security',
);
log('Snap: Launch with --enable-gpu to attempt hardware rendering (may crash)');
// Disable hardware acceleration in Electron
app.disableHardwareAcceleration();
// Disable GPU completely to prevent GPU process spawn attempts
app.commandLine.appendSwitch('disable-gpu');
// Disable Chromium's internal sandbox - rely on snap's strict confinement instead
// This is the recommended approach per Snapcraft documentation for strict confinement
// Chromium's sandbox conflicts with snap confinement causing launch failures
app.commandLine.appendSwitch('no-sandbox');
} else if (isSnap && !isForceGpu) {
log('Snap: llvmpipe renderer unavailable, falling back to SwiftShader');
enableSwiftshaderFallback();
if (isForceGpu) {
log('Snap: --enable-gpu detected, leaving hardware acceleration enabled');
delete process.env.MESA_LOADER_DRIVER_OVERRIDE;
delete process.env.LIBGL_ALWAYS_SOFTWARE;
} else {
enableSwiftshader();
const hasLlvmPipe = ensureSnapSoftwareRendering();
if (hasLlvmPipe) {
log('Snap: llvmpipe renderer staged and ready for Mesa software rendering');
} else {
log('Snap: llvmpipe renderer unavailable, relying on SwiftShader only');
}
app.commandLine.appendSwitch('no-sandbox');
}
}
// Initialize protocol handling