Every time I login to my CentOS 6 server through SSH I get this error
Can anyone please explain what does that error mean & how to fix?
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
The Fix:
Thanks for Millie Smith (https://stackoverflow.com/users/2850543/millie-smith) & http://linuxforums.org.uk/index.php?topic=10318.0
Using root user through ssh
Run these commands
vi /etc/environment
& add these lines:
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
Before connecting to the host via SSH, you can set LC_ALL to C, e.g.
LC_ALL=C ssh user#example.com
I try yum reinstall glibc-common from there and #Seif Hatem's
method.
but it don not work.
you can use try this.
It works.
export LANG=en_US.UTF-8
export LC_CTYPE="en_US.UTF-8"
export LC_NUMERIC="en_US.UTF-8"
export LC_TIME="en_US.UTF-8"
export LC_COLLATE="en_US.UTF-8"
export LC_MONETARY="en_US.UTF-8"
export LC_MESSAGES="en_US.UTF-8"
export LC_PAPER="en_US.UTF-8"
export LC_NAME="en_US.UTF-8"
export LC_ADDRESS="en_US.UTF-8"
export LC_TELEPHONE="en_US.UTF-8"
export LC_MEASUREMENT="en_US.UTF-8"
export LC_IDENTIFICATION="en_US.UTF-8"
export LC_ALL=en_US.UTF-8
https://github.com/2creatives/vagrant-centos/issues/7
Related
I just installed terminator terminal emulator on my linux mint. for some reason I don't understand, it sets my password to some of the locale options. I've tried several things but they only offer a temporary fix. each time I open the terminal, it resets the locale options to my password.
LANG=koldenod19*
LANGUAGE=
LC_CTYPE="mypassword"
LC_NUMERIC=om_KE.UTF-8
LC_TIME="mypassword"
LC_COLLATE="mypassword"
LC_MONETARY=om_KE.UTF-8
LC_MESSAGES="mypassword"
LC_PAPER=om_KE.UTF-8
LC_NAME=om_KE.UTF-8
LC_ADDRESS=om_KE.UTF-8
LC_TELEPHONE=om_KE.UTF-8
LC_MEASUREMENT=om_KE.UTF-8
LC_IDENTIFICATION=om_KE.UTF-8
LC_ALL=
I've tried using sudo dpkg-reconfigure locales and export LC_ALL="eo_US.utf8" and the problem still persists.
Try this https://gist.github.com/SimonSun1988/2ef7db45e46b889783647d941ec15e4d
sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales
and in file /etc/default/locale add line LC_ALL="en_US.UTF-8" and relogin to your server.
For CentOS this worked for me.
Add these lines to /etc/environment
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
Edit your /etc/locale.gen then uncomment the following line:
en_GB.UTF-8 UTF-8
Run:
sudo locale-gen en_GB.UTF-8 UTF-8
sudo update-locale en_GB.UTF-8 UTF-8
export LANGUAGE=en_GB.UTF-8
export LC_ALL=en_GB.UTF-8
Verify it;
locale
You may get:
LANG=en_GB.UTF-8
LANGUAGE=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=en_GB.UTF-8
And Done !!!
If you are having this problem on CentOS, follow this example because nothing else worked for me.
The command localedef -i en_US -f UTF-8 en_US.UTF-8 fixes the problem, but may lead to another one:
[error] character map file UTF-8' not found: No such file or directory
default character map file ANSI_X3.4-1968' not found: No such file or directory.
Finally, executing yum -y install glibc-locale-source prior to localedef -i en_US -f UTF-8 en_US.UTF-8 installs the missing files and changes back the locale.
Now locale reports again:
LANG=en_US
.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
(...)
LC_ALL=
Hope that helps someone out there.
RedHat: Change /etc/locale.conf to
LANG=en_US.UTF-8
LC_ALL=en_US.utf-8
If you encounter this issue and are working based on Docker.
Install locales first and then generate locale.
apt install locales
locale-gen en_US.UTF-8
This worked for me :
echo "LC_ALL=en_US.UTF-8" >> /etc/environment
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
locale-gen en_US.UTF-8
Source
OS info:
uname -r
4.5.5-300.fc24.x86_64
emacs --version
GNU Emacs 25.1.1
More info about emacs:
M-x eshell
locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.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=
I can not find the right answer via google.
How to solve this?
Try setting this variable:
(setq find-ls-option '("-exec ls -ldh {} +" . "-ldh"))
This should workaround the problem.
The actual problem might be with Emacs's terminal encoding, though. Try setting
(set-terminal-coding-system 'utf-8-unix)
and carefully inspecting LC_ALL, LC_CTYPE and LANG environment variables (inside Emacs, of course).
I'm a beginner with vagrant. I try to create a virtual machine (cent os 6) on my computer with vagrant. When I run vagrant ssh, it prints this warning:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
When I run locale, I get this:
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=
I searched for an hour but I still cannot fix that.
For CentOS or Amazon AMI Linux, add these lines to /etc/environment (create it, if it doesn't exist):
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
To edit this file via SSH console, try
sudo nano /etc/environment
Edit
For Debian-related distributions (Ubuntu, etc.), you should check that /etc/default/locale is empty. That's the outcome of choosing None in dpkg-reconfigure locales which is suggested if users access via SSH (see Debian Wiki).
/etc/environment is deprecated since Debian Lenny (5.0).
Under root in bashrc add following :
vi /root/.bashrc
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
And reboot your system afterwards.
You can set LC_ALL to C, e.g.
export LC_ALL=C
or prefix before connecting to your VM:
LC_ALL=C ssh vagrant#localhost
Note: You can consider also setting SetEnv for your SSH config (man ssh_config) as explained below.
To make it permanent, you can add the following rule in your ~/.ssh/config:
Host *
SetEnv LC_ALL=C
Assuming your server got the following line in /etc/ssh/sshd_config:
AcceptEnv LANG LC_*
Check also: man ssh_config and man sshd_config.
In my case, on Slackware64 14.1 I got the error:
-bash: warning: setlocale: LC_ALL: cannot change locale (en_DK.UTF-8)
It turned out to be missing glibc packages.
Installing the packages:
glibc-2.17-x86_64-11_slack14.1
glibc-i18n-2.17-x86_64-11_slack14.1
Solved the problem.
My /etc/profile.d/lang.sh contains:
export LANG=en_DK.UTF-8
export LANGUAGE=en_DK.UTF-8
export LC_ALL=en_DK.UTF-8
export LC_COLLATE=C
Enjoy.
This might be caused by your terminal settings.
For iTerm2, uncheck this setting:
Profiles -> Terminal -> "Set locale variables automatically".
Context: In case you are working on a shared node where you can't modify locale settings, the warning might be caused by your terminal trying (and failing) to change locale.
please try next:
localedef -i en_US -f UTF-8 en_US.UTF-8
I'm using macOS. I put the following contents into my ~/.ssh/config:
Host *
SetEnv LC_CTYPE=
It seems to me the least intrusive way to alter ssh configuration.
For those getting this error in MacOS:
Open /etc/ssh/ssh_config file (in any editor you prefer, I have used vi editor in the example)
sudo vi /etc/ssh/ssh_config
(enter sudo password)
in this file, comment out the line below:
SendEnv LANG LC_*
(use # for commenting: #SendEnv LANG LC_*)
close the file. Close and reopen the terminal and try the ssh command again.
For a detailed understanding of the issue you can check this tech blog:
https://www.cyberciti.biz/faq/os-x-terminal-bash-warning-setlocale-lc_ctype-cannot-change-locale/
On Centos 6.5, running locale produces:
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="en_US.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=
After running export LC_COLLATE="en_US.UTF-8", running locale produces:
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="en_US.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=
LC_COLLATE="en_US.UTF-8" becomes LC_COLLATE=en_US.UTF-8. Double quotes are lost. How LC_COLLATE is set to "en_US.UTF-8"? If I run export LC_COLLATE='"en_US.UTF-8"', there is the following error:
-bash: warning: setlocale: LC_COLLATE: cannot change locale ("en_US.UTF-8"): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale ("en_US.UTF-8")
How I can set LC_COLLATE to "en_US.UTF-8" using some commands?
https://aws.amazon.com/amazon-linux-ami/2012.03-release-notes/
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)
[ec2-user#ip-10-136-14-68 ~]$ vi ~/.bash_profile
[ec2-user#ip-10-136-14-68 ~]$
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export LC_CTYPE="en_US.UTF-8"
how do you solve this?
Another solution is to add these lines to /etc/environment
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
The next time you log in the warning message should have disappeared.
Open your ssh_config file (in my case under Ubuntu it's located here : /etc/ssh/ssh_config), and comment this line:
SendEnv LANG LC_*
This means :
#SendEnv LANG LC_*