Eine Sache, bei der Sie sich irren, ist, /etc/environmentdass zum Neuladen ein Neustart erforderlich ist. Das ist falsch. Das einzige Mal, dass die Datei gelesen wird, ist die Anmeldung , wenn der PAM-Stapel aktiviert ist - speziell pam_env.so, der die Datei liest.
Das Abmelden und erneutes Anmelden würde die Änderungen übernehmen - und tatsächlich müssen Sie dies tun, wenn alle Prozesse die neue Umgebung erhalten sollen . Bei allen anderen "Lösungen" 2 wird die Umgebung nur auf den Single-Shell-Prozess angewendet, nicht jedoch auf alles, was Sie über die GUI starten, einschließlich neuer Terminalfenster. 1
Wenn Sie damit einverstanden sind, können Sie das Fehlen von exportBefehlen mit set -aund ausgleichen set +a. Es bleibt jedoch immer noch ein schlechter Weg, da die Datei auch keine Anführungszeichen verwendet. Aber das sollte gut funktionieren:
while read -r env; do export "$env"; done
1 GNOME Session Manager bietet eine Möglichkeit, die eigene Umgebung zu ändern, jedoch nur während der InitializationPhase:
$ 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 gdb ist keine Lösung, kann aber manchmal verwendet werden. Sie müssen es an die laufenden Prozesse Ihres Sitzungsmanagers (z. B. gnome-session), Ihres Fenstermanagers (z. B. gnome-shelloder openbox), Ihrer Taskleiste / Ihres Panels (z. B. xfce4-panel) und generell an alles andere anhängen, das möglicherweise Dinge ausführen würde. Für jeden dieser Prozesse müssen Sie eine Verbindung gdbmit der PID herstellen, die putenv()Funktion mit aufrufen pund dann die Verbindung trennen mit q:
$ 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
Beachten Sie, dass der Debugger den Prozess anhält. Daher müssen Sie Compositing-Fenstermanagern nur von einer anderen Tty (virtuellen Konsole) oder über SSH aus eine Verbindung herstellen, da der Bildschirm sonst einfrieren würde.
Außerdem sollten Sie die von dbus-daemon verwendete Umgebung aktualisieren:
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
Für ältere Systeme:
$ gdbus call -e -d org.freedesktop.DBus \
-o /org/freedesktop/DBus \
-m org.freedesktop.DBus.UpdateActivationEnvironment \
"{'FOO': 'bar', 'BAZ': 'qux'}"
()
for line in $( cat /etc/environment ) ; do export $line ; done, wenn das Dateiformat istkey=value.