Le module pam_env PAM vous permet de les définir soit dans, /etc/environment
soit dans ~/.pam_environment
, selon que vous le souhaitez pour tous les utilisateurs (à l'échelle du système), ou seulement votre utilisateur (à l'échelle de la session).
Variables d'environnement à l'échelle du système
Les paramètres des variables d'environnement qui affectent le système dans son ensemble (plutôt qu'un simple utilisateur en particulier) ne doivent être placés dans aucun des nombreux scripts de niveau système exécutés lorsque le système ou la session de bureau sont chargés, mais dans
/etc/environment
- Ce fichier est spécifiquement destiné aux paramètres de variable d'environnement à l'échelle du système. Ce n'est pas un fichier de script, mais plutôt des expressions d'affectation, une par ligne. Plus précisément, ce fichier stocke les paramètres régionaux et de chemin d'accès à l'échelle du système.
Variables d'environnement à l'échelle de la session
Les paramètres des variables d'environnement qui devraient affecter uniquement un utilisateur particulier (plutôt que le système dans son ensemble) doivent être définis dans:
~/.pam_environment
- Ce fichier est spécifiquement destiné à définir l'environnement d'un utilisateur. Ce n'est pas un fichier de script, mais plutôt des expressions d'affectation, une par ligne.
Remarque: L'utilisation .pam_environment
nécessite une reconnexion pour initialiser les variables. Redémarrer uniquement le terminal n'est pas suffisant pour pouvoir utiliser les variables.
Voir plus sur le wiki d'Ubuntu sur les variables d'environnement .
~/.pam_environment
solution est que par défaut le module pam_env ne le lit pas, à moins que la distribution ne le configure autrement. Sur Fedora 20, ce n'est pas lu par exemple.~/.xsession
chargera les variables d'environnement pour les applications X. Voir unix.stackexchange.com/questions/47359/what-is-xsession-foruser_envfile=filename
. Mon problème avec pam_env est que la variable HOME peut ne pas être disponible selon l'application PAM. Ce qui limite son utilisation à des variables absolues./etc/X11/Xsession.d/
... ou dans le sens de ce répertoire, selon votre Linux (?). J'en ai écrit un peu ici .Le concept est qu'après la connexion, un gestionnaire d'affichage démarre une "Xsession" et source (!) Tout dans ce répertoire dans l'ordre alphabétique. Vous pouvez simplement ajouter un script qui modifie PATH. La Xsession sera inutilement votre DE et généralement tous les processus sont des enfants de cette Xsession, héritant donc de l'environnement PATH.
la source
/etc/X11/Xsession.d/40x11-common_xsessionrc
Variables d'environnement global source. Ce script source n'importe quoi dans $ HOME / .xsessionrc si le fichier est présent. Cela permet à l'utilisateur de définir des variables d'environnement globales pour sa session X, telles que des informations locales.Un processus hérite d'un environnement du processus parent qui le démarre. Pour modifier le PATH ou d'autres valeurs d'environnement dans un enfant, nous pouvons définir une variable sur une valeur dans le parent, et exporter la variable si nous sommes dans un shell, puis démarrer le processus enfant. L'enfant peut également lire un ou plusieurs fichiers d'initialisation pour modifier son propre environnement au démarrage.
Il y a donc deux autres questions pour obtenir une réponse:
Quel est l'arbre d'héritage parent / enfant qui mène au processus que vous souhaitez être affecté par le PATH ou le changement d'environnement?
Quels fichiers d'initialisation sont utilisés / lus / sourcés par les processus pertinents dans cette arborescence?
Voici une partie de la sortie de ps (1) pour montrer ce que j'entends par un arbre d'héritage:
Notez les séquences graphiques \ _ et les numéros PIP / PPID (ID de processus et PID parent). Le PID 1855 a été démarré par (un enfant de?) 1497, qui a été démarré par 1481, qui a été démarré par le PID 1, qui a été démarré par le processus ancêtre 0.
Faites une trace d'héritage similaire pour le processus que vous souhaitez affecter, déterminez quels fichiers d'initialisation sont pertinents et apportez la modification à PATH quelque part dans cette arborescence, probablement avec quelque chose de similaire à:
la source
ps
pour déterminer le processus parent d'une connexion à l'interface graphique?