ウェイランドのgnomeと仮想端末(またはssh)のbashの環境変数を設定します


13

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

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

  • .bash_profileソース以外は何もせず.profile.bashrc
  • .profilePATHおよびのような環境変数のみを設定しますLC_MESSAGES
  • .bashrclessやなどのアプリケーションのbash固有の設定とエイリアス、環境変数を設定しますgrep

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

  • 私がグラフィカルにログインしたときに.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_profilebashの場合)がログイン後に提供されることを人々が期待していることを認めています。テキストまたはグラフィカルログインに関係なく。そのため、上記の私のユースケースは再び機能します。

まだgnome開発者はログインシェルの起動を避けたいと考えています。彼らが行っている方向は、systemdから環境化されたものを使用することです。

https://in.waw.pl/~zbyszek/blog/environmentd.html

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

回答:


7

Systemdバージョン233(2017年3月)では、環境変数の設定のサポートが追加されました~/.config/environment.d/*.confこの暫定的なPRこの最終的なPRの機能につながっenvironment.dmanページと議論を参照しください


これは非常に良い解決策のようです。簡単なテストを行いました。gnome waylandでは機能しますが、仮想端末では機能しません。sshでも動作しないと思います。私はマニュアルページを読みましたが、議論をざっと読みました。これが仮想端末とsshでも機能するかどうかはわかりますか?
レスマナ

1
in.waw.pl/~zbyszek/blog/environmentd.htmlのような状況の素晴らしい要約です。最後の段落では、仮想端末(およびssh?)のサポートが「可能性がある」と述べています。少なくとも私がそれを正しく理解していれば。
レスマナ

おもしろいことに、GDMが機能するためにはGDMに特別なサポートを追加する必要があることを知りませんでした。すべてのタイプのセッションが単一のユーザーサービスプロセスの子であり、これらのenv変数を既に解析していて、GDM / sshdがそれについて何も知る必要なく、すべて動作するような配置がありますか?
ジャックオコナー

1
これは、GDM / Waylandを搭載したFedora 30では機能しません。
ジョンレイトン

「ソリューション」では、合理的なユースケースを見逃しています。Aの場合、Bを設定します。一例として、XDG_SESSION_TYPE = waylandの場合、QT_QPA_PLATFORM = waylandを設定します。
vk5tu

5

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

ステップ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

最もエレガントなソリューションではありませんが、私は同意しますが、私がテストした限りでは、仕事は完了したようです。


私はこれをテストしていませんが、それはstartup.sh独自のシェルで実行されており、環境変数を親の実行コンテキストにエクスポートしないため、動作しません。例として、シェルで次のコードを実行してみてくださいecho "a is $a"; (export a="B"); echo "a is $a" 。@Tudorによると、2番目のエコーからの出力はになりa is B、コードを実行すると表示されますが、これは実際には発生しません。
ガス

こんにちは、@ Guss、あなたは正しいです。私はそれに気づきませんでしたが、あなたがそれを指摘した今、環境変数の回避策も見つけました。それに応じて回答を更新します。
チューダーヴィアン

1
どうぞ、あなたが思いついたことを見てみたいです。また、「Waylandのバグが修正されたとき」と言うと楽観的であると思います-これはWaylandのバグではなくGNOMEのバグであり、GNOMEの人々はこれをバグとは見なしません-文書化された動作:wiki .gnome.org / Initiatives / Wayland / SessionStart
Guss
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.