彷徨えるフジワラ

年がら年中さまよってます

システムワイドなロケール設定 〜 Mac OS X (その2)

その1では、「ターミナル」や、SSH 経由でのアクセスなど、主にCUI系アクセスでのロケール設定に関してまとめました。

本エントリでは、主に GUI 経由で起動されるアプリに対して、ロケール設定を反映させる方法についてまとめます。

GUI 経由で起動されるアプリへのロケール設定

GUI 経由でアプリを起動した場合、起動されたプロセスに対して、ロケール環境変数は設定されません。GUI 経由でのアプリ起動では、シェルが介在していないので、~/.bashrc 等での設定も意味を持ちません。

GUI 経由で起動される全てのアプリに対して、ロケール系のものを含めた、環境変数設定を行うには、設定ファイル /etc/launchd.conf を使用します。

例えば、LANG 環境変数ja_JP.UTF-8 を設定する場合、設定ファイル /etc/launchd.conf (存在しない場合は新規作成) に対して、以下のような行を追加します (格納場所が /etc なので、ルート権限が必要です)。

setenv LANG ja_JP.UTF-8

記述追加後の OS 再起動以降は、GUI 経由で起動されるアプリに対して、環境変数 LANGja_JP.UTF-8 が設定されるようになります。

もしも、/etc/launchd.conf の編集前 (あるいは OS 再起動の前) に、環境変数設定の効果を確認したい場合は、ターミナル等から "launchctl setenv 環境変数名 値" を実行した上で、改めて GUI 経由でアプリを起動してみてください。

launchctl コマンドには、環境変数設定周りに関する以下のような機能もあります。

  • 特定の環境変数の設定状況は "launchctl getenv 環境変数名"
  • 環境変数設定の解除は "launchctl unsetenv 環境変数名"
  • 設定済み環境変数の一覧は "launchctl export"
$ launchctl getenv LANG
$ launchctl setenv LANG ja_JP.UTF-8
$ launchctl getenv LANG
ja_JP.UTF-8
$ launchctl export
    :
    :
LANG="ja_JP.UTF-8"; export LANG;

設定変更が正しく機能することを確認したなら、設定の内容を /etc/launchd.conf に保存して、OSを再起動しましょう。

なお、/etc/launchd.conf での記述内容は、OS 起動時に一度読み込まれるだけなので、現状では「言語とテキスト」での設定変更を即時に反映することはできません。

個人的な TODO になりますが、 TortoiseHg のスタートアップ処理部分に:

上記のような処理を追加することで、Nightly build として提供されている TortoiseHg アプリを GUI 経由で起動した場合等に発生する、以下のような文字コードの問題を、/etc/launchd.conf 等を設定することなく解消したいなぁ、などと考えています(ついでに「言語とテキスト」の設定変更への動的追従も可能になりますし)。

Mac OS X 互換性メモ

  • ~/launchd.conf による環境変数設定は、現在サポート対象外 (少なくとも Mac OS X 10.7 (Lion) 時点でオンラインマニュアルに記載済み)
  • ~/.MacOSX/environment.plist による環境変数設定は、Mac OS X 10.8 (Mountain Lion) 以降からはサポート対象外