我需要检索所有用户的 $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)
工作正常。
我如何能?
TLDR,这些变量在本例中不可用,有些甚至在标准登录例中根本sudo无法设置。
在我的 Linux 系统(debian 8)上,一些XDG变量是在使用 pam 模块初始化用户会话时定义的pam_systemd。定义为此时初始化的变量记录在手册页中,但包括XDG_RUNTIME_DIR.
该模块仅在登录情况下加载 - 即我需要 ssh 到系统,或通过控制台/gui 登录以通过模块初始化用户会话pam_systemd。
该模块未加载到su或sudo案例中。
因此,当您模拟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 合规性,因为它在系统管理指南中提到了这一点。
| 归档时间: |
|
| 查看次数: |
3725 次 |
| 最近记录: |