まとめ
(1) .zshrc
などで
export LC_CTYPE="ja_JP.UTF-8"
日本語ローカライズに非対応の場合は、
export LC_CTYPE="en_US.UTF-8"
(2) /etc/ssh/ssh_config
の SendEnv LANG LC_*
をコメントアウトする
経緯
ssh しようとして以下のエラーが出ることがある。
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
locale を見るとこのように LC_CTYPE
が UTF-8
となっている。エラーメッセージは UTF-8
という locale がないと言っている。
$ locale LANG="" LC_COLLATE="C" LC_CTYPE="UTF-8" LC_MESSAGES="C" LC_MONETARY="C" LC_NUMERIC="C" LC_TIME="C" LC_ALL=
macOS では Terminal.app 起動時に以下の設定がオンな場合、LC_CTYPE="UTF-8"
に設定される。
ssh する際に ssh_config
の SendEnv LANG LC_*
が有効で接続先の AcceptEnv LANG LC_*
も有効な場合、LC_CTYPE="UTF-8"
が ssh 先にも送られる。接続先に UTF-8
がない場合は -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
とエラーになる。
このため解消するには、
.zshrc
などでexport LC_CTYPE
するssh_config
のSendEnv LANG LC_*
を無効にする- Terminal.app を使わない
- Terminal.app の Set locale environment variables on startup をオフにする
という対策が考えられる。なお Terminal.app の設定を変えると日本語入力ができなくなるので注意。
私はたまに Terminal.app を使うのと、日本語ローカライズに対応している場合はその設定を使ってほしいので .zshrc
に export LC_CTYPE="ja_JP.UTF-8"
を書くことにした。