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


41

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

/ etc / environmentで次のように宣言しようとしました。

XDG_CONFIG_HOME="$HOME/.config"

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

私がオンラインで見つけることができた唯一のドキュメントは、Gentooに関するものでした。 /etc/env.d/90xsession

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

回答:


24

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

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

export XDG_CONFIG_HOME="$HOME/.config"

/etc/environmentファイルがによって解析されpam_env、その単純な名前=値の割り当てとして扱い、それを。ただし、/etc/security/pam_env.conf変数拡張をサポートし、この目的に使用できるがあります。


要点は利用できません
タカ

3
これ/etc/profileはもうArchにはなく、から一度だけ言及されてい/etc/profile.d/locale.shます。
フィルピロシコフ14

1
リンクが
停止してい

54

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

XDGベースディレクトリ仕様は明確に述べています:

場合$XDG_CONFIG_HOMEのいずれかの設定または空ではありませんが、デフォルトに等しい $HOME/.config使用する必要があります。

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

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

  • すべてのユーザーに影響を与えるシステム全体の変更の場合: /etc/profile
  • ユーザーのみ: ~/.profile

1
downvoterは答えを間違っている、好ましくは助けがそれを改善するかを説明するために歓迎されている
MestreLion

1
この答えは理論的にはまったく問題ありませんが、XDG Base Directory Specificationに準拠していないソフトウェアがたくさんあり、この無知に起因する膨大な数のバグがあります。
ManuelSchneid3r

5
@ ManuelSchneid3r非常に真実ですが、そのようなソフトウェアの設定でXDG_CONFIG_HOMEは、とにかくほとんど違いはありません。
メストレリオン

2
XDG_CONFIG_HOMEサードパーティの仕様の一部ではなく、標準のLinuxまたはUnixの機能であることを前提に、仕様に準拠せずに盲目的に使用するソフトウェアが存在する場合があります。
イーグルアイ

3
@mcnesiumおそらく痛くないと言っています。可能であれば、アプリケーション自体を修正し、修正をアップストリームに送信することをお勧めします。
イーグルアイ

5

PAMを介して環境変数を設定するのが最適であることがわかりました。最新のLinux distoの場合、これは/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
注意:これはで指定された中でデフォルトに従わないXDGベースディレクトリ仕様
トム・ヘイル

2
@TomHaleもちろん、変数を設定する全体のポイントはデフォルトをオーバーライドすることです。デフォルトに満足している場合は、これらの変数を設定する必要はまったくありません。
-carlwgeorge

1
Ubuntu 14.04は、デフォルトではXDGディレクトリ変数を設定しません-仕様があるからといって、ディストリビューションがそれに続くというわけではありません。
トム・ヘイル

2
export LESSHISTFILE="$XDG_CACHE_HOME"/less/historyどこlessがスペックを認識しておらず、デフォルトが私のディストリビューションによってまだ設定されていない場合は問題になります。
トム・ヘイル

2
@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
自分を説明するためのDownvoterのケア?
smac89
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.