web-dev-qa-db-ja.com

waylandでgnomeの環境変数を設定し、仮想端末(またはssh)でbashを設定する

Gnome 3.22はデフォルトでウェイランドを使用します。ウェイランドのGnomeは~/.profile(または~/.bash_profileまたは/etc/profile)を読み取りません。 https://bugzilla.gnome.org/show_bug.cgi?id=73666 を参照してください。

初期化ファイルを次のように設定しています。

  • .bash_profileは、ソース.profileおよび.bashrcのみを実行します
  • .profileは、PATHLC_MESSAGESのような環境変数のみを設定します
  • .bashrcは、lessgrepなどのアプリケーションに対して、bash固有の設定とエイリアス、および環境変数を設定します。

効果(ウェイランドの前)は次のとおりです。

  • グラフィカルにログインすると、.profileが読み取られ、PATHLC_MESSAGESなどの環境変数が設定されました。端末エミュレーター内でbashを開くと、.bashrcが読み取られました。
  • 仮想端末でログインすると、.bash_profileが読み取られ、.profile.bashrcが読み取られます。
  • sshを使用してログインしたときの動作は、仮想端末に似ています。

すべての場合において、.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

すべてのログイン方法が環境に適応するまでには時間がかかるようです。

13
lesmana

Systemdバージョン233(2017年3月)は、~/.config/environment.d/*.confに環境変数を設定するためのサポートを追加しました。 the environment.d man page および この予備的なPR および この最後のPR の機能につながった議論を参照してください。

7
Jack O'Connor

これは、まったく同じ問題に使用する回避策です。

ステップ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を使用して、アプリケーションを[スタートアップアプリケーション]タブのリストに追加しました。

以上です!これで、ログインするたびに古い機能を元に戻すことができます。また、ファイル構造はそのまま保持されるため、Waylandのバグが修正されたときに、アプリケーションをスタートアップアプリケーションリストから削除し、2つのファイルを削除するだけです。そして、すべてが正常に戻っています。

後で編集

@Gussがコメントで指摘しているように、startup.shは独自のシェルで実行されるため、この回避策は環境変数をエクスポートしません。したがって、これらの問題に対する別の回避策が必要です。

GNOMEドキュメント を読むと、いくつかの代替案があることがわかります。私が作業できる唯一の方法は、/usr/share/gdm/env.d/にファイルを作成し、そのファイルにエクスポートする変数を配置することでした。ただし、これは変数がすべてのユーザーに対してエクスポートされることを意味するため、最終的には次のようになります。

johnsallyという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

最もエレガントな解決策ではありませんが、私は同意しますが、私がテストした限りでは、それは仕事を成し遂げたようです。

5
Tudor Vișan