Je viens d'installer CentOS 6 et chaque fois que je me connecte au système via SSH à distance, j'obtiens l'erreur suivante:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)
Lorsque je tape "locale" sur la ligne de commande, j'obtiens la sortie suivante:
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=
Quel peut être le problème? Comment puis-je résoudre ce problème?
Sur le serveur d'où vous venez, avez-vous des paramètres régionaux définis via une variable d'environnement? En regardant mon installation CentOS 6, le seul environnement local que je peux trouver pris en charge est identifié comme en_US.utf8
(découvert à l'aide de locale -a
commande). Est-ce que ceci pourrait être le problème?
Lors de mes tests, lorsque j'ai défini le LC_ALL
variable d'environnement à en_US.UTF-8
, ssh'd vers le serveur, la sortie de ma commande locale a été définie sur POSIX
dans mon cas. C'est la même chose que lorsque je n'ai PAS défini (c'est-à-dire non défini) le LC_ALL
variable avant ssh'ing.
Quand je mets mon LC_ALL
variable à en_US.utf8
ou en_US.utf-8
, ssh'd sur ma boîte CentOS 6, la sortie des paramètres régionaux était la même que celle définie sur la boîte source.
Remarquez que je n'ai pas utilisé de capuchons pour UTF également.
Résolu cela en désactivant "Définir les variables d'environnement locales au démarrage" dans Paramètres du terminal> Avancé selon cette capture d'écran.
REMARQUE: si vous utilisez iTerm2, vous pouvez désactiver l'option "Définir automatiquement les variables locales" dans Préférences> Profils> Terminal
Ajouter
LC_CTYPE="en_US.UTF-8"
à /etc/sysconfig/i18n
.
J'ai ce message spécifique lorsque je me connecte d'un Solaris X à un hôte 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
Le problème vient de 2 paramètres:
Envoyer des variables d'environnement liées aux paramètres régionaux SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
Sur mon hôte source, ces paramètres ont été définis de cette façon:
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 =
Mais, comme vous pouvez le voir, le LC_MESSAGES est défini sur fr.UTF-8, qui n'est pas une option sur mon hôte de destination.
DEST#locale -a | grep fr_FR
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8
Le problème a été résolu en forçant sur mon hôte source, sur .bash_profile: # export LC_ALL = fr_FR.UTF-8 export LANG = fr_FR.UTF-8
J'aurais pu le résoudre en demandant à mon hôte Dest de ne pas prendre cette variable à partir d'une connexion ssh (généralement, ou en créant un fichier ssh_config local pour mon utilisateur)
Ce qui a fonctionné pour moi a été d'ajouter un lien symbolique dans le serveur CentOS comme ceci:
ln -s /usr/lib/locale/en_US.utf8 /usr/lib/locale/UTF-8
Une fois que vous avez fait cela, les commandes comme celle-ci fonctionnent:
export LC_CTYPE=UTF-8
Si vous ne le faites pas, cette dernière commande échoue avec cette erreur:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
Maintenant, une solution encore plus simple consiste simplement à ajouter cette ligne à/etc/bashrc sur le serveur:
export LC_CTYPE="en_US.utf8"
Sur un système Centos 6.2 local: cela n'a pas aidé:
localedef -i en_US -f UTF-8 en_US.UTF-8
Cela a fonctionné:
localedef --no-archive -i en_US -f UTF-8 en_US.UTF-8
J'ai également supprimé locale-archive
dans /usr/lib/locale
. Je ne sais pas si c'était nécessaire.
C'était mon correctif dans le passé pour les erreurs locales.
Exécutez ce qui suit: locale-gen
Modifiez ensuite /etc/locale.gen. Assurez-vous que les éléments suivants ne sont pas commentés:
en_US.UTF-8 UTF-8
en_US ISO-8859-1
generate locale
locale-gen
et assurez-vous que LC_ALL="en_US.UTF-8"
se trouve dans/etc/sysconifg/i18n
exemple de contenu
LANG="en_GB.UTF-8"
SYSFONT="latarcyrheb-Sun16"
LC_ALL="en_US.UTF-8"