在 Wayland 上為 gnome 設置環境變數,在虛擬終端(或 ssh)上設置 bash
Gnome 3.22 預設使用 Wayland。Wayland 上的 Gnome 不讀取
~/.profile
(或~/.bash_profile
或/etc/profile
)。請參閱https://bugzilla.gnome.org/show_bug.cgi?id=736660。我的初始化文件設置如下:
.bash_profile
除了 source.profile
和.bashrc
.profile
只設置環境變數,如PATH
和LC_MESSAGES
.bashrc
為應用程序(如less
和grep
.效果(在 Wayland 之前)如下:
- 當我以圖形方式登錄時
.profile
,讀取並設置了環境PATH
變數LC_MESSAGES
。當我在終端模擬器中打開 bash 時,它.bashrc
被讀取了。- 當我在虛擬終端下登錄時
.bash_profile
,會讀取然後讀取.profile
和.bashrc
.- 當我使用 ssh 登錄時,行為類似於虛擬終端。
在所有情況下
.profile
,.bashrc
都已閱讀並設置了我的環境。所以現在 gnome 3.22 使用 wayland 並且 wayland 不讀取
.profile
。如何設置我的初始化文件,以便再次獲得上述效果?請注意,我不堅持
.profile
讀取某些文件(如 )。我想要的是以合理的方式設置我的環境。這意味著我想將 bash 特定設置保留到 bash 初始化文件和其他設置到其他初始化文件。另外我不想將設置複製到不同的文件中。我使用拱 linux。歡迎所有發行版的答案。在建議解決方法時,還請描述副作用以及優缺點。
2017 年 11 月更新:據我了解,gnome 開發人員已經承認人們希望他們的登錄 shell 配置文件(
.profile
如果.bash_profile
是 bash)是在登錄後獲取的。無論是文本登錄還是圖形登錄。所以我上面概述的案例再次起作用。gnome 開發人員仍然希望擺脫啟動登錄 shell。看來他們的方向是使用 systemd 的環境:
https://in.waw.pl/~zbyszek/blog/environmentd.html
似乎所有登錄方法都適應環境需要一段時間。
Systemd 版本 233(2017 年 3 月)增加了對在
~/.config/environment.d/*.conf
. 請參閱手冊頁和導致此初步 PR和最後一個特性的environment.d
討論。
這是我用於完全相同問題的解決方法:
第1步
創建一個原始碼
~/.profile
並使該腳本可執行的腳本。讓我們稱之為/path/to/startup.sh
。它可能看起來像這樣:#!/bin/bash . ~/.profile
第2步
創建一個桌面應用程序來執行腳本。為此,您需要創建一個
.desktop
文件並將其放入~/.local/share/applications
(或者/usr/share/applications
如果您希望它適用於所有使用者)。讓我們稱之為~/.local/share/applications/startup.desktop
。它可能看起來像這樣:[Desktop Entry] Name=Startup Keywords=startup Exec=/path/to/startup.sh Type=Application
有關
.desktop
文件的更多資訊,請參見此處。第 3 步
登出。重新登錄。您現在應該能夠在應用程序菜單中搜尋您的應用程序。
第4步
將此應用程序設置為啟動應用程序。為此,我使用了 Gnome Tweak Tool 並將我的應用程序添加到 Startup Applications 選項卡的列表中。
就是這樣!現在,您應該在每次登錄時恢復舊功能。它還保留了完整的文件結構,因此,當 Wayland 中的錯誤得到修復時,您只需從啟動應用程序列表中刪除應用程序,刪除這兩個文件一切都恢復正常。
稍後編輯
正如@Guss 在評論中指出的那樣,這種解決方法不會導出環境變數,因為
startup.sh
它是在自己的 shell 中執行的。所以我們需要另一種解決方法。從GNOME 文件中閱讀,您可以看到有一些替代方案。我唯一能做的就是在其中創建一個文件,
/usr/share/gdm/env.d/
並在該文件中放置要導出的變數。但是,這意味著將為所有使用者導出變數,所以我最終做的是:假設我們有兩個使用者john和sally。為它們中的每一個創建一個文件
/usr/share/gdm/env.d/
,讓我們稱它們為startup_john.env
和startup_sally.env
。在這些文件中放置啟動新 GNOME 會話時要導出的環境變數。$ cat startup_john.env VAR=1 $ cat startup_sally.env VAR=2
此時的問題是將為兩個使用者載入兩個文件。為了解決這個問題,我們設置了每個文件的權限,這樣只有它的所有者才能讀取它的內容。
$ ls -l startup_john.env -rw-r-----. 1 john john 4 Dec 27 15:17 startup_john.env $ ls -l startup_sally.env -rw-r-----. 1 sally sally 4 Dec 27 15:16 startup_sally.env
我同意,這不是最優雅的解決方案,但據我測試,它似乎可以完成工作。