I just installed CentOS 6 and whenever I login to the system via SSH remotely, I get the following error:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)
When I type "locale" on the command line, I get the following output:
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=
What can be the problem? How can I solve this issue?
Solved this by disabling "Set locale environment variables on startup" in Terminal Settings > Advanced as per this screenshot.
NOTE: If you use iTerm2 you can disable the "Set locale variables automatically" option in Preferences > Profiles > Terminal
Simple way:
Add
to
/etc/sysconfig/i18n
.On the server you ssh from do you have a locale set via an environment variable? In looking at my CentOS 6 installation, the only locale that I can find supported is identified as
en_US.utf8
(discovered usinglocale -a
command). Could this be the problem?In my testing, when I set the
LC_ALL
environment variable toen_US.UTF-8
, ssh'd to the server, the output of my locale command was set toPOSIX
in my case. This the same as when I have NOT set (i.e. unset) theLC_ALL
variable before ssh'ing.When I set my
LC_ALL
variable toen_US.utf8
oren_US.utf-8
, ssh'd to my CentOS 6 box, the output of the locale was the same as what was set on the source box.Notice I used no caps for UTF also.
What worked for me was adding a symlink in the CentOS server like this:
Once you do that commands like this work:
If you don't, this last command fails with this error:
Now, an even simpler solution is just adding this line to /etc/bashrc in the server:
I've got this specific message, when login from a Solaris X to a Centos host.
The problem is coming from 2 settings:
Send locale-related environment variables SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
On my source host, thoses settings was set this way:
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=
But, as you can see, the LC_MESSAGES, is set to fr.UTF-8, which is not an option on my destination host.
The problem was solved forcing on my source host, on .bash_profile: # export LC_ALL=fr_FR.UTF-8 export LANG=fr_FR.UTF-8
I could have solved it by asking my dest host not to take this variable from any ssh connection (generally, or by creating a locale ssh_config file for my user)
This was my fix in the past for locale errors.
Run the following: locale-gen
Then edit /etc/locale.gen. Make sure the following is uncommented:
On a local Centos 6.2 system: This did not help:
This worked:
I also deleted
locale-archive
in/usr/lib/locale
. I do not know if this was necessary.With Iterm2, is different.
Go to
Iterm2 -> Preferences
, Then Go toProfiles
tab, and choose theTerminal
tab from the bottom.Go to
Environment
category, and unmark;Finally, close and start a new session.
and make sure
LC_ALL="en_US.UTF-8"
is in or added to the /etc/sysconifg/i18nexample content
On my CentOS 8 (minimal server installation) I successfully set my locale variables like this.
Either
OR
Relogon and call
locale
to verify the result.