mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-01-23 02:36:05 +00:00
build: next attempt 2 #5252
This commit is contained in:
parent
55f40afe5e
commit
7fd8f57d3e
3 changed files with 38 additions and 37 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue