如何使用 sudo 获取 XDG 变量?

Mau*_*cio 6 linux sudo

我需要检索所有用户的 $XDG_CONFIG_HOME、$XDG_RUNTIME_DIR 和 $XDG_DATA_HOME。我尝试:

sudo -Eiu user printenv | grep XDG_CONFIG_HOME
Run Code Online (Sandbox Code Playgroud)

但我什么也没得到。

如果我使用用户帐户登录,则简单的命令:

printenv | grep XDG_CONFIG_HOME
Run Code Online (Sandbox Code Playgroud)

工作正常。

我如何能?

Pet*_*esh 3

TLDR,这些变量在本例中不可用,有些甚至在标准登录例中根本sudo无法设置。

在我的 Linux 系统(debian 8)上,一些XDG变量是在使用 pam 模块初始化用户会话时定义的pam_systemd。定义为此时初始化的变量记录在手册页中,但包括XDG_RUNTIME_DIR.

该模块仅在登录情况下加载 - 即我需要 ssh 到系统,或通过控制台/gui 登录以通过模块初始化用户会话pam_systemd

该模块未加载到susudo案例中。

因此,当您模拟sudo用户时,不会设置此变量。

其他XDG变量仅当用户实际登录 GUI 时才适用。我没有在我使用的 GUI 上设置这些变量,但XDG 变量的文档指定了如果未设置它们,它们应该默认的值。XDG_CONFIG_HOME的默认值为$HOME/.config, 的默认XDG_DATA_HOME值为$HOME/.local/share

因此,您应该只期望在交互式登录情况下设置这些变量,而不是通过非交互式情况设置 -sudo将有效地指定为非交互式情况,即使您可以用它来做交互式事情。

这些值非常模板化 - 例如,XDG_RUNTIME_DIR在我的系统上是/var/run/UID,并且根据手册页,在我上次注销后不会保留;所以它不是放置永久文件的地方。

除非您作为用户更改这些值,否则我希望使用XDG 文档、 KDE ​​合规性页面中指定的默认值。可能还有其他的,但我只是选择了 KDE 合规性,因为它在系统管理指南中提到了这一点。