Eine Sache, bei der Sie sich irren, ist, /etc/environment
dass 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 export
Befehlen mit set -a
und 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 Initialization
Phase:
$ 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-shell
oder 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 gdb
mit der PID herstellen, die putenv()
Funktion mit aufrufen p
und 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
.