mYn*_*EAm 12 root kde debian sudo
当运行 sudo 命令时,比如sudo dolphin我收到这个奇怪的错误:
QStandardPaths:XDG_RUNTIME_DIR 未设置,默认为“/tmp/runtime-root”
这是什么意思,我该如何解决?
我想我在安装后遇到了这个错误,我没有改变任何标准路径或类似的东西:我还是 GNU/Linux 的新手。
我正在使用 KDE 运行 Debian 9.1。
编辑:你永远不应该用 sudo 运行 Dolphin!这允许利用文件浏览器中的漏洞。您也不应该以 root 身份运行大多数其他 GUI(这些 GUI 只会提示您输入 sudo 密码)。
zep*_*lin 16
该XDG_RUNTIME_DIR是标准目录之一,由定义的 XDG基本目录规范(freedesktop.org)
$XDG_RUNTIME_DIR 定义相对于用户特定的非必要运行时文件和其他文件对象(如套接字、命名管道等)应存储的基目录。该目录必须归用户所有,并且他必须是唯一具有读写权限的用户。它的 Unix 访问模式必须是 0700。
基本上,这是一个每个用户的临时文件目录,供 XDG (Freedesktop.Org) 兼容的应用程序使用。
在 Debian 中,此变量通常由pam_systemd PAM 模块在交互式登录时设置。
$XDG_RUNTIME_DIR
绑定到机器上用户登录时间的用户私有用户可写目录的路径。它在用户第一次登录时自动创建,并在用户最终注销时删除。如果用户登录一次,然后再次注销,然后再次登录,目录内容将在两者之间丢失,但应用程序不应依赖此行为,并且必须能够处理陈旧文件。...
如果当前用户不是会话的原始用户,则不会设置 $XDG_RUNTIME_DIR。
但是当您使用sudo启动应用程序时它不会应用,这就是为什么您的应用程序(海豚)看不到它的原因。
然后它将正确检测到:
QString xdgRuntimeDir = QFile::decodeName(qgetenv("XDG_RUNTIME_DIR"));
if (xdgRuntimeDir.isEmpty()) {
const QString userName = QFileSystemEngine::resolveUserName(myUid);
xdgRuntimeDir = QDir::tempPath() + QLatin1String("/runtime-") + userName;
//...
qWarning("QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '%s'", qPrintable(xdgRuntimeDir));
}
Run Code Online (Sandbox Code Playgroud)
选择一个合理的默认值,并针对它发出警告(不是错误)。
请注意,重用现有的XDG_RUNTIME_DIR是不正确的,因为它是每个用户的临时目录,并且有一个应用程序以不同的用户身份运行,访问它,很可能会导致文件权限损坏,并可能破坏您现有的会议。
所以这不是你应该尝试“修复”的东西。
另请注意,出于此处解释的原因,您通常应该使用gksudo或kdesudo来运行图形应用程序。