Gnome 3.22はデフォルトでウェイランドを使用します。ウェイランドのGnomeは~/.profile
(または~/.bash_profile
または/etc/profile
)を読み取りません。 https://bugzilla.gnome.org/show_bug.cgi?id=73666 を参照してください。
初期化ファイルを次のように設定しています。
.bash_profile
は、ソース.profile
および.bashrc
のみを実行します.profile
は、PATH
やLC_MESSAGES
のような環境変数のみを設定します.bashrc
は、less
やgrep
などのアプリケーションに対して、bash固有の設定とエイリアス、および環境変数を設定します。効果(ウェイランドの前)は次のとおりです。
.profile
が読み取られ、PATH
やLC_MESSAGES
などの環境変数が設定されました。端末エミュレーター内でbashを開くと、.bashrc
が読み取られました。.bash_profile
が読み取られ、.profile
と.bashrc
が読み取られます。すべての場合において、.profile
および.bashrc
が読み取られ、環境がセットアップされました。
そのため、gnome 3.22はwaylandを使用し、waylandは.profile
を読み取りません。上記のような効果が得られるように、初期化ファイルを設定するにはどうすればよいですか?
特定のファイル(.profile
など)が読み取られることを要求しないことに注意してください。私が望むのは、自分の環境を賢明な方法で設定してもらうことです。つまり、bash固有の設定をbash初期化ファイルに、その他の設定を他の初期化ファイルに保持したいということです。また、設定を別のファイルにコピーしないようにします。
Arch Linuxを使用しています。すべてのディストリビューションの回答を歓迎します。回避策を提案するときは、副作用とその長所と短所も説明してください。
2017年11月の更新:私が理解している限り、gnome開発者は、ログイン後にシェルの構成ファイル(.profile
および.bash_profile
)がログイン後に提供されることを期待していることを認めています。テキストまたはグラフィカルログインに関係なく。上記で概説した私のユースケースは再び機能します。
それでも、gnome開発者はログインシェルの開始から離れたいと考えています。 systemdからenvironmentdを使用する方向に進んでいるようです:
https://in.waw.pl/~zbyszek/blog/environmentd.html
すべてのログイン方法が環境に適応するまでには時間がかかるようです。
Systemdバージョン233(2017年3月)は、~/.config/environment.d/*.conf
に環境変数を設定するためのサポートを追加しました。 the environment.d
man page および この予備的なPR および この最後のPR の機能につながった議論を参照してください。
これは、まったく同じ問題に使用する回避策です。
~/.profile
をソースとするスクリプトを作成し、そのスクリプトを実行可能にします。それを/path/to/startup.sh
と呼びましょう。次のようになります。
#!/bin/bash
. ~/.profile
スクリプトを実行するデスクトップアプリケーションを作成します。これを行うには、.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
ファイルの詳細については、 ここ を参照してください。
ログアウト。再度ログインします。これで、アプリケーションメニューでアプリケーションを検索できるようになります。
このアプリケーションをスタートアップアプリケーションとして設定します。これを行うには、Gnome Tweak Toolを使用して、アプリケーションを[スタートアップアプリケーション]タブのリストに追加しました。
以上です!これで、ログインするたびに古い機能を元に戻すことができます。また、ファイル構造はそのまま保持されるため、Waylandのバグが修正されたときに、アプリケーションをスタートアップアプリケーションリストから削除し、2つのファイルを削除するだけです。そして、すべてが正常に戻っています。
@Gussがコメントで指摘しているように、startup.sh
は独自のシェルで実行されるため、この回避策は環境変数をエクスポートしません。したがって、これらの問題に対する別の回避策が必要です。
GNOMEドキュメント を読むと、いくつかの代替案があることがわかります。私が作業できる唯一の方法は、/usr/share/gdm/env.d/
にファイルを作成し、そのファイルにエクスポートする変数を配置することでした。ただし、これは変数がすべてのユーザーに対してエクスポートされることを意味するため、最終的には次のようになります。
johnとsallyという2人のユーザーがいるとします。それぞれが/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
最もエレガントな解決策ではありませんが、私は同意しますが、私がテストした限りでは、それは仕事を成し遂げたようです。