Il semble que le launchd.conf
ne charge plus ma variable d'environnement. Quelqu'un d'autre a-t-il remarqué cela?
Existe-t-il une autre solution pour définir de manière permanente les variables d'environnement?
Il semble que le launchd.conf
ne charge plus ma variable d'environnement. Quelqu'un d'autre a-t-il remarqué cela?
Existe-t-il une autre solution pour définir de manière permanente les variables d'environnement?
Réponses:
Créez un
environment.plist
fichier~/Library/LaunchAgents/
avec ce contenu:Vous pouvez ajouter de nombreuses
launchctl
commandes à l'intérieur du<string></string>
bloc.L'
plist
activera après le redémarrage du système. Vous pouvez également l'utiliserlaunchctl load ~/Library/LaunchAgents/environment.plist
pour le lancer immédiatement.[Éditer]
La même solution fonctionne également à El Capitan.
Xcode 7.0+ n'évalue pas les variables d'environnement par défaut. L'ancien comportement peut être activé avec cette commande:
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
[Éditer]
Il y a quelques situations où cela ne fonctionne pas tout à fait. Si l'ordinateur est redémarré et que "Rouvrir les fenêtres lors de la reconnexion" est sélectionné, les fenêtres rouvertes risquent de ne pas voir les variables (elles sont peut-être ouvertes avant l'exécution de l'agent). De plus, si vous vous connectez via ssh, les variables ne seront pas définies (vous devrez donc les définir dans ~ / .bash_profile). Enfin, cela ne semble pas fonctionner pour PATH sur El Capitan et Sierra. Cela doit être défini via 'launchctl config user path ...' et dans / etc / chemins.
la source
UseSanitizedBuildSystemEnvironment
).[ Réponse originale ]: Vous pouvez toujours utiliser
launchctl setenv variablename value
pour définir une variable afin qu'elle soit captée par toutes les applications (applications graphiques démarrées via le Dock ou Spotlight, en plus de celles démarrées via le terminal).Évidemment, vous ne voudrez pas faire cela à chaque fois que vous vous connectez.
[ Modifier ]: pour éviter cela, lancez
AppleScript Editor
, entrez une commande comme celle-ci:(Utilisez plusieurs lignes si vous souhaitez définir plusieurs variables)
Maintenant, enregistrez (
⌘
+s
) comme Format de fichier: Application . Enfin, ouvrezSystem Settings
→ Utilisateurs et groupes → Éléments de connexion et ajoutez votre nouvelle application.[ Réponse originale ]: Pour contourner toutes les variables que vous souhaitez définir dans un court script shell, jetez un œil à cette réponse précédente sur la façon d'exécuter un script sur la connexion MacOS . De cette façon, le script sera appelé lorsque l'utilisateur se connectera.
[ Modifier ]: Aucune des deux solutions n'est parfaite car les variables ne seront définies que pour cet utilisateur spécifique, mais j'espère / devine que cela peut être tout ce dont vous avez besoin.
Si vous avez plusieurs utilisateurs, vous pouvez soit définir manuellement un élément de connexion pour chacun d'eux, soit placer une copie de com.user.loginscript.plist dans chacun de leurs répertoires Library / LaunchAgents locaux , en pointant sur le même script shell.
Certes, aucune de ces solutions de contournement n'est aussi pratique que /etc/launchd.conf .
[ Modification supplémentaire ]: Un utilisateur ci-dessous mentionne que cela n'a pas fonctionné pour lui. Cependant, j'ai testé sur plusieurs machines Yosemite et cela fonctionne pour moi. Si vous rencontrez un problème, n'oubliez pas que vous devrez redémarrer les applications pour que cela prenne effet. De plus, si vous définissez des variables dans le terminal via ~ / .profile ou ~ / .bash_profile , elles remplaceront les éléments définis via launchctl setenv pour les applications démarrées depuis le shell .
la source
Il est possible de définir des variables d'environnement sur Mac OS X 10.10 Yosemite avec 3 fichiers + 2 commandes.
Fichier principal avec définition des variables d'environnement:
Définition de service pour charger des variables d'environnement pour les applications utilisateur (terminal, IDE, ...):
La même définition de service pour les applications utilisateur root:
Et enfin, nous devrions enregistrer ces services:
Ce que nous obtenons:
Problèmes / problèmes:
Pour que vos variables d'environnement soient correctement prises par les applications après le redémarrage du système, vous aurez besoin de:
Cela se produit parce qu'Apple refuse l'ordre explicite des services chargés, de sorte que les variables env sont enregistrées en parallèle avec le traitement de la "file d'attente de réouverture".
Mais en fait, je ne redémarre mon système que plusieurs fois par an (sur de grosses mises à jour), donc ce n'est pas un gros problème.
la source
JAVA_HOME
), mais pas pour laPATH
variable (voir ma question sur demander différent ).launchd
, mais ne serait-il pas possible de charger ces démons au démarrage (c'est-à-dire avant la connexion)? Cela devrait contourner tous les problèmes que vous mentionnez.Cité de
Apple Developer Relations 10-Oct-2014 09:12 PM
Solution:
la source
/Library/LaunchDaemons
, et au lieu de direlaunchctl
d'exécuter lalimit
commande, dites-lui d'exécuter lasetenv
commande avecPATH
et une chaîne de chemin comme arguments.launchd
devrait le récupérer automatiquement au démarrage et être en quelque sorte auto-modifié presque immédiatement.<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
Voici les commandes pour restaurer l'ancien comportement:
Vous pouvez maintenant spécifier des commandes comme
setenv JAVA_HOME /Library/Java/Home
dans/etc/launchd.conf
.Vérifié sur El Capitan.
la source
Qu'est-ce qui a fonctionné pour moi (inspiré de merci aax):
Collez-le dans /Library/LaunchDaemons/com.apple.launchd.limit.plist puis redémarrez:
Si vous en avez besoin étape par étape:
⌘+v
). Cela forcera la limite à 16384 fichiers par processus et 16384 fichiers au totalesc
puis:wq
J'espère que cela vous a aidé.
la source
Vous pouvez essayer https://github.com/ersiner/osx-env-sync . Il gère à la fois les applications de ligne de commande et d'interface graphique à partir d'une seule source et fonctionne avec la dernière version d'OS X (Yosemite).
Vous pouvez utiliser des substitutions de chemin et d'autres astuces de shell puisque ce que vous écrivez est un script bash normal qui doit être obtenu par bash en premier lieu. Aucune restriction. (Consultez la documentation osx-env-sync et vous comprendrez comment il y parvient.)
J'ai répondu à une question similaire ici où vous en trouverez plus.
la source
La solution consiste à ajouter votre variable à
/etc/profile
. Ensuite, tout fonctionne comme prévu! Bien sûr, vous DEVEZ le faire en tant qu'utilisateur root avec sudo nano / etc / profile. Si vous le modifiez d'une autre manière, le système se plaindra d'un / etc / profile endommagé, même si vous changez les permissions en root.la source
J'ai ajouté les variables dans le ~ / .bash_profile de la manière suivante. Une fois que vous avez terminé, redémarrez / déconnectez-vous et connectez-vous
REMARQUE: sans redémarrage / déconnexion et connexion, vous pouvez appliquer ces modifications en utilisant;
la source