我需要检索所有用户的$XDG_CONFIG_HOME,$XDG_RUNTIME_DIR和$XDG_DATA_HOME.
我尝试:
sudo -Eiu user printenv | grep XDG_CONFIG_HOME
但是我什么也没得到.
如果我使用用户帐户登录,则使用简单命令:
printenv | grep XDG_CONFIG_HOME
工作正常.
我如何?
解决方法:
TLDR,这些变量在sudo情况下不可用,有些甚至在标准登录情况下甚至无法设置.
在我的Linux系统(debian 8)上,使用pam模块pam_systemd初始化用户会话时,定义了一些XDG变量.手册页中记录了定义为要初始化的变量,但其中包括XDG_RUNTIME_DIR.
此模块仅在登录情况下加载-即我需要ssh到系统,或通过控制台/ gui登录以通过pam_systemd模块初始化要初始化的用户会话.
在su或sudo情况下不会加载此模块.
结果,当您执行sudo模拟用户时,未设置此变量.
其他XDG变量仅在用户实际通过GUI登录时才适用.我没有在使用的GUI上设置这些变量,但是the docs for XDG variables指定了如果未设置它们应该默认使用的变量. XDG_CONFIG_HOME的默认值为$HOME / .config,XDG_DATA_HOME的默认值为$HOME / .local / share.
因此,您应该只期望在交互式登录用例中设置这些变量,而不是通过非交互式用例设置-sudo将被有效地指定为非交互式用例,即使您可以使用它进行交互式操作.
这些值是非常模板化的-例如我系统上的XDG_RUNTIME_DIR是/ var / run / UID,并且按照手册页的说明,在我上次注销后仍然无法生存;因此它不是放置永久文件的地方.
除非您作为用户更改这些值,否则我希望XDG文档the KDE compliance页面中指定的默认值将被使用.可能还有其他一些,但是我只是选择了KDE遵从性,因为它在系统管理指南中被称为.
标签:sudo,linux
来源: https://codeday.me/bug/20191120/2045677.html