mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-08-17 12:18:31 -07:00
fix(notifications): spawn notify-send without AppImage library overrides
Electron AppImages export LD_LIBRARY_PATH pointing at bundled libraries whose stale libnotify kills the system notify-send with a symbol lookup error, permanently disabling in-place replacement and forcing the flickering Electron close-and-reopen fallback. Drop the override from the child environment so the system binary resolves its own libraries.
This commit is contained in:
@@ -1,6 +1,22 @@
|
|||||||
import assert from 'node:assert/strict';
|
import assert from 'node:assert/strict';
|
||||||
import test from 'node:test';
|
import test from 'node:test';
|
||||||
import { createNotifySendReplacer, resolveDefaultNotificationIconPath } from './notification';
|
import {
|
||||||
|
buildNotifySendEnv,
|
||||||
|
createNotifySendReplacer,
|
||||||
|
resolveDefaultNotificationIconPath,
|
||||||
|
} from './notification';
|
||||||
|
|
||||||
|
test('notify-send child environment drops the AppImage library-path override', () => {
|
||||||
|
const env = buildNotifySendEnv({
|
||||||
|
LD_LIBRARY_PATH: '/tmp/.mount_SubMinXXXXXX/usr/lib',
|
||||||
|
DBUS_SESSION_BUS_ADDRESS: 'unix:path=/run/user/1000/bus',
|
||||||
|
HOME: '/home/user',
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(env.LD_LIBRARY_PATH, undefined);
|
||||||
|
assert.equal(env.DBUS_SESSION_BUS_ADDRESS, 'unix:path=/run/user/1000/bus');
|
||||||
|
assert.equal(env.HOME, '/home/user');
|
||||||
|
});
|
||||||
|
|
||||||
test('default notification icon resolves packaged SubMiner asset when no per-notification icon is provided', () => {
|
test('default notification icon resolves packaged SubMiner asset when no per-notification icon is provided', () => {
|
||||||
const path = resolveDefaultNotificationIconPath({
|
const path = resolveDefaultNotificationIconPath({
|
||||||
|
|||||||
@@ -203,8 +203,19 @@ export function createNotifySendReplacer(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Electron AppImages export `LD_LIBRARY_PATH=<mount>/usr/lib`, whose bundled libnotify predates the
|
||||||
|
* symbols the system notify-send links against, so an inherited environment kills the child with a
|
||||||
|
* symbol lookup error before it can send anything. A system binary resolves its own libraries fine,
|
||||||
|
* so the override is dropped entirely rather than filtered.
|
||||||
|
*/
|
||||||
|
export function buildNotifySendEnv(env: NodeJS.ProcessEnv = process.env): NodeJS.ProcessEnv {
|
||||||
|
const { LD_LIBRARY_PATH: _dropped, ...rest } = env;
|
||||||
|
return rest;
|
||||||
|
}
|
||||||
|
|
||||||
const showLinuxReplaceableNotification = createNotifySendReplacer((args, callback) =>
|
const showLinuxReplaceableNotification = createNotifySendReplacer((args, callback) =>
|
||||||
execFile('notify-send', args, { timeout: 5_000 }, (error, stdout) =>
|
execFile('notify-send', args, { timeout: 5_000, env: buildNotifySendEnv() }, (error, stdout) =>
|
||||||
callback(error, stdout ?? ''),
|
callback(error, stdout ?? ''),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user