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;