From c6b1bcf4a8fd6a677d153a37efa3b0f449962b45 Mon Sep 17 00:00:00 2001 From: momen Date: Mon, 6 Oct 2025 14:59:13 +0800 Subject: [PATCH] =?UTF-8?q?chore:=E6=99=AE=E9=80=9A=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=8F=90=E6=9D=83=E5=90=8E=E7=9A=84=E5=BF=BD=E7=95=A5=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=AD=98=E6=94=BE=E5=88=B0=E7=94=A8=E6=88=B7=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ignoreconfig.cpp | 21 +++++++++++++++++++-- src/main.cpp | 2 ++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/ignoreconfig.cpp b/src/ignoreconfig.cpp index 53d0c75..32089cd 100644 --- a/src/ignoreconfig.cpp +++ b/src/ignoreconfig.cpp @@ -14,8 +14,25 @@ IgnoreConfig::IgnoreConfig(QObject *parent) // 检查是否以 root 权限运行 if (geteuid() == 0) { - // 以 root 权限运行,使用 root 的配置目录 - configDir = "/root/.config"; + // 首先检查是否有 SUDO_USER_HOME 环境变量(表示是通过 pkexec 提权的普通用户) + QByteArray sudoUserHomeEnv = qgetenv("SUDO_USER_HOME"); + if (!sudoUserHomeEnv.isEmpty()) { + // 通过 pkexec 提权的普通用户,使用原用户的配置目录 + QString sudoUserHomePath = QString::fromLocal8Bit(sudoUserHomeEnv); + configDir = sudoUserHomePath + "/.config"; + } else { + // 获取实际的 HOME 目录来判断是真正的 root 用户还是其他方式提权的用户 + QByteArray homeEnv = qgetenv("HOME"); + QString homePath = QString::fromLocal8Bit(homeEnv); + + if (homePath == "/root") { + // 真正的 root 用户,使用 /root/.config + configDir = "/root/.config"; + } else { + // 其他方式提权的用户,使用 HOME 目录下的配置 + configDir = homePath + "/.config"; + } + } } else { // 普通用户,使用标准配置目录 configDir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); diff --git a/src/main.cpp b/src/main.cpp index a3df5a4..f70a913 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,11 +16,13 @@ bool elevateToRoot() { QByteArray display = qgetenv("DISPLAY"); QByteArray xauthority = qgetenv("XAUTHORITY"); + QByteArray home = qgetenv("HOME"); // 获取原始用户的 HOME 目境变量 QStringList args; args << "env" << "DISPLAY=" + display << "XAUTHORITY=" + xauthority + << "SUDO_USER_HOME=" + home // 传递原始用户的 HOME 路径 << program; QProcess process;