OS X Terminal: -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory Fix

by on April 7, 2014 · 3 comments· LAST UPDATED April 7, 2014

in , , ,

I'm a new Apple OS X Mabbook user. I am getting an error which read as follows when I connect to any remote Linux/Unix/BSD server or machine through OS X ssh Terminal app:

ssh user@server1.cyberciti.biz
Last login: Wed Mar 26 08:45:36 2014 from 1.2.3.4
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

How do I fix this error?

Tutorial details
DifficultyEasy (rss)
Root privilegesNo
RequirementsNone
Estimated completion time2m
This warning or error is part of both OpenSSH server and OS X ssh terminal client issue. It can be fixed using various methods.

Understanding LC_* environment variables

Type the following command on remote server to display of all locales supported by Glibc:
$ locale -a
Next, type the following command to display settings on your local system (OSX/Unix/Linux based desktop):

 
printenv
echo "$LC_CTYPE"

Sample outputs:

UTF-8

The above commands display the country and language names, the character encoding used by the locale. Your local ssh client is sending your LC_* environment variables to remote sshd server. In other words, SSH will try to set every LC_* variable you have set on your local OSX system on the remove server too. Here is an example of such problem:

Fig 01: warning setlocale lc_ctype cannot change locale (utf-8)

Fig 01: warning setlocale lc_ctype cannot change locale (utf-8)

Fixing the LC_CTYPE: cannot change locale (UTF-8) error on Linux/OS X

This can be fixed as follows.

Method #1: If you are using the Terminal app on OS X

If you are using the 'Terminal' app then click on
Terminal > Preferences > Select Terminal type such as Basic (default) > Advanced tab
Make sure that the 'Set locale environment variables on startup' is unchecked as follows:

Fig.02: Fixing OS X terminal by unsetting ''Set locale environment variables on startup' check box

Fig.02: Fixing OS X terminal by unsetting ''Set locale environment variables on startup' check box


You must close all ssh session and relaunch Terminal app.

Method #2: Preventing OpenSSH Client from sending the LC_* variables on OS X / Linux / Unix desktop

Edit /etc/ssh/ssh_config or /etc/ssh_config file, enter:
$ sudo vi ~/.ssh/config
Remove or comment out as follows:

 
#SendEnv LANG LC_*
 

Save and close the file.

Option #3: Install required locale on the remote server

Finally, you can fix this problem either installing the desired locale using the localedef command, or consider choosing a different locale in locale/remote system:
# localedef -i en_US -f UTF-8 en_US.UTF-8

TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 3 comments… read them below or add one }

1 Mark May 3, 2014 at 7:20 pm

Thank you very much, Nix! This solves my problem! :)

Reply

2 Atif May 24, 2014 at 7:56 am

thanks.

The /etc/ssh_cofig change worked for me too.

Reply

3 Gustavo July 11, 2014 at 5:13 pm

Thanks!

Reply

Leave a Comment

Tagged as: , ,

Previous Faq:

Next Faq: