為什麼我的環境變數沒有設定?

為什麼我的環境變數沒有設定?

我必須設定一個名為GDK_NATIVE_WINDOWS修復的環境變量Ubuntu 中 Eclipse 按鈕的問題。為了設定環境變量,我將以下行加到~/.pam_environment.

GDK_NATIVE_WINDOWS 預設=true

echo $GDK_NATIVE_WINDOWS令人驚訝的是,當我在終端機中時,環境變數沒有被設定。但是,我列出的所有其他環境變數~/.pam_environment都已正確設定。此外,當我切換到 tty 時,例如Alt+Ctrl+F1,環境變數設定正確。設定這個環境變數有什麼問題嗎~/.pam_environment

答案1

堅持 ~/.pam_environment 文件中的簡單“key=value”語法。沒有預設值、覆蓋、${HOME},什麼都沒有。只是鍵=值。您連結到的手冊頁僅適用於 pam_env.conf。請參閱“man 8 pam_env”,它不承諾任何其他內容“此模組還可以在單獨的行上使用簡單的 KEY=VAL 對來解析文件。”。

順便說一下,在 ./pam_environment 中放入類似 PATH=${PATH}:more/paths 的內容是打破幾乎所有登入嘗試的好方法,因為 PATH 被設定為 ${PATH}:more/paths字面上地(那裡找不到太多東西)。要救援,請“/bin/mv .pam_environment out_of_the_way”並重新登入。

答案2

~/.pam_environment正如您所確定的,您的環境變數應按照建議設定https://help.ubuntu.com/community/EnvironmentVariables。說起來容易做起來難;)

您可能遇到了與我相同的配置差距。請參閱下面的加密主頁的解決方法。

我的~/.pam_environment

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

為什麼靜態路徑很醜?${PATH}對我不起作用。我多次試圖解決這個問題,所以我堅持使用醜陋的預設靜態副本:)

加密主資料夾的解決方法

在 Ubuntu 版本中,包含烏班圖12.04(精確穿山甲)Beta 2,如果您使用加密的主目錄,您將需要修改/etc/pam.d/common-session才能載入它~/.pam_environment。該解決方案顯然適用於早期版本,但我尚未對其進行測試。

Guenther Montag (g-montag) 於 2010 年 8 月 19 日寫道:

這似乎是加密主目錄的問題。我添加了

需要會話 pam_env.so

在 /etc/pam.d/common-session 末尾,現在 ~/.pam_environment 被讀取。在另一個沒有加密主目錄的系統(也是 10.04)上,不需要解決這個問題。也許在我的情況下,系統會在解密之前嘗試讀取 ~/.pam_environment 。

答案3

GDK_NATIVE_WINDOWS 和 DEFAULT=true 之間有一個空格。這與您連結的範例不同。

嘗試:

GDK_NATIVE_WINDOWS=true

答案4

在 Debian bullseye(可能要追溯到 2013 年左右)和 ubuntu 至少要追溯到 14.04(在 docker 容器中測試)中,每個 user_endir 不會讀取 ~/.pam_environment,pam_env 預設為關閉(請參閱 參考資料man 7 pam_env) 。如果您想重新啟用它:

echo 'session optional pam_env.so user_readenv=1' >> /etc/pam.d/common-session

也就是說,為互動式會話(CLI 或圖形登錄,如 su)設定 pam_env,user_reader 為 1。

我相信它在上游被禁用是由於:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4708Linux-PAM(又稱 pam)1.1.2 及更早版本中的 pam_env 模組讀取用戶主目錄中的 .pam_environment 文件,這可能允許本地用戶透過執行依賴 pam_env PAM 的程式來運行具有意外環境的程序查看。

我覺得上面的描述不太清楚。如果這意味著 ~/.pam_environment 允許在使用者不知道的情況下更改程式環境,則主資料夾中的任何選項都是相似的(即 ~/.profile、~/.zprofile)。 Mind ~/.profile 被告知要由圖形登入管理員讀取...那麼為什麼要刪除 ~/.pam_environment 並保留 ~/.profile 呢?

正確的方法是能夠在 /etc/security/pam_env.conf 中為每個使用者設定環境變數。但尚未向上游請求。或任何只有管理員權限才能編輯的選項。

相關內容