CentOS 6をインストールしたばかりで、リモートからSSH経由でシステムにログインすると、次のエラーが発生します。
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)
コマンドラインで「locale」と入力すると、次の出力が表示されます。
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=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=
何が問題なのでしょうか?この問題を解決するにはどうすればよいですか?
Sshを実行するサーバーで、環境変数を介してロケールを設定していますか?私のCentOS 6インストールを見ると、サポートされているとわかる唯一のロケールはen_US.utf8
(locale -a
コマンドを使用して検出)として識別されます。これは問題でしょうか?
私のテストでは、LC_ALL
環境変数をen_US.UTF-8
に設定し、サーバーにsshすると、私のロケールコマンドの出力がPOSIX
に設定されました。これは、sshする前にLC_ALL
変数を設定していない(つまり、設定を解除していない)場合と同じです。
私のLC_ALL
変数をen_US.utf8
またはen_US.utf-8
に設定し、CentOS 6ボックスにsshすると、ロケールの出力はソースボックスで設定されたものと同じでした。
UTFにも大文字を使用していないことに注意してください。
このスクリーンショットに従って、[ターミナルの設定]> [詳細設定]で[起動時にロケール環境変数を設定する]を無効にすることでこれを解決しました。
注:iTerm2を使用している場合は、[設定]> [プロファイル]> [ターミナル]で[ロケール変数を自動的に設定]オプションを無効にできます。
追加
LC_CTYPE="en_US.UTF-8"
/etc/sysconfig/i18n
。
Solaris XからCentosホストにログインすると、この特定のメッセージが表示されます。
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
問題は2つの設定から来ています:
ロケール関連の環境変数を送信します。SendEnvLANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
私のソースホストでは、これらの設定は次のように設定されています。
SOURCE#LANG = LC_CTYPE = fr_FR.UTF-8 LC_NUMERIC = fr_FR.UTF-8 LC_TIME = fr_FR.UTF-8 LC_COLLATE = fr_FR.UTF-8 LC_MONETARY = fr_FR.UTF-8 LC_MESSAGES = fr.UTF-8 LC_ALL =
しかし、ご覧のとおり、LC_MESSAGESはfr.UTF-8に設定されています。これは宛先ホストのオプションではありません。
DEST#locale -a | grep fr_FR
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8
私のソースホストの.bash_profileで強制的に問題を解決しました:#export LC_ALL = fr_FR.UTF-8 export LANG = fr_FR.UTF-8
私のdestホストにこの変数をssh接続から取得しないように要求することで解決できました(通常、またはユーザーのロケールssh_configファイルを作成することにより)
私にとってうまくいったのは、次のようにCentOSサーバーにシンボリックリンクを追加することでした。
ln -s /usr/lib/locale/en_US.utf8 /usr/lib/locale/UTF-8
この作業のようなコマンドを実行すると、次のようになります。
export LC_CTYPE=UTF-8
そうしないと、この最後のコマンドは次のエラーで失敗します。
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
さらに簡単な解決策は、次の行をサーバーの/ etc/bashrcに追加することです。
export LC_CTYPE="en_US.utf8"
ローカルCentos 6.2システムの場合:これは役に立ちませんでした:
localedef -i en_US -f UTF-8 en_US.UTF-8
これはうまくいきました:
localedef --no-archive -i en_US -f UTF-8 en_US.UTF-8
locale-archive
の/usr/lib/locale
も削除しました。これが必要だったかどうかはわかりません。
これは、過去のロケールエラーの修正でした。
以下を実行します:locale-gen
次に、/ etc/locale.genを編集します。次のコメントを外してください:
en_US.UTF-8 UTF-8
en_US ISO-8859-1
generate locale
locale-gen
LC_ALL="en_US.UTF-8"
が/ etc/sysconifg/i18nにあるか、追加されている
コンテンツの例
LANG="en_GB.UTF-8"
SYSFONT="latarcyrheb-Sun16"
LC_ALL="en_US.UTF-8"