Une chose sur laquelle vous vous trompez est que /etc/environment
nécessite un redémarrage pour se recharger. Ceci est incorrect. Le seul moment où le fichier est lu est lors de la connexion lorsque la pile PAM est activée - en particulier pam_env.so
qui lit le fichier.
Se déconnecter et se reconnecter appliquerait les changements - et en fait vous doit faites ceci si vous voulez que tous vos processus reçoivent le nouvel environnement . Toutes les autres "solutions" 2 n'appliquera l'environnement qu'au seul processus Shell, mais pas à tout ce que vous lancez via l'interface graphique, y compris les nouveaux terminaux Windows. 1
Si vous êtes d'accord avec ça, cependant - le manque de export
Les commandes peuvent être compensées par set -a
y set +a
. Cependant, cela reste une mauvaise méthode, car le fichier n'utilise pas non plus les guillemets. Mais cela devrait fonctionner correctement :
while read -r env; do export "$env"; done
1 Le gestionnaire de session GNOME offre un moyen de modifier son propre environnement, mais uniquement au cours de l'exécution de l'opération. 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
n'est pas une solution, mais peut parfois être utilisée. Vous devez l'attacher aux processus en cours d'exécution de votre gestionnaire de session (par ex. gnome-session
), votre gestionnaire de fenêtres (par ex. gnome-shell
o openbox
), votre barre de tâches/panneau s'il y en a un (par ex. xfce4-panel
), et généralement tout ce qui pourrait faire fonctionner des trucs. Pour chacun de ces processus, vous devez attacher gdb
par PID, invoque le putenv()
en utilisant p
puis détachez-les 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 à partir d'un autre tty (console virtuelle) ou par SSH, sinon l'écran se figerait.
En plus de cela, vous devez également mettre à jour l'environnement utilisé par dbus-daemon :
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
Pour les systèmes plus anciens :
$ gdbus call -e -d org.freedesktop.DBus \
-o /org/freedesktop/DBus \
-m org.freedesktop.DBus.UpdateActivationEnvironment \
"{'FOO': 'bar', 'BAZ': 'qux'}"
()