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

29

我在Windows 10中使用WSL。当我运行一个Python文件时,会显示这个警告:

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-aadithyasb'

我能理解XDG_RUNTIME_DIR环境变量未被设置并且应用正在创建其自己的路径/tmp/runtime-aadithyasb

自从我使用VcXsrv为Windows安装Xserver以在文件运行时打开绘图,我就一直收到这个警告。

我的问题是:我是否应该在Windows中添加这个XDG_RUNTIME_DIR环境变量,或者有没有一种方法在WSL下使用Ubuntu设置一个目录在这个变量下?

4个回答

33

我已经找到了终端发出警告的原因。但是我发布这篇文章是为了日后像我一样刚开始使用WSL的人有所帮助。这个链接帮助了我解决问题,并让我更好地了解了WSL下Linux的工作方式:

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

之后只需运行该命令即可

source .bashrc 

现在警告将不再在您的终端中持续显示。


1
谢谢您提供的解决方案。能否解释一下这些命令的作用?链接的网站也没有解释清楚。 - Homero Esmeraldo
2
嗨@HomeroEsmeraldo,请参考此链接了解有关XDG_RUNTIME_DIR环境变量的信息https://askubuntu.com/questions/872792/what-is-xdg-runtime-dir - Aadithya Sathya
为什么我们需要运行级别(RUNLEVEL)?好像没有它也能正常工作。 - Homero Esmeraldo
2
变量 XDG_RUNTIME_DIRRUNLEVEL 有什么用途? - HelloGoodbye

6

简而言之

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

export XDG_RUNTIME_DIR=/your/chosen/directory

然而,我相信对于这个问题,进一步的澄清是很重要的:

XDG_RUNTIME_DIR是什么?

$XDG_RUNTIME_DIR环境变量是构成XDG基目录规范的许多环境变量之一。官方规范可从XD G官方网站获取,尽管规范不长,但Arch Wiki上提供了更简明的版本

它为什么存在?

该规范的出现是因为UNIX,以及Linux,没有提到用户或程序可以存储其文件的位置。(想象一下,例如Windows没有“文档”文件夹或“下载”文件夹。那么下载的文件将保存在哪里?每个应用程序都必须自行决定在文件系统中的何处保存它。)因此,在UNIX早期,您的文件系统可能会变得杂乱无章,因为每个应用程序都会在文件系统中创建自己的目录,并在其中使用,而您不知道如何找到它。
XDG基础目录规范的目的是为用户和程序提供一致的位置来存储不同类型的文件。这有助于使您的文件夹更加有组织,并使您更容易找到重要的配置、数据和运行时文件。
该规范为文件存储提供了一些默认值,并且这些默认值可以通过设置环境变量进行覆盖。例如,规范指定配置文件默认存储在“~/.config/”中,但通过设置“$XDG_CONFIG_HOME”,配置文件将使用环境变量指定的路径。

为什么WSL会出现这个问题?

缺少XDG环境变量通常不是一个问题,也不特定于WSL。由于应用程序找不到它正在寻找的变量,它会创建自己的目录来存储文件。大多数应用程序都会这样做并且可以正常运行。

如何解决这个警告?

在运行需要使用它的程序之前,在WSL中设置环境变量XDG_RUNTIME_DIR通常是解决这个问题的最简单方法。最简单的方法可能是将以下内容附加到您的.bashrc文件中,这样在打开Shell时即可设置环境变量。

export XDG_RUNTIME_DIR=/your/chosen/directory

在选择目录时,请记住以下内容(取自规范): $XDG_RUNTIME_DIR定义了基本目录,相对于该目录,用户特定的非必要运行时文件和其他文件对象(如套接字、命名管道等)应该存储。 该目录必须归用户所有,并且他必须是唯一拥有读写访问权限的人。它的Unix访问模式必须为0700。 *趣闻:~/.bashrc本身就是一个配置文件。Bash是在创建XDG基本目录规范之前编写的,因此直接将其配置文件放置在主目录中。您可以想象如果每个程序都这样做会变得多么混乱。这是XDG试图通过他们的规范解决的问题。

我特地登录只是为了点赞。谢谢 @skytanium - EmbeddedDeveloper

1
上周,我在安装Orange3库时遇到了类似的错误。我的环境如下:
  • Ubuntu 18.04
  • python3 (3.6)
  • orange3 (3.27.1)
  • pyQt5 (5.15)
问题是: 当我尝试在命令行中编译orange3时:
sudo python3 -m Orange.canvas

系统显示:

QStandardPaths: XDG_RUNTIME_DIR 未设置,默认为 '/tmp/runtime-root'/home/rene/.local/lib/python3.6/site-packages/orangewidget/widget.py:287: RuntimeWarning:微件类的子类化已经被弃用并将来会被禁用。从OWBaseVectorizer中提取代码或显式打开它。RuntimeWarning)

故障段
此系统错误的问题是:
Orange3(3.27.1)与PyQt5(5.15)不兼容。 然而,PyQtWebEngine将与高于5.12的PyQt5版本兼容。
我在互联网上搜索了这个库的不同版本,并安装了一个介于5.12和5.15之间的版本。
因此,我降级了PyQt5的库到5.13.1:
pip3 install PyQt5 == 5.13.1 --use-feature = 2020-resolver

由此产生的结果是:Orange3再次编译。

-2
我今天也遇到了这个问题。我的解决方法是打开PowerShell并使用以下命令关闭Ubuntu WSL:
wsl.exe --shutdown
之后,我使用“XLaunch”快捷方式打开了VcXsrv,并确保已勾选“禁用访问控制”。

为什么这个答案被投票否决了? - Max Carroll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接