Une chose sur laquelle vous vous trompez est que /etc/environment
nécessite un redémarrage pour se recharger. C'est faux. La seule fois où le fichier est lu est à la connexion, lorsque la pile PAM est activée - plus précisément pam_env.so
, qui lit le fichier.
La connexion et la déconnexion appliqueraient les changements - et en fait vous doit le faire si vous voulez que tous vos processus reçoivent le nouvel environnement. Toutes les autres “solutions "2 n'appliqueront l'environnement qu'au processus single shell, mais pas à tout ce que vous lancez via l'interface graphique, y compris les nouvelles fenêtres de terminal.1
Si cela vous convient, cependant - l'absence de commandes export
peut être compensée avec set -a
et set +a
. Cependant, cela reste un mauvais moyen, car le fichier n'utilise pas non plus de citation. Mais cela devrait bien fonctionner :
while read -r env; do export "$env"; done
1 Le gestionnaire de session GNOME permet de modifier son propre environnement, mais seulement pendant la phase Initialization
:
$ 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
n'est pas une solution, mais peut être utilisé parfois. Vous devez le joindre aux processus d'exécution de votre gestionnaire de session (par exemple gnome-session
), de votre gestionnaire de fenêtre (par exemple gnome-shell
ou openbox
), de votre barre de tâches/panneau le cas échéant (par exemple xfce4-panel
), et généralement de tout ce qui peut faire fonctionner des choses. Pour chacun de ces processus, vous devez y attacher gdb
par PID, invoquer la fonction putenv()
en utilisant p
, puis la détacher en utilisant 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
Notez que le débogueur met le processus en pause, vous devez donc vous attacher aux gestionnaires de fenêtres de composition uniquement depuis un autre tty (console virtuelle) ou par SSH, sinon l'écran se figerait.
En plus de cela, vous devriez également mettre à jour l'environnement utilisé par dbus-daemon :
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
Pour les anciens systèmes :
$ gdbus call -e -d org.freedesktop.DBus \
-o /org/freedesktop/DBus \
-m org.freedesktop.DBus.UpdateActivationEnvironment \
"{'FOO': 'bar', 'BAZ': 'qux'}"
()