moshをFreeBSD(9.1と9.2)とMacOS X(10.9.5)でインストールした話の続きです。
FreeBSDとMacOS Xでmoshを使う先の記述は、システム環境設定/言語と地域/優先する言語で「日本語」を最優先としている場合にはうまく動きます。しかし、「言語と地域」で「English」を最優先にしている場合には、もう少し設定が必要です。
http://www.sakashita-net.jp/2015/05/freebsdmacos-xmosh.html
MacOS Xのターミナル.appでmoshを使う(日本語環境の場合)
http://www.sakashita-net.jp/2015/05/macos-x1095appterminalappmosh.html
私の場合、仕事で米国の方にMacOS Xでの設定を伝える必要があり、画面写真を送る時などにメニューの表記などが英語になるように、「English」を有線にしています。上記の記事にある記述のままで、ターミナルからmoshを起動すると、以下のような表示になってしまいうまく動きません。
mosh-server needs a UTF-8 native locale to run.よく見てみると、LC_CTYPEがUTF-8という謎の値になっています。本来であれば、en_US.UTF-8になっていなければなりません。試しに、Terminal.appの設定で「Set locale environment variables on startup」のチェックを外して起動してみると、次のようになります。
Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",
The client-supplied environment (LC_CTYPE=UTF-8) specifies
the character set "".
LANG=
LC_CTYPE=UTF-8
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
Connection to ホスト名 closed.
/usr/local/bin/mosh: Did not find mosh server startup message.
mosh-server needs a UTF-8 native locale to run.LANGなど環境変数に何も設定されていません。検索エンジンで調べてみると次のようなWWWページが見つかります。
Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",
The client-supplied environment ([no charset variables]) specifies
the character set "US-ASCII".
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
Setting locales correctly on Mac OSX Terminal applicationここでもLC_CTYPE環境変数がUTF-8となってしまうと書かれています。しかし、このWWWページにある解決先、「Set locale environment variables on startup」にチェックを外すとLANGには何も設定されていない状態になってしまい、うまくいきません。たぶん、MacOS Xのバージョンが違い、動作が違っているのでしょう。
http://blog.remibergsma.com/2012/07/10/setting-locales-correctly-on-mac-osx-terminal-application/
もう少し調べてみると、次のようなページが見つかります。
システムワイドなロケール設定 ~ Mac OS X (その2)ここでは、以下のように書かれています。
http://d.hatena.ne.jp/flying-foozy/20140204/1391520123
GUI 経由でアプリを起動した場合、起動されたプロセスに対して、ロケール系環境変数は設定されません。GUI 経由でのアプリ起動では、シェルが介在していないので、ということで、「Set locale environment variables on startup」にチェックを外したままで、/etc/launchd.confを作成し、以下のように記述します。~/.bashrc
等での設定も意味を持ちません。
GUI 経由で起動される全てのアプリに対して、ロケール系のものを含めた、環境変数設定を行うには、設定ファイル/etc/launchd.conf
を使用します。
setenv LANG en_US.UTF-8
launchd で Homebrew を自動アップデートこれでよいかと安心していると、次のようなWWWページを見つけました。
http://kymmt90.hatenablog.com/entry/launchd_brew
launchd で Homebrew を自動アップデート(Yosemite 編)以下のような記述があり、MacOS XをYosemita(10.10.x)に変更するとうまく動かなくなるようです。
http://kymmt90.hatenablog.com/entry/launchd_brew_yosemite
Yosemite では /etc/launchd.conf という lanunchd 設定ファイルが廃止されている(バグ?)ことがわかりました。これは困ります。回避方法を検索してみると、次のようなWWWページがありました 。
Setting environment variables via launchd.conf no longer works in OS X Yosemite?ここではAppleScriptとUsers&GroupsにあるLogin Itemsを使う方法が紹介されています。
http://stackoverflow.com/questions/25385934/setting-environment-variables-via-launchd-conf-no-longer-works-in-os-x-yosemite
To avoid this, launchそこでApplication/UtilitiesフォルダにあるAppleScript Editorを起動し、中ほどの入力欄に以下のように書き込みます。AppleScript Editor
, enter a command like this:
do shell script "launchctl setenv variablename value"
(Use multiple lines if you want to set multiple variables)
Now save (⌘
+s
) as File format: Application. Finally openSystem Settings
→ Users & Groups → Login Items and add your new application.
do shell script "launchctl setenv LANG en_US.UTF-8"そして/Users/ユーザー名/Applicationフォルダに名前をつけて保存します。これだけでは実行できないので[Export...]メニューからApplication形式で書き出します。次に、Systems Preferences/Users&Groupsで自分自身のアカウント選び、Login Itemsに先ほどのApplication形式で書きだしたApple Scriptファイルを追加します。
これで、英語環境でもmoshをterminal.appから使えるようになりました。
うまくLANG環境変数が設定されているかは、わざと「Set locale environment variables on startup」にチェックをしてmoshを起動してみるとわかります。
mosh-server needs a UTF-8 native locale to run.LANGは確かにen_US.UTF-8になっていて、LC_CTYPEは「Set locale environment variables on startup」にチェックをしているために、UTF-8になってしまっています。
Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",
The client-supplied environment (LC_CTYPE=UTF-8) specifies
the character set "".
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_COLLATE="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
英語環境でTerminal.appが正しくen_US.UTF-8と設定してくれるなら、このような苦労は不要なのですが、残念です。