SSH経由でのロケール転送のワナ
何を切り口に書いたらいいのか悩むところですが、system-config-firewall-tuiが起動できないというトラブルを巡るメモです。野暮用でEC2以外のLinux環境が必要になり、さくらのVPSを契約したのですが、軽くロックダウンしようとしてiptablesを設定しようとしたら、思わぬところで時間をとられてしまいました。
Mac OSからSSHでログインしてsystem-config-firewall-tuiを起動すると
# system-config-firewall-tui Traceback (most recent call last): File "/usr/bin/system-config-firewall-tui", line 28, in <module> import fw_config File "/usr/share/system-config-firewall/fw_config.py", line 22, in <module> locale.setlocale(locale.LC_ALL, "") File "/usr/lib64/python2.6/locale.py", line 513, in setlocale return _setlocale(category, locale) locale.Error: unsupported locale setting
というエラーで起動できない。試しにVNCコンソールから試してみると問題ない・・・。
SSH経由のセッションとVNC経由とで環境変数を比較すると、
LC_CTYPE=UTF-8
となっていて、SSHだけLC_CTYPEがセットされている。ためしに"UTF-8"をクリアするとSSH経由でもsystem-config-tuiを起動できる。
このLC_CTYPEは、SSH経由でローカルから渡されてしまっているので、ssh_configの中で該当する行をコメントアウトするとSSH経由でもLC_CTYPEがリモートに渡らなくなり、system-config-tuiの起動も問題なくなった。(自分としては、日本語でトラブルになるよりは、リモートがデフォルトで英語にフォールバックするのは、むしろ好ましいかも。)
% vim /etc/ssh_config
(略)
Host *
#SendEnv LANG LC_*
(略)
ちなみに、iTermで文字コードを"Unicode (UTF-8)"ではなく"Japanese (Max OS)"に設定すると、LC_CTYPEはセットされない。Terminal.appでは、"Unicode (UTF-8)"でも"Japanese (Max OS)"でも、LC_CTYPEがセットされる。このあたりの設定情報は解決すべきトラブルがないと調査する気力が湧かない。