当运行 sudo 命令时,例如sudo dolphin
我收到这个奇怪的错误:
QStandardPaths:XDG_RUNTIME_DIR 未设置,默认为“/tmp/runtime-root”
这是什么意思以及如何解决它?
我想自从安装以来我就遇到了这个错误,并且我没有更改任何标准路径或类似的东西:我对 GNU/Linux 仍然是新手。
我正在使用 KDE 运行 Debian 9.1。
编辑:你永远不应该使用 sudo 运行 Dolphin!这允许利用文件资源管理器中的漏洞。您也不应该以 root 身份运行大多数其他 GUI(这些 GUI 只会提示您输入 sudo 密码)。
答案1
这XDG_RUNTIME_DIR是标准目录之一,由 XDG 基目录规范(freedesktop.org)
$XDG_RUNTIME_DIR 定义应存储用户特定的非必需运行时文件和其他文件对象(例如套接字、命名管道等)的相对基目录。该目录必须由用户拥有,并且他必须是唯一对其具有读写访问权限的人。它的 Unix 访问模式必须是 0700。
基本上,这是一个每用户临时文件目录,供 XDG (Freedesktop.Org) 兼容应用程序使用。
在 Debian 中,该变量通常由pam_systemdPAM 模块,交互式登录。
$XDG_RUNTIME_DIR
与计算机上的用户登录时间绑定的用户私有用户可写目录的路径。它会在用户第一次登录时自动创建,并在用户最终注销时删除。如果用户登录一次,然后再次注销,然后再次登录,则目录内容将在其间丢失,但应用程序不应依赖此行为,并且必须能够处理过时的文件。 ...
如果当前用户不是会话的原始用户,则不会设置 $XDG_RUNTIME_DIR。
但当您使用以下命令启动应用程序时,它不会应用须藤,这就是为什么你的应用程序(海豚)看不到它。
然后它会正确地探测这:
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));
}
选择合理的默认值,并发出有关它的警告(而不是错误)。
请注意,重用现有的XDG_RUNTIME_DIR这样做是不正确的,因为它是每个用户的临时目录,并且拥有一个以不同用户身份运行的应用程序访问它,很可能会导致文件权限损坏,并可能破坏您现有的会话。
所以这不是你应该尝试“修复”的事情。
另请注意,您通常应该使用gksudo
或kdesudo
来运行图形应用程序,原因如下这里。