CentOS7にて正しくlocale設定している(はず)なのに、想定通りにlocale設定されなかった。
いろいろ調べたところ、クライアント側(Mac)の環境変数がSSH接続の際に引き継がれているのが原因と分かったため、備忘録としてメモ
#何が問題だったか
サーバにSSH接続した後、locale設定が想定通りになっていなかった
初めのlocale設定を確認
$ localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us
X11 Model: pc105
キーボードをjp109に変更
$ localectl list-keymaps | grep jp
jp
jp-OADG109A
jp-dvorak
jp-kana86
jp106
$ sudo localectl set-keymap jp-OADG109A
$ localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: jp-OADG109A
X11 Layout: jp
X11 Model: jp106
X11 Options: terminate:ctrl_alt_bksp
サーバ再起動後、再度SSHログインしてみると、↓の通り、LANG=ja_JP.UTF-8のままになっていた。
$ locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.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=
しかし、localectl
コマンドで確認すると、LANG=en_US.UTF-8に設定できている(?)
$ localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: jp-OADG109A
X11 Layout: jp
X11 Model: jp106
X11 Options: terminate:ctrl_alt_bksp
#原因と解決策
調べたところ、MacやLinuxからSSH接続を行うと、接続元のクライアントに設定されている環境変数が接続先に引き継がれる場合があるとのこと。
これにはクライアント側、接続先側の両方の設定が関係するが、今回はクライアント側(MAC)の設定変更により解決した。
ssh_config
ファイルの「SendEnv」というパラメータで、「LANG」や「LC_〇〇」関連の設定が接続先に送信されていたため、ここをコメントアウトする。(↓の最下行)
$ tail /etc/ssh/ssh_config
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h
Host *
SendEnv LANG LC_*
すると、再度SSH接続した時にlocale設定が変わっているのが確認できた。
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
#参考
[ユーザのロケール設定方法]
(https://www.server-memo.net/centos-settings/system/user-locale.html)
[【 localectl 】コマンド――ロケール設定の確認と変更]
(https://www.atmarkit.co.jp/ait/articles/1811/30/news060.html)