Gnome

在 Wayland 上為 gnome 設置環境變數,在虛擬終端(或 ssh)上設置 bash

  • November 9, 2017

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只設置環境變數,如PATHLC_MESSAGES
  • .bashrc為應用程序(如lessgrep.

效果(在 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/並在該文件中放置要導出的變數。但是,這意味著將為所有使用者導出變數,所以我最終做的是:

假設我們有兩個使用者johnsally。為它們中的每一個創建一個文件/usr/share/gdm/env.d/,讓我們稱它們為startup_john.envstartup_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

我同意,這不是最優雅的解決方案,但據我測試,它似乎可以完成工作。

引用自:https://unix.stackexchange.com/questions/317282