XDG_CONFIG_HOME变量应在哪里定义?


40

XDG规范讨论XDG_CONFIG_HOME变量,但未指定应在何处定义。我们应该在中定义它/etc/X11/Xsession,还是需要定义它的窗口管理器的配置文件?

我试图在/ etc / environment中声明为

XDG_CONFIG_HOME="$HOME/.config"

但这没有用,因为/etc/environment解析时似乎未定义$ HOME 。

我在网上只能找到关于Gentoo的文档,该文档在 /etc/env.d/90xsession

我正在使用Ubuntu。基于Debian的发行版的一般解决方案是什么?

Answers:


24

在Arch Linux中,这是通过/etc/profile使用/etc/profile.d脚本定义的。

对于Debian / Ubuntu,如果有/etc/profile.d–在其中创建一个类似的脚本;如果这样的目录不存在,请编辑它的/etc/profile目录。

export XDG_CONFIG_HOME="$HOME/.config"

/etc/environment文件由解析pam_env,将其视为简单的name = value分配。但是,它也具有/etc/security/pam_env.conf支持变量扩展的,可以用于此目的。


要点不可用

3
它不再存在/etc/profile于Arch中,仅从中被提及过一次/etc/profile.d/locale.sh
菲尔·皮罗

1
链接已死...
ManuelSchneid3r 2015年

53

不需要在任何地方定义它,除非您想更改默认值。

XDG基本目录规范明确指出:

如果$XDG_CONFIG_HOME未设置或为空,$HOME/.config则应使用默认值 。

因此将其定义为默认值是多余的。所有兼容的应用程序将已经使用$HOME/.config

但是,如果您确实想在Debian / Ubuntu系统中更改默认设置,最好的地方是:

  • 对于系统范围的更改,影响到所有用户: /etc/profile
  • 仅针对您的用户: ~/.profile

1
欢迎downvoter解释答案有什么问题,最好能帮助改善答案
MestreLion 2014年

1
从理论上讲,这个答案是完全可以的,但周围有很多软件,不符合XDG基本目录规范,并且由于这种无知而产生了四十亿的错误。
ManuelSchneid3r 2015年

5
@ ManuelSchneid3r非常正确,但是对于这样的软件设置XDG_CONFIG_HOME,即使有的话,也几乎没有什么区别。
MestreLion,2015年

2
可能有一些软件在XDG_CONFIG_HOME未遵循规范的情况下盲目使用,假设它是标准Linux甚至Unix功能,而不是第三方规范的一部分。
Eagle-Eye

3
@mcnesium我说这可能不会受伤。虽然可能,但最好修复应用程序本身并将修复程序发送到上游。
Eagle-Eye

5

我发现通过PAM设置环境变量最有效。对于现代Linux发行版,这意味着/etc/environment$HOME/.pam_environment(请参阅参考资料man pam_env)。您还可以/etc/security/pam_env.conf使用特殊语法设置它们。这是我在中设置XDG变量的方法/etc/security/pam_env.conf

XDG_CACHE_HOME  DEFAULT=@{HOME}/.xdg/cache
XDG_CONFIG_HOME DEFAULT=@{HOME}/.xdg/config
XDG_DATA_HOME   DEFAULT=@{HOME}/.xdg/data
XDG_STATE_HOME  DEFAULT=@{HOME}/.xdg/state

以前,我会在中设置这些变量/etc/profile.d/custom.sh。但是,某些应用程序在读取该文件之前启动。切换到PAM方法可以解决以这种方式运行的多个应用程序的问题。


4
注意:这不符合XDG基本目录规范
Tom Hale

1
@TomHale当然不是,设置变量的全部目的是覆盖默认值。如果您对默认设置感到满意,则根本不需要设置这些变量。
carlwgeorge

1
Ubuntu 14.04默认情况下不会设置XDG目录变量-仅仅是因为有规范并不意味着发行者会遵循它。
汤姆·黑尔

2
如果我不希望该规范出现export LESSHISTFILE="$XDG_CACHE_HOME"/less/history在哪里less,并且我的发行版尚未设置默认值,那也很重要。
汤姆·黑尔

1
@TomHale规范没有定义操作系统应该将变量设置为什么;它定义了变量,如果已定义且非空,则应用程序应使用该变量。而且,如果该变量未定义或为空,则应用程序应使用规范中引用的默认路径。因此,您的简短示例不符合规范,因为它不会首先检查XDG_CACHE_HOME已定义且非空。它应改为:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx

0

对于Zsh用户,在.zshenv文件中定义它

export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"

1
唐纳德在乎自己的解释吗?
smac89,
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.