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


16

KDEが認識できるようにenv変数を設定するにはどうすればよいですか?

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

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

回答:


12

pam_envの PAMモジュールレットを使用すると、のいずれかでそれらを設定するのです/etc/environmentかに~/.pam_environmentすべてのユーザー(システム全体)のためにそれをしたいかに応じて、またはちょうどあなたのユーザー(セッション全体)。

システム全体の環境変数

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

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

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

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

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

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

環境変数に関するUbuntuのウィキで詳細を参照してください。


2
~/.pam_environmentソリューションの問題は、ディストリビューションで設定されていない限り、デフォルトでpam_envモジュールが読み取らないことです。Fedora 20では、たとえば読みません。
クリスチャン・シウピトゥ

@CristianCiupituは正しい。~/.xsessionXアプリケーションの環境変数をロードします。unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek

@CristianCiupitu:pam_envに導かれたあなたのコメントに感謝します。Fedora 24のpamファイルを更新して、ユーザー環境を有効にしました。これで、私のWaylandセッションにはすべてカスタムPATHが再び追加されました。
ザンリンクス

@CristianCiupituは本当ですか?ドキュメントlinux-pam.org/Linux-PAM-html/sag-pam_env.htmlは、特に指定がない限り、〜/ .pam_environmentがデフォルトの読み取りファイルであることを意味します。の行を参照してくださいuser_envfile=filename。pam_envでの私の問題は、PAMアプリケーションによってはHOME変数が利用できない場合があることです。使用が絶対変数のみに制限されます。
CMCDragonkai

2
@ CMCDragonkai、Fedoraのpam_env(8)のマニュアルページでは、「PAM環境でユーザーが指定した環境変数は、システム管理者の同意なしにスタック内の後続モジュールの動作に影響を与える可能性があるため、デフォルトではオフですと言われていました。そのため、アップストリームPAMモジュールにはデフォルト設定がいくつかありますが、一部のディストリビューションはそれらを上書きします。
クリスチャン・シウピトゥ

1

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

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


$ HOMEディレクトリに設定できるものはありますか?.Xsessionが好きですか?
Code-Guru

Xession(5)によると: /etc/X11/Xsession.d/40x11-common_xsessionrc グローバル環境変数のソース。このスクリプトは、ファイルが存在する場合、$ HOME / .xsessionrcにあるものをソースします。これにより、ユーザーはロケール情報など、Xセッションのグローバル環境変数を設定できます。
バナンイン

1

プロセスは、それを開始する親プロセスから環境を継承します。子の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(の子?)によって開始されました。1497は、1481によって開始され、PID 1によって開始され、先祖プロセス0によって開始されました。

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

PATH=${PATH}:/usr/local/bin

psGUIログインの親プロセスを決定するために使用できますか?
コード・教祖
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.