QStandardPaths:XDG_RUNTIME_DIR 未设置,默认为 '/tmp/runtime-aadithyasb'

Aad*_*hya 12 x11 qstandardpaths windows-subsystem-for-linux

我在 Windows 10 中使用 WSL。运行 python 文件时显示此警告:

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-aadithyasb'
Run Code Online (Sandbox Code Playgroud)

我可以理解XDG_RUNTIME_DIR没有设置环境变量,它正在创建自己的路径/tmp/runtime-aadithyasb

从我使用 VcXsrv 为 Windows 安装 Xserver 以在运行文件时打开绘图的那一刻起,我就收到了此警告。

Wy 问题是我应该XDG_RUNTIME_DIR在 Windows 中添加这个环境变量还是有任何方法可以在 WSL 下使用的 Ubuntu 变量下设置目录?

Aad*_*hya 20

我能够找到导致终端发出警告的原因。然而,我发布了这篇文章,以便它对有一天像我这样刚开始使用 WSL 的人有用。这个链接帮助我解决了这个问题,让我更好地了解了 linux 在 WSL 下的工作方式:

https://dev.to/winebaths/getting-up-and-running-with-the-windows-subsystem-for-linux-8oc

为了解决这个问题,我只是在我的.bashrc文件中添加了以下几行:

export XDG_RUNTIME_DIR=/some/directory/you/specify 
export RUNLEVEL=3
Run Code Online (Sandbox Code Playgroud)

在此之后只需运行命令

source .bashrc 
Run Code Online (Sandbox Code Playgroud)

现在警告不会一直显示在您的终端中。

  • 您好@HomeroEsmeraldo 请参阅此链接以了解 XDG_RUNTIME_DIR 环境变量 https://askubuntu.com/questions/872792/what-is-xdg-runtime-dir (2认同)
  • 变量“XDG_RUNTIME_DIR”和“RUNLEVEL”有什么用? (2认同)

小智 8

长话短说

在 WSL 中,将以下内容附加到您的~/.bashrc文件中以解决问题:

export XDG_RUNTIME_DIR=/your/chosen/directory
Run Code Online (Sandbox Code Playgroud)

然而,我认为对这个问题的进一步澄清很重要:

什么是 XDG_RUNTIME_DIR?

$XDG_RUNTIME_DIR 环境变量是构成XDG 基本目录规范的众多环境变量之一。官方规范可以从 XDG 的官方网站获取,虽然规范不长,但在 Arch Wiki 上可以找到更简洁的版本。

它为什么存在?

该规范的出现是因为 UNIX(甚至 Linux)没有提及用户或程序可以存储其文件的位置。(例如,想象一下,如果 Windows 没有 Documents 文件夹,或者没有 Downloads 文件夹。下载的文件将保存在哪里?每个应用程序都必须自行决定将其保存在哪里。)因此,在 UNIX 的早期,您的文件系统可能会变得杂乱无章,因为每个应用程序都会在其将使用的文件系统中的某个位置创建自己的目录,并且您不知道如何找到它。

XDG 基本目录规范的要点是为用户和程序提供一致的位置来存储不同类型的文件。这有助于使您的文件夹更有条理,并允许您更轻松地查找重要的配置、数据和运行时文件。

该规范如何运作?

该规范提供了一些文件存储位置的默认值,并且可以通过设置环境变量来覆盖这些默认值。例如,规范规定配置文件默认存储在~/.config/,但通过设置$XDG_CONFIG_HOME,配置文件改为使用环境变量指定的路径。

为什么这是 WSL 上的问题?

缺少 XDG 环境变量通常不是问题,而且它也不是 WSL 特有的。由于应用程序找不到它要查找的变量,因此它创建了自己的目录来存储其文件。大多数应用程序都会执行此操作并且运行良好。

如何修复此警告?

XDG_RUNTIME_DIR您应该在运行使用 WSL 的程序之前设置环境变量。最简单的方法可能是将以下内容附加到您的.bashrc文件中,以便在打开 shell 时设置环境变量。*

export XDG_RUNTIME_DIR=/your/chosen/directory
Run Code Online (Sandbox Code Playgroud)

选择目录时,请记住以下内容(摘自规范

$XDG_RUNTIME_DIR 定义应存储用户特定的非必需运行时文件和其他文件对象(例如套接字、命名管道等)的相对基目录。该目录必须由用户拥有,并且他必须是唯一对其具有读写访问权限的人。它的 Unix 访问模式必须是 0700。

*有趣的事实:~/.bashrc它本身是一个配置文件。Bash 是在创建 XDG 基本目录规范之前编写的,因此将其配置文件直接放在主目录中。你可以想象,如果每个程序都这样做的话,事情会变得多么混乱。这是 XDG 试图通过其规范解决的问题。