KDEが認識できるようにenv変数を設定するにはどうすればよいですか?
上記の2つの質問とは異なり、GNOMEでこれを行う方法を知りたいです。さらに良いことに、ウィンドウマネージャーから独立したメソッドがあります。シェル/ターミナルについては、通常編集します~/.bashrc
。使用するウィンドウマネージャーに関係なく、すべてのXアプリケーションで環境変数を使用できるように、どこにexportステートメントを配置できますか?
KDEが認識できるようにenv変数を設定するにはどうすればよいですか?
上記の2つの質問とは異なり、GNOMEでこれを行う方法を知りたいです。さらに良いことに、ウィンドウマネージャーから独立したメソッドがあります。シェル/ターミナルについては、通常編集します~/.bashrc
。使用するウィンドウマネージャーに関係なく、すべてのXアプリケーションで環境変数を使用できるように、どこにexportステートメントを配置できますか?
回答:
pam_envの PAMモジュールレットを使用すると、のいずれかでそれらを設定するのです/etc/environment
かに~/.pam_environment
すべてのユーザー(システム全体)のためにそれをしたいかに応じて、またはちょうどあなたのユーザー(セッション全体)。
システム全体の環境変数
システム全体(特定のユーザーではなく)に影響する環境変数設定は、システムまたはデスクトップセッションの読み込み時に実行される多くのシステムレベルスクリプトのいずれにも配置しないでください。ただし、
/etc/environment
-このファイルは、システム全体の環境変数設定専用です。スクリプトファイルではなく、1行に1つずつ割り当て式で構成されています。具体的には、このファイルにはシステム全体のロケールとパス設定が保存されます。
セッション全体の環境変数
特定のユーザー(システム全体ではなく)のみに影響する環境変数設定は、次のように設定する必要があります。
~/.pam_environment
-このファイルは、特にユーザーの環境を設定するためのものです。スクリプトファイルではなく、1行に1つずつ割り当て式で構成されています。注:
.pam_environment
変数を初期化するには、使用するには再ログインが必要です。ターミナルだけを再起動するだけでは、変数を使用できません。
環境変数に関するUbuntuのウィキで詳細を参照してください。
~/.xsession
Xアプリケーションの環境変数をロードします。unix.stackexchange.com/questions/47359/what-is-xsession-for
user_envfile=filename
。pam_envでの私の問題は、PAMアプリケーションによってはHOME変数が利用できない場合があることです。使用が絶対変数のみに制限されます。
/etc/X11/Xsession.d/
...またはそのディレクトリの行に沿って、Linux(?)に応じて。ここで少し書いた。
コンセプトは、ログイン後、ディスプレイマネージャが「Xsession」を開始し、そのディレクトリ内のすべてをアルファベット順にソース(!)することです。PATHを変更するスクリプトを追加するだけです。Xsessionは完全にDEになり、通常、すべてのプロセスはそのXsessionの子であるため、PATH環境を継承します。
/etc/X11/Xsession.d/40x11-common_xsessionrc
グローバル環境変数のソース。このスクリプトは、ファイルが存在する場合、$ HOME / .xsessionrcにあるものをソースします。これにより、ユーザーはロケール情報など、Xセッションのグローバル環境変数を設定できます。
プロセスは、それを開始する親プロセスから環境を継承します。子の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
ps
GUIログインの親プロセスを決定するために使用できますか?
~/.pam_environment
ソリューションの問題は、ディストリビューションで設定されていない限り、デフォルトでpam_envモジュールが読み取らないことです。Fedora 20では、たとえば読みません。