XDG 规范讨论了XDG_CONFIG_HOME
变量,但没有指定应该在哪里定义它。我们应该在 中定义它/etc/X11/Xsession
,还是需要定义它的窗口管理器的配置文件?
我尝试在 /etc/environment 中将其声明为
XDG_CONFIG_HOME="$HOME/.config"
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为似乎 $HOME 在/etc/environment
解析时没有定义。
我在网上能找到的唯一文档是关于 Gentoo 的,它在 /etc/env.d/90xsession
我正在使用 Ubuntu。基于 Debian 的发行版的通用解决方案是什么?
Mes*_*ion 74
您不需要在任何地方定义它,除非您想更改默认值。
XDG 基本目录规范明确指出:
如果
$XDG_CONFIG_HOME
未设置或为空,$HOME/.config
则应使用默认值等于 。
所以将其定义为默认值是多余的。所有兼容的应用程序都将使用$HOME/.config
但是,如果您确实想更改 Debian/Ubuntu 系统中的默认设置,最好的位置是:
/etc/profile
~/.profile
use*_*686 33
在 Arch Linux 中,这是由/etc/profile
, 使用/etc/profile.d
脚本定义的。
对于 Debian/Ubuntu,如果有/etc/profile.d
- 在里面创建一个类似的脚本;如果这样的目录不存在 - 编辑/etc/profile
itsef。
export XDG_CONFIG_HOME="$HOME/.config"
Run Code Online (Sandbox Code Playgroud)
该/etc/environment
文件由 解析pam_env
,它将其视为简单的 name=value 分配。但是,它也有/etc/security/pam_env.conf
,它支持变量扩展并可用于此目的。
我发现通过 PAM 设置环境变量效果最好。对于现代 Linux distos,这意味着/etc/environment
或$HOME/.pam_environment
(请参阅参考资料man pam_env
)。您还可以/etc/security/pam_env.conf
使用特殊语法设置它们。这是我在/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
Run Code Online (Sandbox Code Playgroud)
以前我会在/etc/profile.d/custom.sh
. 但是,某些应用程序会在读取该文件之前启动。切换到 PAM 方法解决了多个以这种方式运行的应用程序的问题。
小智 5
好吧,显然我需要 50 声望才能发表评论。这个问题已经得到了很好的回答,所以我希望这可以帮助人们阅读这里的评论。
特别是关于将变量设置为回退值。如果规范中规定的回退值没有问题,那么设置环境变量以复制回退(即:设置 $XDG_CONFIG_HOME=$HOME/.config)并不是毫无意义或愚蠢的。并非每个程序都会正确地遵循规范,并且设置变量可以使复制和粘贴更容易。
例如,NVIDIA 使用 XDG_CACHE_HOME 如果设置,否则不正确地回退到 ~/.nv 而不是 ~/.cache。您可以轻松地等待数年才能修复此类问题。
此外,https://wiki.archlinux.org/index.php/XDG_Base_Directory是获取一堆环境变量以强制某些程序使用您定义的目录的好地方。复制和粘贴其中的 20 个,然后设置调整路径比必须设置 XDG 变量要多得多。
并添加一些特定于原始问题的内容:https : //wiki.archlinux.org/index.php/Environment_variables#Defining_variables包含有关在何处定义变量的信息。
归档时间: |
|
查看次数: |
67697 次 |
最近记录: |