Comment configurer les variables d'environnement dans Mac OS X de telle sorte qu'elles soient disponibles pour les applications GUI sans utiliser ~ / .MacOSX / environment.plist ou Login Hooks (car elles sont obsolètes )?
Comment configurer les variables d'environnement dans Mac OS X de telle sorte qu'elles soient disponibles pour les applications GUI sans utiliser ~ / .MacOSX / environment.plist ou Login Hooks (car elles sont obsolètes )?
Réponses:
Sur Mountain Lion tous les /etc/paths
et l' /etc/launchd.conf
édition ne prend aucun effet!
Les forums des développeurs d'Apple disent:
"Modifiez le Info.plist du .app lui-même pour contenir un dictionnaire" LSEnvironment "avec les variables d'environnement souhaitées.
~ / .MacOSX / environment.plist n'est plus pris en charge. "
J'ai donc directement édité l'application Info.plist
(clic droit sur "AppName.app" (dans ce cas SourceTree) puis " Show package contents
")
et ajouté une nouvelle paire clé / dict appelée:
<key>LSEnvironment</key>
<dict>
<key>PATH</key>
<string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>
(voir: documentation LaunchServicesKeys sur Apple )
maintenant l'App (dans mon cas SourceTree) utilise le chemin donné et fonctionne avec git 1.9.3 :-)
PS: Bien sûr, vous devez ajuster l'entrée Chemin d'accès à vos besoins spécifiques.
Info.plist
prendre effet.
La solution utilise la fonctionnalité de launchctl
, combinée avec un agent de lancement pour imiter les points d'ancrage de connexion des anciens. Pour d'autres solutions utilisant le magasin de launchd
, consultez cette comparaison . L'agent de lancement utilisé ici se trouve dans / Library / LaunchAgents / :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>user.conf.launchd</string>
<key>Program</key>
<string>/Users/Shared/conflaunchd.sh</string>
<key>ProgramArguments</key>
<array>
<string>~/.conf.launchd</string>
</array>
<key>EnableGlobbing</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>LimitLoadToSessionType</key>
<array>
<string>Aqua</string>
<string>StandardIO</string>
</array>
</dict>
</plist>
Une chose importante est la clé RunAtLoad pour que l'agent de lancement soit exécuté le plus tôt possible. Le vrai travail se fait dans le script shell /Users/Shared/conflaunchd.sh , qui lit ~ / .conf.launchd et le nourrit launchctl
:
#! /bin/bash
#filename="$1"
filename="$HOME/.conf.launchd"
if [ ! -r "$filename" ]; then
exit
fi
eval $(/usr/libexec/path_helper -s)
while read line; do
# skip lines that only contain whitespace or a comment
if [ ! -n "$line" -o `expr "$line" : '#'` -gt 0 ]; then continue; fi
eval launchctl $line
done <"$filename"
exit 0
Remarquez l'appel de path_helper
pour configurer correctement PATH . Enfin, ~ / .conf.launchd ressemble à ça
setenv PATH ~/Applications:"${PATH}"
setenv TEXINPUTS .:~/Documents/texmf//:
setenv BIBINPUTS .:~/Documents/texmf/bibtex//:
setenv BSTINPUTS .:~/Documents/texmf/bibtex//:
# Locale
setenv LANG en_US.UTF-8
Ce sont des launchctl
commandes, voir sa page de manuel pour plus d'informations. Fonctionne très bien pour moi (je dois mentionner que je suis toujours un gars de Snow Leopard), les applications GUI telles que texstudio et TeXShop peuvent voir mon propre arbre tex. Choses qui peuvent être améliorées:
Le script shell contient un #filename="$1"
. Ce n'est pas accidentel, car le nom du fichier doit être introduit dans le script par l'agent de lancement comme argument, mais cela ne fonctionne pas.
Comme mentionné ici (en allemand et derrière un paywall!), Il est possible de mettre le script lui-même dans l'agent de lancement.
Je ne suis pas sûr de la sécurité de cette solution, car elle utilise eval
des chaînes fournies par l'utilisateur.
Je pense me souvenir que la définition de MANPATH utilisant cette méthode n'a pas bien fonctionné, mais je ne suis pas sûr.
Il convient de mentionner qu'Apple envisageait une approche quelque peu similaire en mettant des éléments dans ∼ / launchd.conf , mais il n'est actuellement pas pris en charge pour cette date et le système d'exploitation (voir la page de manuel de launchd.conf
). Je suppose que des choses comme le globbing ne fonctionneraient pas comme elles le font dans cette proposition. Et bien sûr, on peut mettre ces fichiers n'importe où ailleurs, sauf l'agent de lancement qui doit résider dans / Library / LaunchAgents / ou ~ / Library / LaunchAgents / .
Enfin, je dois mentionner les sources que j'ai utilisées comme informations sur les agents de lancement: 1 , 2 , 3 , 4 .
Mise à jour : cela ne fonctionne pas pour le moment dans la version 10.8. Les solutions de contournement par application sont décrites ici et ici .
export PATH=.:"$(launchctl getenv PATH)"
dans ~ / .bash_profile (de même pour les autres shells). Ceci est possible car path_helper
est appelé dans le script shell. Pour plus de détails sur la variable PATH sous OS X, vérifiez cette réponse .
La réponse fournie par @flori fonctionne pour moi sur Maverick à condition que j'exécute les commandes suivantes dans Terminal après avoir changé le fichier plist
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
killall Finder
La réponse fournie par @ percival-ulysses fonctionne pour moi sur 10.9 Mavericks avec le petit changement suivant: éditez le script /Users/Shared/conflaunchd.sh juste avant exit 0
et ajoutez les lignes
killall Dock
killall SystemUIServer
pour redémarrer le Dock et la barre de menus. Après cela, les applications démarrées à partir du Dock ou de Spotlight hériteront du bon chemin. Si vous utilisez le Finder pour démarrer les applications critiques PATH, killall Finder
vous pouvez également les ajouter.
Dans .bash_profile
la ligne j'utilise
export PATH=`launchctl getenv PATH`
pour définir le CHEMIN pour le Terminal, de cette façon le CHEMIN est contrôlé à partir du même emplacement, le fichier ~ / .conf.launchd .
Une autre option consiste à utiliser /etc/launchd.conf
. Par exemple, j'ai changé la valeur PATH
par défaut en ajoutant cette ligne à /etc/launchd.conf
:
setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin
Vous pouvez appliquer des modifications à /etc/launchd.conf
soit en redémarrant, soit en exécutant launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
et en arrêtant et en relançant les processus.
Les paramètres de /etc/launchd.conf
s'appliquent à la fois au processus root launchd et aux processus launchd par utilisateur. Les variables d'environnement définies avec setenv
in /etc/launchd.conf
sont représentées par sudo launchctl export
et launchctl export
.