Une chose que vous vous trompez est qu’il /etc/environment
faut un redémarrage pour recharger. Ceci est une erreur. La seule fois que 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.
La déconnexion et le retour impliqueraient les modifications. En fait, vous devez 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 shell unique, mais pas à tout ce que vous lancez via l'interface graphique, y compris les nouvelles fenêtres de terminal. 1
Si cela vous export
convient, le manque de commandes peut être compensé avec set -a
et set +a
. Cependant, cela reste un mauvais moyen, car le fichier n’utilise pas non plus les guillemets. Mais cela devrait bien fonctionner:
while read -r env; do export "$env"; done
1 GNOME Session Manager permet de modifier son propre environnement, mais uniquement pendant la Initialization
phase suivante:
$ 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 en cours d'exécution de votre gestionnaire de session (par exemple gnome-session
), de votre gestionnaire de fenêtres (par exemple gnome-shell
ou openbox
), de votre barre des tâches / de votre panneau éventuel (par exemple xfce4-panel
) et généralement de tout autre élément susceptible d'exécuter des commandes. Pour chacun de ces processus, vous devez vous y attacher gdb
par PID, appeler la putenv()
fonction à l'aide de p
, puis détacher à l'aide de 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 en pause le processus. Par conséquent, vous devez vous attacher aux gestionnaires de fenêtres de composition uniquement à partir d'un autre serveur virtuel (console virtuelle) ou via 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'}"
()
for line in $( cat /etc/environment ) ; do export $line ; done
si le format de fichier estkey=value
.