From 86393d7858e3bd22a1778b22621fa6ec36919a16 Mon Sep 17 00:00:00 2001 From: xishang0128 Date: Sat, 4 Jan 2025 23:14:32 +0800 Subject: [PATCH] Add some core settings --- src/main/core/manager.ts | 28 ++++++++++--- src/renderer/src/pages/mihomo.tsx | 65 ++++++++++++++++++++++++++----- src/shared/types.d.ts | 4 ++ 3 files changed, 83 insertions(+), 14 deletions(-) diff --git a/src/main/core/manager.ts b/src/main/core/manager.ts index fb3db585..3dc3fed8 100644 --- a/src/main/core/manager.ts +++ b/src/main/core/manager.ts @@ -62,7 +62,11 @@ export async function startCore(detached = false): Promise[]> { core = 'mihomo', autoSetDNS = true, diffWorkDir = false, - mihomoCpuPriority = 'PRIORITY_NORMAL' + mihomoCpuPriority = 'PRIORITY_NORMAL', + disableLoopbackDetector = false, + disableEmbedCA = false, + disableSystemCA = false, + skipSafePathCheck = false } = await getAppConfig() const { 'log-level': logLevel } = await getControledMihomoConfig() if (existsSync(path.join(dataDir(), 'core.pid'))) { @@ -92,12 +96,19 @@ export async function startCore(detached = false): Promise[]> { } const stdout = createWriteStream(logPath(), { flags: 'a' }) const stderr = createWriteStream(logPath(), { flags: 'a' }) + const env = { + DISABLE_LOOPBACK_DETECTOR: String(disableLoopbackDetector), + DISABLE_EMBED_CA: String(disableEmbedCA), + DISABLE_SYSTEM_CA: String(disableSystemCA), + SKIP_SAFE_PATH_CHECK: String(skipSafePathCheck) + } child = spawn( corePath, ['-d', diffWorkDir ? mihomoProfileWorkDir(current) : mihomoWorkDir(), ctlParam, mihomoIpcPath], { detached: detached, - stdio: detached ? 'ignore' : undefined + stdio: detached ? 'ignore' : undefined, + env: env } ) if (process.platform === 'win32' && child.pid) { @@ -130,7 +141,7 @@ export async function startCore(detached = false): Promise[]> { patchControledMihomoConfig({ tun: { enable: false } }) mainWindow?.webContents.send('controledMihomoConfigUpdated') ipcMain.emit('updateTrayMenu') - reject('虚拟网卡启动失败, 请尝试手动授予内核权限') + reject('虚拟网卡启动失败,请尝试手动授予内核权限') } if ( @@ -211,10 +222,17 @@ export async function quitWithoutCore(): Promise { } async function checkProfile(): Promise { - const { core = 'mihomo', diffWorkDir = false } = await getAppConfig() + const { + core = 'mihomo', + diffWorkDir = false, + skipSafePathCheck = false + } = await getAppConfig() const { current } = await getProfileConfig() const corePath = mihomoCorePath(core) const execFilePromise = promisify(execFile) + const env = { + SKIP_SAFE_PATH_CHECK: String(skipSafePathCheck) + } try { await execFilePromise(corePath, [ '-t', @@ -222,7 +240,7 @@ async function checkProfile(): Promise { diffWorkDir ? mihomoWorkConfigPath(current) : mihomoWorkConfigPath('work'), '-d', mihomoTestDir() - ]) + ], { env }) } catch (error) { if (error instanceof Error && 'stdout' in error) { const { stdout } = error as { stdout: string } diff --git a/src/renderer/src/pages/mihomo.tsx b/src/renderer/src/pages/mihomo.tsx index 9f24eaa7..6ae8afd2 100644 --- a/src/renderer/src/pages/mihomo.tsx +++ b/src/renderer/src/pages/mihomo.tsx @@ -25,7 +25,14 @@ const CoreMap = { const Mihomo: React.FC = () => { const { appConfig, patchAppConfig } = useAppConfig() - const { core = 'mihomo', maxLogDays = 7, sysProxy } = appConfig || {} + const { + core = 'mihomo', + maxLogDays = 7, + sysProxy, + disableLoopbackDetector, + disableEmbedCA, + disableSystemCA, + skipSafePathCheck } = appConfig || {} const { controledMihomoConfig, patchControledMihomoConfig } = useControledMihomoConfig() const { ipv6, @@ -68,6 +75,17 @@ const Mihomo: React.FC = () => { await restartCore() } + const handleConfigChangeWithRestart = async (key: string, value: any) => { + try { + await patchAppConfig({ [key]: value }) + await restartCore() + } catch (e) { + alert(e) + } finally { + PubSub.publish('mihomo-core-changed') + } + } + return ( <> {lanOpen && setLanOpen(false)} />} @@ -116,14 +134,7 @@ const Mihomo: React.FC = () => { size="sm" selectedKeys={new Set([core])} onSelectionChange={async (v) => { - try { - await patchAppConfig({ core: v.currentKey as 'mihomo' | 'mihomo-alpha' }) - await restartCore() - } catch (e) { - alert(e) - } finally { - PubSub.publish('mihomo-core-changed') - } + handleConfigChangeWithRestart('core', v.currentKey as 'mihomo' | 'mihomo-alpha') }} > {CoreMap['mihomo']} @@ -634,6 +645,42 @@ const Mihomo: React.FC = () => { }} /> + + { + handleConfigChangeWithRestart('disableLoopbackDetector', v) + }} + /> + + + { + handleConfigChangeWithRestart('skipSafePathCheck', v) + }} + /> + + + { + handleConfigChangeWithRestart('disableEmbedCA', v) + }} + /> + + + { + handleConfigChangeWithRestart('disableSystemCA', v) + }} + /> +