How can I set environment variables for GUI apps in OS X Mavericks?
I've been struggling to get an app to run in OS X Mavericks. I finally was able to get it to run by drilling into the .app bundle and running the shell script directly. It seems that JAVA_HOME needed to be set. So I set it in my .profile in the shell, and everything works fine.
However, if I want to simply click the icon in the dock, it won't run. My guess is that this is because JAVA_HOME is not set globally. Since I'm not running the app directly from the shell, OS X doesn't know what JAVA_HOME is. It just keeps looking.
In previous versions of OS X, it seems that environment variables could be set for GUI apps by simply adding them to /etc/launchd.conf. This file doesn't seem to exist in Mavericks. How can I set a global environment variable that will work for GUI apps in Mavericks?
Solution 1:
/etc/launchd.conf
has never existed by default, but it does still work in 10.9.
- Run for example
sudo nano /etc/launchd.conf
. - Add a line like
setenv JAVA_HOME /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
. (I don't know whatJAVA_HOME
should actually be set to though.) - Either restart or run
launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
and relaunch processes.
launchctl export
prints variables exported by the user launchd process and sudo launchctl export
prints variables exported by the root launchd process.
This method can also be used to set a default path. For example I have added this line to /etc/launchd.conf
:
setenv PATH /Users/lauri/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin
(I used /Users/lauri/bin
instead of ~/bin
because ~/bin
would be /var/root/bin
for programs run as root.)