web-dev-qa-db-ja.com

Xアプリがアクセスできるように、PATHまたは他の環境変数を設定するにはどうすればよいですか?

KDEがそれらを認識するように環境変数を設定するにはどうすればよいですか?

シェル以外の環境(KDE)でパスをどのように設定しますか?

上記の2つの質問とは異なり、GNOMEでこれを行う方法を知りたいです。さらに良いことに、ウィンドウマネージャから独立したメソッドがあります。シェル/ターミナルの場合、通常は~/.bashrcを編集します。使用するウィンドウマネージャーに関係なく、すべてのXアプリケーションで環境変数を使用できるように、どこにエクスポートステートメントを配置できますか?

16
Code-Guru

pam_env PAMモジュールでは、すべてに適用するかどうかに応じて、/etc/environmentまたは~/.pam_environmentのいずれかに設定しますユーザー(システム全体)、またはユーザーのみ(セッション全体)。

システム全体の環境変数

システム全体(特定のユーザーだけではない)に影響を与える環境変数の設定は、システムまたはデスクトップセッションが読み込まれたときに実行される多くのシステムレベルのスクリプトには配置しないでください。

/etc/environment-このファイルは、特にシステム全体の環境変数設定用です。これはスクリプトファイルではなく、1行に1つずつ割り当て式で構成されています。具体的には、このファイルにはシステム全体のロケールとパスの設定が格納されます。

セッション全体の環境変数

特定のユーザーのみ(システム全体ではなく)に影響する環境変数設定は、次のように設定する必要があります。

~/.pam_environment-このファイルは、特にユーザーの環境を設定するためのものです。これはスクリプトファイルではなく、1行に1つずつ割り当て式で構成されています。

注:.pam_environmentを使用すると、変数を初期化するために再ログインが必要になります。ターミナルを再起動するだけでは、変数を使用できません。

詳細は buntuの環境変数に関するwiki を参照してください。

12
bahamat

/etc/X11/Xsession.d/ ... Linux(?)に応じて、またはそのディレクトリの行に沿って。私はそれに少し書きました ここ

コンセプトは、ログイン後、ディスプレイマネージャが「Xsession」を開始し、そのディレクトリ内のすべてをアルファベット順にソース(!)することです。 PATHを変更するスクリプトを追加するだけです。 Xsessionは最終的にはDEであり、通常すべてのプロセスはそのXsessionの子であるため、PATH環境を継承します。

1
Bananguin

プロセスは、それを開始した親プロセスから環境を継承します。子のPATHまたはその他の環境値を変更するには、変数を親の値に設定し、シェルにいる場合は変数をエクスポートして、子プロセスを開始します。子は、開始時に独自の環境を変更するために1つ以上の初期化ファイルを読み取ることもできます。

したがって、答えを得るにはさらに2つの質問があります。

PATHまたは環境の変更によって影響を受けるプロセスにつながる親/子継承ツリーは何ですか?

そのツリー内の関連するプロセスによって、どの初期化ファイルが使用/読み取り/ソースされますか?

次に、ps(1)の出力の一部を示し、継承ツリーの意味を示します。

# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf 

UID   PID  PPID USER COMMAND
  0     1     0 root /usr/lib/systemd/systemd
  0  1481     1 root /usr/sbin/gdm-binary -nodaemon
  0  1497  1481 root  \_ /usr/libexec/gdm-simple-slave ...
  0  1504  1497 root      \_ /usr/bin/Xorg :0 ...
  0  1855  1497 root      \_ gdm-session-worker ...

\ _グラフィックシーケンスとPIP/PPID番号(プロセスIDと親PID)に注意してください。 PID 1855は、(その子か?)1497によって開始されました。これは、祖先プロセス0によって開始されたPID 1によって開始された1481によって開始されました。

影響を与えたいプロセスに対して同様の継承トレースを実行し、関連する初期化ファイルを見つけ、そのツリーのどこかにあるPATHに変更を加えます。

PATH=${PATH}:/usr/local/bin
1
D McKeon