Centosが言語環境変数$ LANGを変更しても効果がない理由を覚えておいてください

質問の背景:

/etc/locale.confを編集して、LANG = "en_US.UTF-8"に変更します。サーバーを再起動した後、システムに入ると、中国語が表示されます。

トラブルシューティングと分析:(問題のある環境を再現する)
  1. 現在のシステムがen_US.UTF-8ロケールをサポートしていることを確認します(en_US.utf8とen_US.UTF-8は同じ効果があります)
# locale -a | grep en_US
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8                              //英語のutf8ロケールがサポートされています
  1. 現在のシステムが有効なロケールを確認します
root@BJ-CentOS7 ~ # echo $LANG
zh_CN.UTF-8//有効なロケールはChineseutf8です
root@BJ-CentOS7 ~ # locale
LANG=zh_CN.UTF-8//有効なロケールはChineseutf8です
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
  1. システムの現在の構成を確認してください。実際に英語で構成されており、サーバーが再起動され、環境変数$ LANGの構成が有効になり、他の関連する構成ファイルに関連する構成が見つかりません。
root@BJ-CentOS7 ~ # grep LANG /etc/locale.conf 
LANG="en_US.UTF-8"
root@BJ-CentOS7 ~ # grep LANG /etc/profile
root@BJ-CentOS7 ~ # grep LANG ~/.bashrc 
  1. VNCで正常に動作していることがわかりましたが、リモート接続は有効になりません
    問題は基本的に明らかです。リモート接続中のSSH構成は、現在の環境変数構成をリモートホストセッションに渡します。
    SSH構成ファイルリファレンスの紹介:[https://www.cnblogs.com/52linux/archive/2012/03/24/2415470.html](https://www.cnblogs.com/52linux/archive/2012/03/24/2415470.html)

SendEnvパラメーターとAcceptEnvパラメーターは、サーバーでスプリングボードおよび接続されるターゲットサーバーとしてデフォルトで構成され、$ LANG変数はクライアントとリモートホストの両方で構成されます。これにより、クライアント環境で指定された環境変数がリモートセッションで有効になります。アップ

クライアントのssh_config構成ファイルの場合:SendEnvパラメーターは、リモートセッションに送信される環境変数を定義するために使用されます。
リモートホストのsshd_config構成ファイル:AcceptEnvパラメーターを使用して、一致する環境変数を受け取るかどうかを定義します。

root@BJ-CentOS7 ~ # grep AcceptEnv /etc/ssh/sshd_config 
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
root@BJ-CentOS7 ~ # 
root@BJ-CentOS7 ~ # grep SendEnv /etc/ssh/ssh_config 
 SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
 SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
 SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
 SendEnv XMODIFIERS

解決: #####
  1. リモートツールを介してサーバーに直接接続します。クライアントのssh構成の影響を受けません。
  2. クライアントまたはリモートホストのSSH構成で$ LANG変数送信の関連する構成を削除します
    SendEnvパラメーターとAcceptEnvパラメーターがそれぞれ削除された後、ssh_configとsshd_configはファイルをLANG値と一致させます


参照文書:
https://www.cnblogs.com/52linux/archive/2012/03/24/2415470.html

Recommended Posts

Centosが言語環境変数$ LANGを変更しても効果がない理由を覚えておいてください
Centos7は、システム言語を簡略化された中国語に変更します