[mosh-devel] Mosh and setlocale(LC_ALL,"")

Goffredo Baroncelli kreijack at libero.it
Tue Dec 10 17:38:40 EST 2013


Hi Keith
On 2013-12-10 22:36, Keith Winstein wrote:
> Hello Goffredo,
> 
> I'm afraid there's no good answer here within the context of the C/POSIX
> locale system. If mosh didn't complain, some other locale-sensitive
> program on the server would complain (e.g. perl, or basically anything).
> ssh (as shipped by OS X/Debian/Ubuntu) also passes the locale-related
> environment variables, and you would have the same problem there.

Thanks for you reply. I know that other tools could show some problems;
I am not worried about that.

Do you think that this patch wouldn't help ?

>     >     --- a/src/util/locale_utils.cc
>     >     +++ b/src/util/locale_utils.cc
>     >     @@ -95,7 +95,7 @@ bool is_utf8_locale( void ) {
>     >
>     >      void set_native_locale( void ) {
>     >        /* Adopt native locale */
>     >     -  if ( NULL == setlocale( LC_ALL, "" ) ) {
>     >     +  if ( NULL == setlocale( LC_CTYPE, "" ) ) {


> 
> We're moving to a world where Mosh will not use the C locale support at
> all to do UTF-8 decoding and get character widths, 

If mosh cares only about UTF8, this would be good.

>
but that will just
> make this somebody else's problem.
> 
> Your good options are basically:
> (1) Unset LC_TIME before you mosh (e.g. LC_TIME= mosh servername).
> (2) Build the client's locale on the server.
> 
> -Keith
> 
> On Tue, Dec 10, 2013 at 2:23 PM, Goffredo Baroncelli <kreijack at inwind.it
> <mailto:kreijack at inwind.it>> wrote:
> 
>     Hi Keith,
> 
>     On 2013-12-10 20:11, Keith Winstein wrote:
>     > Goffredo,
>     >
>     > Unfortunately this is a general problem with the C/POSIX locale
>     system.
>     > Even British users (in en_GB.UTF-8) have trouble connecting to
>     Canadian
>     > machines in (en_CA.UTF-8)! If you give us the actual error report
>     you're
>     > getting from mosh-client or mosh-server, I may have a better
>     answer for
>     > what the right thing to do is. We have made the diagnostics pretty
>     > extensive in 1.2 and later versions.
> 
> 
> 
>     -------------------------------------client-------------------------
>     server$ set | egrep "LANG|LC_"
>     LANG=en_US.UTF-8
>     LC_TIME=en_DK.utf8                         # this var is set by ssh
>     server$ locale -a
>     C
>     C.UTF-8
>     en_US.utf8
>     italian
>     it_IT
>     it_IT at euro
>     it_IT.iso88591
>     it_IT.iso885915 at euro
>     it_IT.utf8
>     POSIX
>     $ mosh --version
>     mosh 1.2.4a
>     Copyright 2012 Keith Winstein <mosh-devel at mit.edu
>     <mailto:mosh-devel at mit.edu>>
>     License GPLv3+: GNU GPL version 3 or later
>     <http://gnu.org/licenses/gpl.html>.
>     This is free software: you are free to change and redistribute it.
>     There is NO WARRANTY, to the extent permitted by law.
> 
> 
>     -------------------------------------server-------------------------
>     client$ set | egrep "LANG|LC_"
>     LANG=en_US.utf8
>     LC_TIME=en_DK.utf8
>     client$ locale -a
>     C
>     C.UTF-8
>     en_DK.utf8
>     en_US.utf8
>     italian
>     it_IT
>     it_IT at euro
>     it_IT.iso88591
>     it_IT.iso885915 at euro
>     it_IT.utf8
>     POSIX
>     client$ mosh --version
>     mosh 1.2.4a
>     Copyright 2012 Keith Winstein <mosh-devel at mit.edu
>     <mailto:mosh-devel at mit.edu>>
>     License GPLv3+: GNU GPL version 3 or later
>     <http://gnu.org/licenses/gpl.html>.
>     This is free software: you are free to change and redistribute it.
>     There is NO WARRANTY, to the extent permitted by law.
>     ---------------------------------------------------------------------------
> 
> 
>     Both the machine support en_US.utf8; however the client has
>     LC_TIME=en_DK.utf8 which isn't supported in the server.
> 
> 
> 
>     client$ mosh server
>     ghigo at client's password:
>     The locale requested by LANG=en_US.UTF-8 isn't available here.
>     Running `locale-gen en_US.UTF-8' may be necessary.
> 
>     The locale requested by LANG=en_US.utf8 isn't available here.
>     Running `locale-gen en_US.utf8' may be necessary.
> 
>     mosh-server needs a UTF-8 native locale to run.
> 
>     Unfortunately, the local environment (LANG=en_US.UTF-8) specifies
>     the character set "US-ASCII",
> 
>     The client-supplied environment (LANG=en_US.utf8) specifies
>     the character set "US-ASCII".
> 
>     locale: Cannot set LC_ALL to default locale: No such file or directory
>     LANG=en_US.utf8
>     LANGUAGE=
>     LC_CTYPE="en_US.utf8"
>     LC_NUMERIC="en_US.utf8"
>     LC_TIME=en_DK.utf8
>     LC_COLLATE="en_US.utf8"
>     LC_MONETARY="en_US.utf8"
>     LC_MESSAGES="en_US.utf8"
>     LC_PAPER="en_US.utf8"
>     LC_NAME="en_US.utf8"
>     LC_ADDRESS="en_US.utf8"
>     LC_TELEPHONE="en_US.utf8"
>     LC_MEASUREMENT="en_US.utf8"
>     LC_IDENTIFICATION="en_US.utf8"
>     LC_ALL=
>     Connection to server closed.
>     /usr/bin/mosh: Did not find mosh server startup message.
>     ghigo at venice:~$
> 
> 
>     If I do
> 
>     $ LC_TIME= mosh server
>     ghigo at server's password:
> 
>     server$
> 
>     Everything is OK.
> 
> 
> 
>     >
>     > I'm guessing the "right answer" will involve building a locale on your
>     > client that matches something the server can do, but I'll defer
>     judgment
>     > until I can see the diagnostic output.
>     >
>     > Best regards,
>     > Keith
>     >
>     >
>     > On Tue, Dec 10, 2013 at 6:20 AM, Goffredo Baroncelli
>     <kreijack at libero.it <mailto:kreijack at libero.it>
>     > <mailto:kreijack at libero.it <mailto:kreijack at libero.it>>> wrote:
>     >
>     >     Hi all,
>     >
>     >     I am facing the problem related to locale, when the host
>     locale doesn't
>     >     match with the server locale.
>     >
>     >     The reason is that I have an uncommon setting of the environment
>     >     variable LC_TIME, which is set to en_DK.utf8 [1].
>     >
>     >     To avoid this problem I have to call mosh as below
>     >
>     >     LC_TIME= mosh <server>
>     >
>     >     and everything work properly.
>     >
>     >     Looking at the code, I noticed that in set_native_locale(), it
>     is called
>     >     setlocale( LC_ALL, "" ).
>     >     Unfortunately this function fails even if *one* setting of the
>     LC_*
>     >     doesn't match. This is what I saw.
>     >
>     >     However I suppose that mosh should care only about the
>     LC_CTYPE setting.
>     >     If so, the following patch should narrow the cases where mosh
>     fails when
>     >     the environments differ.
>     >
>     >     diff --git a/src/util/locale_utils.cc b/src/util/locale_utils.cc
>     >     index 11923ff..9e9eb0c 100644
>     >     --- a/src/util/locale_utils.cc
>     >     +++ b/src/util/locale_utils.cc
>     >     @@ -95,7 +95,7 @@ bool is_utf8_locale( void ) {
>     >
>     >      void set_native_locale( void ) {
>     >        /* Adopt native locale */
>     >     -  if ( NULL == setlocale( LC_ALL, "" ) ) {
>     >     +  if ( NULL == setlocale( LC_CTYPE, "" ) ) {
>     >          int saved_errno = errno;
>     >          if ( saved_errno == ENOENT ) {
>     >            LocaleVar ctype( get_ctype() );
>     >
>     >
>     >     In my case it works, but I don't know very well how mosh
>     interact with
>     >     locale.
>     >
>     >     Comments ?
>     >
>     >     BR
>     >     G.Baroncelli
>     >
>     >     [1] For the record, I have this setting to see in thunderbird
>     a "date
>     >     which is readable.... but this is another story.
>     >
>     >     --
>     >     gpg @keyserver.linux.it <http://keyserver.linux.it>
>     <http://keyserver.linux.it>: Goffredo
>     >     Baroncelli (kreijackATinwind.it>
>     >     Key fingerprint BBF5 1610 0B64 DAC6 5F7D  17B2 0EDA 9B37 8B82 E0B5
>     >     _______________________________________________
>     >     mosh-devel mailing list
>     >     mosh-devel at mit.edu <mailto:mosh-devel at mit.edu>
>     <mailto:mosh-devel at mit.edu <mailto:mosh-devel at mit.edu>>
>     >     http://mailman.mit.edu/mailman/listinfo/mosh-devel
>     >
>     >
> 
> 
>     --
>     gpg @keyserver.linux.it <http://keyserver.linux.it>: Goffredo
>     Baroncelli (kreijackATinwind.it>
>     Key fingerprint BBF5 1610 0B64 DAC6 5F7D  17B2 0EDA 9B37 8B82 E0B5
> 
> 
> 
> 
> _______________________________________________
> mosh-devel mailing list
> mosh-devel at mit.edu
> http://mailman.mit.edu/mailman/listinfo/mosh-devel
> 


-- 
gpg @keyserver.linux.it: Goffredo Baroncelli (kreijackATinwind.it>
Key fingerprint BBF5 1610 0B64 DAC6 5F7D  17B2 0EDA 9B37 8B82 E0B5



More information about the mosh-devel mailing list