題 應該在哪裡定義XDG_CONFIG_HOME變量?


XDG規範談到了 XDG_CONFIG_HOME 變量,但不指定應在何處定義。我們應該定義它嗎? /etc/X11/Xsession,還是窗口管理器的配置文件需要定義它?

我嘗試在/ etc / environment中聲明它

XDG_CONFIG_HOME="$HOME/.config"

但這沒有用,因為看起來$ HOME沒有定義 /etc/environment 被解析。

我在網上找到的唯一文件是Gentoo,它在那裡被宣布 /etc/env.d/90xsession

我正在使用Ubuntu。基於Debian的發行版的一般解決方案是什麼?


34
2017-12-08 05:26


起源




答案:


在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,將其視為簡單的名稱=值分配。但是,它也有 /etc/security/pam_env.conf,它支持變量擴展,可用於此目的。


20
2017-12-08 10:43



要點不可用 - hawk
它不在 /etc/profile 在Arch中,只有一次被提及 /etc/profile.d/locale.sh。 - phil pirozhkov
鏈接死了...... - ManuelSchneid3r


你沒有 需要 在任何地方定義它,除非您想要更改默認值。

XDG基本目錄規範 清楚地說:

如果 $XDG_CONFIG_HOME 未設置或為空,默認值等於    $HOME/.config 應該使用。

因此將其定義為默認值是多餘的。所有合規的應用程序都已使用 $HOME/.config

但是,如果你  想要更改Debian / Ubuntu系統中的默認值,最好的地方是:

  • 對於系統範圍的更改,影響所有用戶: /etc/profile
  • 僅限您的用戶: ~/.profile

42
2018-05-17 16:05



歡迎downvoter解釋答案有什麼問題,最好幫助改進它 - MestreLion
從理論上講,這個答案非常好,但是周圍有很多軟件,這不符合XDG基本目錄規範,並且由於這種無知而產生了四分之一的錯誤。 - ManuelSchneid3r
@ ManuelSchneid3r非常正確,但對於這樣的軟件設置 XDG_CONFIG_HOME 如果有的話,無論如何都會有所不同。 - MestreLion
可能有盲目使用的軟件 XDG_CONFIG_HOME 假設它是標準的Linux甚至Unix功能而不是第三方規範的一部分,而不遵循規範。 - Eagle-Eye
@mcnesium我說它可能不會受傷。雖然如果可能的話,最好修復應用程序本身並將修復程序發送到上游。 - Eagle-Eye


我發現通過PAM設置環境變量最好。對於現代Linux distos,這意味著 /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方法解決了以這種方式運行的多個應用程序的問題。


2
2017-12-03 15:06



注意:這不符合中指定的默認值 XDG基本目錄規範 - Tom Hale
@TomHale當然不是,設置變量的重點是覆蓋默認值。如果您對默認值感到滿意,則根本不需要設置這些變量。 - carlwgeorge
Ubuntu 14.04默認情況下不設置XDG目錄變量 - 只是因為有規範並不意味著一個發行版跟隨它。 - Tom Hale
@TomHale這無關緊要,因為XDG規範提供了未設置變量的默認值,因此它是 不 必須設置XDG變量。 - Pauan
如果我願意,這很重要 export LESSHISTFILE="$XDG_CACHE_HOME"/less/history 哪裡 less 沒有認識到規範,我的發行版尚未設置默認值。 - Tom Hale