Où sont définies les variables d'environnement système dans Mountain Lion?

46

Dans Lion (et les versions précédentes), il était dans .MacOSX/environment.plist. Après la mise à niveau vers 10.8, le fichier est toujours là, mais les variables ne prennent pas.

J'ai également essayé de les ajouter à /etc/launchd.confet ils apparaîtront dans Terminal, mais pas dans les applications GUI (comme mon IDE).

Félix
la source
Avez-vous redémarré après avoir changé /etc/launchd.conf?
nohillside
Je l’ai fait, et toutes les variables qu’il contient sont maintenant disponibles dans n’importe quel terminal, mais ne sont pas présentes pour mon IDE.
Félix
Peut-être que l'IDE ne vous expose pas l'environnement (voir ma réponse )? Quel est l'IDE? est-il lancé directement par le Finder ou Spotlight?
halloleo

Réponses:

22

J'ai également posé cette question sur les forums des développeurs Apple et j'ai reçu cette réponse officielle.

Modifiez le fichier Info.plist du fichier .app lui-même afin qu'il contienne un dictionnaire "LSEnvironment" avec les variables d'environnement souhaitées.
~ / .MacOSX / environment.plist n'est plus pris en charge.

Félix
la source
2
Où est-ce situé?
orome
Il serait utile de fournir un lien vers un exemple plus spécifique.
Blaisorblade
1
Mise à jour: j'ai essayé de modifier ce fichier après avoir déterminé la syntaxe (je pense), mais cela ne fonctionne pas du tout pour moi.
Blaisorblade
4
Il y aura un Info.plist par application dans WhatEver.app/Content/Info.plist. Vous pouvez l'éditer avec XCode. Cliquez sur le "+" dans la liste des propriétés d’information et ajoutez un dictionnaire appelé LSEnvironment. Si vous le tapez correctement, il sera renommé en variables d'environnement. Ensuite, vous cliquez sur le "+" correspondant à chaque variable d’environnement à ajouter.
Felix
2
C'est une bonne solution, mais elle ne fonctionne plus à partir de Yosemite 10.10.5.
Dalmazio
21

Je sais que c’est une vieille question, mais j’ai pensé que je ferais remarquer que, dans Yosemite, /etc/launchd.confne fonctionne plus (comme le confirme la page de manuel). Donc, voici une alternative.

Lancez AppleScript Editor, entrez une commande comme celle-ci:

do shell script "launchctl setenv variablename value"

(ajoutez autant de lignes que vous le souhaitez)

Enregistrez maintenant (S) au format de fichier: Application . Enfin, ouvrez Paramètres systèmeUtilisateurs et groupesÉléments de connexion et ajoutez votre nouvelle application.

ruario
la source
Notez que cela pourrait ne pas fonctionner avec d'autres applications ouvertes en tant qu'éléments de connexion et peut-être avec celles que vous ouvrez rapidement après votre connexion.
user151019
Cela a fonctionné pour moi. Merci beaucoup. Cela a rendu fou toute la journée!
wholladay
2
Ressemble à la seule solution réelle et universelle à ce jour. Mais il faut encore 9 votes positifs pour monter et devenir la première réponse. : c
Sarge Borsch le
Cela a fonctionné pour moi sur El Capitan. Comme noté ci-dessus par @Mark, il existe des problèmes de commande (par exemple, les applications reprises peuvent ou non avoir l'environnement), mais une fois connecté, cela fonctionne comme prévu. C'est-à-dire que les applications lancées à partir de Spotlight ou du Dock ont ​​le bon environnement.
Alec Thomas
@Marque Vous pouvez essayer cette réponse en utilisant l'agent de lancement. Dans mon cas, l'agent de lancement démarre après les éléments de connexion. Je déplace donc l'application cible (comme Eclipse) de l'élément de connexion vers l'agent de lancement afin qu'elle soit démarrée après les variables d'environnement de configuration de cette application spéciale.
Franklin Yu
10

Comme vous l'avez découvert, l'utilisation du fichier environment.plist n'est plus suivie, les variables stockées dans Info.plist en tant que chaînes LSEnvironment ne sont définies que par launchd .

Vous ne pouvez pas compter sur eux pour définir une variable d'environnement générale que le terminal définira si vous appelez votre programme directement depuis le terminal / shell. La bonne nouvelle est que la open -acommande déclenche le lancement de launchd. Par conséquent, les variables seront définies de manière cohérente pour l'environnement de l'application, sauf pour l'environnement du shell local.

bmike
la source
4

Il est tout à fait judicieux de définir des variables d'environnement /etc/launchd.conf: chaque application lancée après un redémarrage par des shells locaux, que le Finder ou Spotlight hérite de ces variables - je l'ai testé de manière approfondie avec Mountain Lion 10.8.3.

2 mises en garde:

halloleo
la source
1
/etc/launchd.confn'est plus pris en charge depuis Yosemite. Voir apple.stackexchange.com/questions/106355/…
Franklin Yu
3

Essayez launchctl setenv NAME VALUE. Je ne sais pas si / ce que cela fait différemment de l'édition de launchd.conf, mais cela fonctionne pour moi dans les applications Terminal et GUI. Plus de détails.

Notez que cela ne survit pas après un redémarrage. Voici un moyen de résoudre ce problème .

Ryan
la source
3
C'est une assez longue page à laquelle vous créez un lien. Où est exactement la partie pertinente? Pourriez-vous l'inclure directement dans votre réponse pour faciliter les choses à tout le monde?
nohillside
2
oups, bon point, je pensais avoir inclus plus d'un fragment dans cette URL. fixé.
Ryan
1
Le moyen de survivre à un redémarrage donné utilise le
fichier