Comment définir le PATH ou d'autres variables d'environnement pour que les applications X puissent y accéder?

16

Comment puis-je définir des variables env pour que KDE les reconnaisse?

Comment définissez-vous le chemin dans un environnement non shell (KDE)?

Contrairement aux deux questions ci-dessus, je veux savoir comment faire cela pour GNOME. Ou mieux encore, existe-t-il une méthode indépendante du gestionnaire de fenêtres. Pour le shell / terminal, je modifie habituellement ~/.bashrc. Où puis-je placer des instructions d'exportation afin que les variables d'environnement soient disponibles pour toutes les applications X, quel que soit le gestionnaire de fenêtres utilisé?

Code-Guru
la source

Réponses:

12

Le module pam_env PAM vous permet de les définir soit dans, /etc/environmentsoit 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_environmentné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 .

bahamat
la source
2
Le problème avec la ~/.pam_environmentsolution 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.
Cristian Ciupitu
@CristianCiupitu a raison. ~/.xsessionchargera les variables d'environnement pour les applications X. Voir unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek
@CristianCiupitu: Merci beaucoup pour votre commentaire qui m'a conduit à pam_env. J'ai mis à jour mes fichiers pam Fedora 24 pour activer l'environnement utilisateur. Maintenant, mes sessions Wayland ont à nouveau un PATH personnalisé.
Zan Lynx
@CristianCiupitu est-ce vrai? La documentation linux-pam.org/Linux-PAM-html/sag-pam_env.html implique que ~ / .pam_environment est le fichier par défaut à lire, sauf indication contraire. Voir la ligne sur user_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.
CMCDragonkai
2
@CMCDragonkai, la page de manuel pam_env (8) de Fedora disait: " Par défaut, cette option est désactivée car les variables d'environnement fournies par l'utilisateur dans l'environnement PAM peuvent affecter le comportement des modules suivants de la pile sans le consentement de l'administrateur système" . Ainsi, alors que le module PAM en amont a certains paramètres par défaut, certaines distributions les écrasent.
Cristian Ciupitu
1

/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.

Bananguin
la source
Existe-t-il un équivalent que je peux définir dans mon répertoire $ HOME? Comme .Xsession?
Code-Guru
Selon Xession (5): /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.
Bananguin
1

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:

# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf 

UID   PID  PPID USER COMMAND
  0     1     0 root /usr/lib/systemd/systemd
  0  1481     1 root /usr/sbin/gdm-binary -nodaemon
  0  1497  1481 root  \_ /usr/libexec/gdm-simple-slave ...
  0  1504  1497 root      \_ /usr/bin/Xorg :0 ...
  0  1855  1497 root      \_ gdm-session-worker ...

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 à:

PATH=${PATH}:/usr/local/bin
D McKeon
la source
Puis-je utiliser pspour déterminer le processus parent d'une connexion à l'interface graphique?
Code-Guru