web-dev-qa-db-ja.com

GUIアプリケーション用のOS Xでの環境変数の設定

〜/ .MacOSX/environment.plist またはログインフック(これらは 非推奨 であるため)?

18

このソリューションは、launchctlの機能をLaunch Agentと組み合わせて使用​​して、古いログインフックを模倣します。 launchdのストアを使用する他のソリューションについては、 この比較 を参照してください。ここで使用される起動エージェントは/ 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>

1つの重要なことは、RunAtLoadキーであり、これにより、起動エージェントが可能な限り早い時間に実行されます。実際の作業は、シェルスクリプト/ Users/Shared/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 [〜#〜]を正しく設定するためのpath_helperの呼び出しに注意してください。最後に、〜/ .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の人です)、texstudioTeXShopなどのGUIアプリケーション私自身のtexツリーを見ることができます。改善できること:

  1. シェルスクリプトには#filename="$1"が含まれています。起動エージェントが引数としてファイル名をスクリプトに渡す必要があるため、これは偶然ではありませんが、これは機能しません。

  2. 前述のように here (ドイツ語で、ペイウォールの背後にあります!)、起動エージェント自体にスクリプトを配置することが可能です。

  3. ユーザーが指定した文字列でevalを使用するため、このソリューションがどれほど安全かはわかりません。

  4. この方法を使用したMANPATHの定義がうまく機能しなかったことを覚えていると思いますが、よくわかりません。

Appleは、〜/ launchd.confにデータを入れることで、多少似たアプローチを意図していたが、現在これについてはサポートされていないことに注意してください日付とOS(launchd.confのマンページを参照)。この提案のようにグロビングなどは機能しないと思います。もちろん、これらのファイルは、起動エージェント以外の場所に配置できます。 / Library/LaunchAgents /または〜/ Library/LaunchAgents /

最後に、Launch Agentsの情報として使用したソースに言及する必要があります: 12 、、 4

Update:これは現在、バージョン10.8では機能しません。アプリケーションごとの回避策は here および here で説明されています。

8

Mountain Lionでは、すべての/etc/paths/etc/launchd.confの編集は効果がありません。

Appleの開発者フォーラムは言う:

「.app自体のInfo.plistを変更して、必要な環境変数を含む「LSEnvironment」辞書を含めます。

〜/ .MacOSX/environment.plistはサポートされなくなりました。」

そこで、アプリのInfo.plistを直接編集しました(「AppName.app」(この場合はSourceTree)を右クリックして、「Show package contents」を右クリックします)。

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 Documentation at Apple

enter image description here

アプリ(私の場合はSourceTree)は指定されたパスを使用し、git 1.9.3で動作します:-)

PS:もちろん、特定のパスのニーズに合わせてパスエントリを調整する必要があります。

16
Flori

Plistファイルを変更した後、ターミナルで次のコマンドを実行した場合、@ floriによって提供された回答がMaverickで機能します

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

killall Finder
3
Matthew

@ percival-ulyssesが提供する回答は、10.9 Mavericksで私に次の小さな変更を加えることで機能します。edit / Users/Shared/conflaunchd.sh直前にexit 0と行を追加

killall Dock
killall SystemUIServer

dockとメニューバーを再起動します。この後、DockまたはSpotlightから起動したアプリケーションは、正しいPATHを継承します。 Finderを使用してPATHクリティカルなアプリケーションを起動する場合、killall Finderも追加される場合があります。

の中に .bash_profile次の行を使用します

export PATH=`launchctl getenv PATH`

ターミナルのPATHを設定するには、この方法でPATHを同じ場所(〜/ .conf.launchdファイル)から制御します。

2
Ury Marshak

別のオプションは、/etc/launchd.confを使用することです。たとえば、次の行を/etc/launchd.confに追加して、デフォルトのPATHを変更しました。

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プロセスの両方に適用されます。 /etc/launchd.confsetenvで設定された環境変数は、Sudo launchctl exportlaunchctl exportの両方で表示されます。

0
Lri