XDG 规范讨论了XDG_CONFIG_HOME
变量,但没有指定应该在哪里定义它。我们应该在中定义它/etc/X11/Xsession
,还是窗口管理器的配置文件需要定义它?
我尝试在 /etc/environment 中将其声明为
XDG_CONFIG_HOME="$HOME/.config"
但这不起作用,因为看起来 $HOME 在/etc/environment
解析时没有定义。
我在网上能找到的唯一文档是 Gentoo 的文档,其中声明了/etc/env.d/90xsession
我使用的是 Ubuntu。基于 Debian 的发行版的通用解决方案是什么?
答案1
在 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
,支持变量扩展,可用于此目的。
答案2
你不需要需要在任何地方定义它,除非你想改变默认值。
XDG 基础目录规范明确指出:
如果未设置或者为空,则应使用
$XDG_CONFIG_HOME
默认等于 。$HOME/.config
因此将其定义为默认值是多余的。所有兼容的应用程序都将使用$HOME/.config
但如果你做想要更改 Debian/Ubuntu 系统中的默认设置,合适的(但不是唯一,也可能不是最好的)地点是:
- 对于影响所有用户的系统范围的更改:
/etc/profile
- 仅供您的用户使用:
~/.profile
答案3
详细阐述其他答案中有关将变量设置为后备值的要点:
如果对规范中规定的后备值感到满意,则设置环境变量来复制后备值(即设置$XDG_CONFIG_HOME=$HOME/.config
)并非毫无意义或愚蠢。并非每个程序都会正确遵循规范,设置变量可以使复制和粘贴变得更容易。
例如,NVIDIA 使用XDG_CACHE_HOME
if 设置,否则会不正确地回退到~/.nv
而不是~/.cache
。而且你可能要等上好几年才能修复这样的问题。
还,这一页是获取大量环境变量以强制某些程序使用您定义的目录的好地方。复制并粘贴其中的 20 个,然后设置调整路径的工作量比设置 XDG 变量要大。
并针对原始问题添加一些具体内容:这一页包含有关在何处定义变量的信息。
答案4
对于 Zsh 用户,在文件中定义它.zshenv
~/.zprofile
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"