“错误:未在环境中设置XDG_RUNTIME_DIR。” 尝试以root身份运行nautilus时


14

我试图以根用户身份运行nautilus,但是当我从终端运行“ sudo nautilus”时,出现以下错误:

错误:未在环境中设置XDG_RUNTIME_DIR。

(nautilus:9341):Gtk警告**:无法打开显示:

当我尝试以非root用户身份运行nautilus时,不会发生此问题。我正在使用Ubuntu 14.04。有谁知道我该如何解决?


仅出于记录目的,在尝试通过ssh进行X11Forwarding时遇到相同的错误后,我在这里结束。解决方案:-X启动ssh会话时,我忘记使用该选项。
JW。

Answers:


13

当您以另一个用户的身份运行软件时,实际上是在启动一个新的最小化隔离环境,该环境不会包含一些“过多”变量(其中包括负责注入库或设置某些特权的变量)。将sudo nautilus呼叫替换为以下内容-它会在当前会话中进行特定于用户的x服务器设置:

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus

这是一次性的低级别解决方案,但它将在配置错误的计算机上运行。如果要永久“修复sudo”,则需要查找环境配置问题并按照其他答案中的说明进行纠正。


1
@Cyprian Guerra-这没有设置到环境中,只允许您运行一次。这几乎没有帮助。运行时,sudo nautilus应从终端正常运行。通常,每当我从全新安装的终端上执行此操作时,它都会使用sudo正常打开。

@ user94959您不了解基本原理-正在设置新环境,将变量带入,任务运行,当任务退出时,此单独的环境将被破坏。因此,是的,您需要为每个新环境设置变量。如果您希望获得更多的阅读材料,请尝试pkexecsudo手册页以及Google解决相关纠纷。
cprn

@CyprianGuerra那么,当我尝试从需要提升权限的桌面菜单打开应用程序时,为什么会在输入密码后运行?显然,如果配置不能正常启动,因为它没有像通常那样在XDG环境中进行设置,则缺少某些配置吗?问题是,当它的说法Cannot open display表示配置文件中缺少某些内容时,是因为某些内容修改了它,并在不应该的情况下将其从环境中删除了。那么,如何才能将其永久设置回环境中呢?这样我就不必处理这个问题了?

1
@sherrellbc我要明确告诉策略工具包在运行env之前先运行nautilus,前者负责为我设置变量。您可以检查man env
cprn

1
@cprn D'哦。我应该先检查手册页。env COMMAND ARG ...
sherrellbc

1

我在Ubuntu 14.04上也遇到了同样的问题。通过按打开终端,

Ctrl+ Alt+T

然后 sudo visudo

换线

默认值env_keep =“ https_proxy”

默认值env_keep + =“ https_proxy”

它像魅力一样运作。


它可以工作,但为$XAUTHORITY达到目的而设置相同。
cprn

1

为简单起见-进一步说明了系统的新启动。

经过所有解释之后,我得出了结果-终端中的“ env”已经说对这些会话是正确的:

这两行使用环境变量:

对于tmp行为,我选择了:

mkdir -pv〜/ .cache / xdgr

设置环境变量:

导出XDG_RUNTIME_DIR = $ PATH:〜/ .cache / xdgr

关闭终端并打开新的环境调用后,他们告诉:

XDG_RUNTIME_DIR = /运行/用户/ 1001

注意:Ubuntu下的用户可以使用,root需要更多(按条款提供的最新信息-具有0700权限)


0

如果您在Docker中遇到此错误;这就是我所做的

# sudo xhost +
access control disabled, clients can connect from any host
# export DISPLAY=:0.0
# docker run -it --env DISPLAY=unix$DISPLAY --privileged  --volume /tmp/.X11-unix:/tmp/.X11-unix .. rest of your Docker arugments
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.