ロケール

ロケールで頭を抱えたのでメモ

XXXXXX@server:~$ man ls
man: can’t set the locale; make sure $LC_* and $LANG are correct

何かの拍子にこんなエラーがでる。前から気になっていたのだが、まぁいいやと放置していた。ちょっと調べたのでメモ。

コンソールでログインすると、そんなエラーは出ない。sshでログインしたときだけ、その症状。

あ。

# Disable japanese display in console
case $TERM in
linux) LANG=C ;;
*) LANG=ja_JP.UTF-8 ;;
esac

.basharcの最後にこんな記述してるの忘れてた。これなら、コンソールでログインしたらLANG=C、sshでログインしたらLANG=ja_JP.UTF-8になっているはず。

う~ん。envやると、ちゃんとLANG=ja_JP.UTF-8になってるんだよなぁ。

XXXXXX@server:~$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: LC_ALL??????????????????: ??????????????????????
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE=UTF-8
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

こっちも、確かに、LANG=ja_JP.UTF-8になってるな。

へ?LC_CTYPE=UTF-8ってなんだよ。そんなん知らないよ。envの方も確認してみると、LC_CTYPE=UTF-8になっている。

え~、そんなんどこで設定してるんだよ。

ということで、頭を抱えること、数時間。あっちのファイルをひっくり返し、こっちのファイルを眺め、Google先生のお世話になり。。。locale-genや、dpkg-reconfigure localeなんてやり直してみたり。

とりあえず、

XXXXXX@server:~$ export LC_TYPE=ja_JP.UTF-8

とやれば、エラーが止まることは確認。

あー、めんどくせ、これ、.bashrcに書いちゃおうかなぁ~。気持ち悪いなぁ。

あ。これだ。

ローカルはMacを使ってるんだけど、ローカルのターミナルでenvを見てみると、確かにローカル(MAC)側ではLC_CTYPE=UTF-8になっている。

ssh –v でログインすると、

debug1: Sending environment.
debug1: Sending env LC_CTYPE = UTF-8

こいつだ~~~。ぶ~ぶ~。Macの/etc/ssh_configには、

Host *
  SendEnv LANG LC_*

ってちゃんとかいてあるよ~。こいつがLC_の設定を送っちゃってたんだ。

mac:~ XXXXX$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

Macでlocaleやるとこんな感じ。こいつだ~、こいつが俺の頭をごちゃごちゃにしてたんだぁ。

ということで、sshでログインすると、LANGやLC_を転送するらしい。

で、もうちょっとぐぐってみると。。。

Terminal > Preferences… > Settings > Advanced

Set local environment variables on startup <- Uncheck

ん?

001

おまえか~。チェックを外したら、綺麗に動きました。

納得いったので、満足。

コメントを残す