Настройка переменных среды в OS X для приложений с графическим интерфейсом

Настройка переменных среды в OS X для приложений с графическим интерфейсом

Как настроить переменные среды в Mac OS X так, чтобы они были доступны для приложений с графическим интерфейсом без использования~/.MacOSX/environment.plistилиВход в систему Хуки(так как этоустаревший)?

решение1

На Mountain Lion все эти /etc/pathsи /etc/launchd.confдругие изменения не дают никакого эффекта!

На форумах разработчиков Apple говорится:

«Измените Info.plist самого .app так, чтобы он содержал словарь «LSEnvironment» с нужными вам переменными среды.

~/.MacOSX/environment.plist больше не поддерживается."

Поэтому я напрямую отредактировал приложение Info.plist(щелкните правой кнопкой мыши на «AppName.app» (в данном случае SourceTree), а затем « Show package contents»)

Показать содержимое упаковки

и добавил новую пару ключ/словарь под названием:

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

(видеть:Документация LaunchServicesKeys в Apple)

введите описание изображения здесь

теперь приложение (в моем случае SourceTree) использует указанный путь и работает с git 1.9.3 :-)

PS: Конечно, вам придется настроить запись Path в соответствии с вашими конкретными потребностями.

решение2

Решение использует функциональность launchctlв сочетании сЗапустить Агентадля имитации старых хуков входа. Для других решений, использующих хранилище launchd, см.это сравнение. Используемый здесь пусковой агент находится в/Библиотека/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>

Одна важная вещь - этоЗапуск при загрузкеключ, чтобы агент запуска был выполнен как можно раньше. Реальная работа выполняется в скрипте оболочки/Пользователи/Общий/conflaunchd.sh, который гласит:~/.conf.launchdи передает его 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

Обратите внимание на вызов path_helperto getПУТЬнастроено правильно. Наконец,~/.conf.launchdвыглядит так

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

Это launchctlкоманды, см. страницу руководства для получения дополнительной информации. Работает отлично для меня (я должен отметить, что я все еще парень Snow Leopard), приложения GUI, такие какtexstudioиTeXShopможно увидеть мое собственное дерево текс. Что можно улучшить:

  1. В скрипте оболочки есть #filename="$1". Это не случайно, так как имя файла должно быть передано скрипту агентом запуска в качестве аргумента, но это не работает.

  2. Как уже упоминалосьздесь(на немецком языке и с платным доступом!), можно поместить скрипт в сам агент запуска.

  3. Я не уверен, насколько безопасно это решение, поскольку оно использует evalстроки, предоставленные пользователем.

  4. Думаю, стоит помнить, что определение MANPATH с использованием этого метода не сработало как следует, но я в этом не уверен.

Следует отметить, что Apple намеревалась использовать несколько похожий подход, помещая материалы в∼/launchd.conf, но в настоящее время он не поддерживается для этой даты и ОС (см. man-страницу launchd.conf). Я предполагаю, что такие вещи, как подстановка, не будут работать так, как они работают в этом предложении. И, конечно, можно разместить эти файлы где угодно, за исключением агента запуска, который должен находиться в/Библиотека/LaunchAgents/или~/Библиотека/LaunchAgents/.

Наконец, я должен упомянуть источники, которые я использовал в качестве информации о Launch Agents: 1,2,3,4.

Обновлять: В версии 10.8 это пока не работает. Описаны обходные пути для каждого приложенияздесьиздесь.

решение3

Ответ, предоставленный @flori, работает у меня на Maverick при условии, что я выполню следующие команды в терминале после изменения файла plist

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user 

killall Finder

решение4

Другой вариант — использовать /etc/launchd.conf. Например, я изменил значение по умолчанию, PATHдобавив эту строку в /etc/launchd.conf:

setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin

Изменения можно применить /etc/launchd.confлибо путем перезапуска, либо путем запуска launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf, завершения и повторного запуска процессов.

Настройки в /etc/launchd.confприменяются как к корневому процессу launchd, так и к процессам launchd для каждого пользователя. Переменные среды, заданные с помощью setenvв, /etc/launchd.confотображаются как sudo launchctl exportи launchctl export.

Связанный контент