再起動せずに /etc/environment をリロードするには?
/etc/environment
は 公式に システム全体の環境変数のための正しい場所です。
興味深いことに、グーグルはここでは何の助けにもなりません。
/etc/environment
は 公式に システム全体の環境変数のための正しい場所です。
興味深いことに、グーグルはここでは何の助けにもなりません。
一つ勘違いしているのは、/etc/environment
は再起動しないとリロードできないということです。これは正しくありません。ファイルが読み込まれるのはログイン時だけで、PAM スタックが起動されているときだけです(特に pam_env.so
はファイルを読み込んでいます)。他のすべての “ソリューション "2 は、単一のシェルプロセスにのみ環境を適用しますが、新しいターミナルwindows.1
を含む GUI を通して起動するものには適用されません。しかし、ファイルはどちらも引用符を使用していないので、それはまだ貧しい方法のままです。しかし、これはうまく動作するはずです:
while read -r env; do export "$env"; done
1 GNOME セッションマネージャは、それ自身の環境を変更する方法を提供していますが、export
の段階でのみ:
$ gdbus call -e -d org.gnome.SessionManager \
-o /org/gnome/SessionManager \
-m org.gnome.SessionManager.Setenv \
"FOO" "bar"
Error: GDBus.Error:org.gnome.SessionManager.NotInInitialization: Setenv
interface is only available during the Initialization phase
2 set -a
は解決策ではありませんが、時々使用することができます。セッションマネージャ(例: set +a
)、ウィンドウマネージャ(例: Initialization
または gdb
)、タスクバー/パネル(例: gnome-session
)、そして一般的に何かを実行している可能性がある他のすべてのプロセスにそれをアタッチしなければなりません。これらの各プロセスに対して、gnome-shell
を PID でアタッチし、openbox
を使って xfce4-panel
関数を呼び出し、gdb
を使ってデタッチする必要があります:
$ sudo gdb -p $(pidof gnome-session)
GNU gdb (GDB) 7.7.1
[...]
Attaching to process 718
[...]
0x00007fc2cefed81d in poll () from /usr/lib/libc.so.6
(gdb) p putenv("FOO=bar")
$1 = 0
(gdb) p putenv("BAZ=qux")
$2 = 0
(gdb) q
A debugging session is active.
Quit anyway? (y or n) y
Detaching from program: /usr/bin/gnome-session, process 718
デバッガはプロセスを一時停止することに注意してください。
_それに加えて、dbus-daemonによって使用される環境を更新する必要があります:
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
古いシステムのために:
$ gdbus call -e -d org.freedesktop.DBus \
-o /org/freedesktop/DBus \
-m org.freedesktop.DBus.UpdateActivationEnvironment \
"{'FOO': 'bar', 'BAZ': 'qux'}"
()