web-dev-qa-db-ja.com

XDG_CONFIG_HOME変数はどこに定義する必要がありますか?

XDG仕様では、XDG_CONFIG_HOME変数について説明していますが、それをどこに定義する必要があるかは指定していません。 /etc/X11/Xsessionで定義する必要がありますか、それとも、これを定義する必要があるのはウィンドウマネージャーの構成ファイルですか?

/ etc/environmentで次のように宣言してみました

XDG_CONFIG_HOME="$HOME/.config"

しかし、/etc/environmentが解析されるときに$ HOMEが定義されていないように見えるため、これは機能しませんでした。

オンラインで見つけた唯一のドキュメントはGentooで、/etc/env.d/90xsessionで宣言されていました

Ubuntuを使用しています。 Debianベースのディストリビューションの一般的な解決策は何ですか?

44
NOLFXceptMe

Arch Linuxでは、これは/etc/profileスクリプトを使用して/etc/profile.dによって定義されます。

Debian/Ubuntuの場合、/etc/profile.dがある場合–内部に同様のスクリプトを作成します。そのようなディレクトリが存在しない場合– /etc/profile itsefを編集します。

export XDG_CONFIG_HOME="$HOME/.config"

/etc/environmentファイルはpam_envによって解析され、単純なname = value割り当てとして扱われます。ただし、/etc/security/pam_env.confもあり、変数の展開をサポートしており、この目的で使用できます。

26
user1686

デフォルトを変更したい場合を除き、どこでも定義する必要はありません。

XDGベースディレクトリ仕様 は次のように明確に述べています。

$XDG_CONFIG_HOMEが設定されていないか空の場合、$HOME/.configと等しいデフォルトを使用する必要があります。

したがって、デフォルト値に定義するのは冗長です。準拠しているすべてのアプリケーションはすでに$HOME/.configを使用します

しかし、doがDebian/Ubuntuシステムのデフォルトを変更したい場合、最適な場所は次のとおりです。

  • システム全体の変更の場合、すべてのユーザーに影響があります:/etc/profile
  • ユーザーのみ:~/.profile
60
MestreLion

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メソッドに切り替えると、このように動作する複数のアプリケーションの問題が解決しました。

5
carlwgeorge

Zshユーザーの場合は、.zshenvファイル

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