--- Philip Guenther <[EMAIL PROTECTED]> wrote:

> pOn Sun, Jun 15, 2008 at 12:46 PM, F. Caulier
> <[EMAIL PROTECTED]> wrote:
> > --- Pieter Verberne <[EMAIL PROTECTED]>
> wrote:
> >
> >> On Sun, Jun 15, 2008 at 07:20:32AM -0700, F.
> Caulier
> >> wrote:
> >> > I get the following when I (as root and
> standard user)
> >> > execute pkg_info, pkg_add or pkg_delete with
> Xorg on:
> >> >
> >> > # pkg_info
> >> > perl: warning: Setting locale failed.
> >> > perl: warning: Please check that your locale
> settings:
> >> >                LC_ALL = (unset)
> >> >                LC_CTYPE = "en_US.UTF-8",
> >> >                LANG =  (unset)
> >> >          are supported and installed on your
> system.
> >> >  perl: warning: Falling back to standard locale
> ("C").
> 
> So something has set LC_CTYPE to en_US.UTF-8, a
> locale which is not
> supported by OpenBSD, which results in the
> setlocale() call failing,
> something perl complains about so that you don't
> blame perl when you
> get broken results.
> 
> 
> ...
> >> I found a workaround:
> >>
> >> # ln -s /usr/share/locale/en_GB.ISO8859-1
> >> /usr/share/locale/en_US.UTF-8
> 
> That seems like a really bad idea to me.  UTF-8 and
> ISO8859-1 are
> fundamentally different: UTF-8 uses variable-length
> characters while
> ISO8859-* uses fixed-width (8bit) characters. 
> Giving the locale calls
> the same data for those two is likely to result in
> incorrect behavior
> for all characters >127.  Wouldn't it be better to
> simply not lie and
> just set the locale to en_US.ISO8859-1?
> 
> 
> >> > The point is that, I didn't changed anything
> related
> >> > locales and I couldn't find any config files
> where
> >> > these locales are specified. So I'm wondering
> why this
> >> > problem appears if I didn't change anything.
> 
> Well, have you examined all the programs involved in
> getting to that
> shell inside xterm to see if any of them document
> that they alter the
> environment?  For example, if you use 'uxterm'
> instead of 'xterm' then
> you'll see exactly the above behavior, as uxterm is
> just a script that
> sets LC_CTYPE=en_US.UTF-8 and then invokes xterm
> with the -en option.
> 
> If nothing obvious sticks out, consider debugging
> further by checking
> the environment seen by your .xsession (if you xdm)
> by adding a line
> like this:
>     env > $HOME/.xsession-env.out
> 
> to it.  Similarly, check the shell's environment by
> doing something
> similar from your .profile.
> 
> 
> > I tried to figure out why this problem occurs and
> > following to that I noticed that this perllocale
> > warning only comes up when dropping a pkg_*
> directly
> > in xterm. When using screen in an xterm and
> dropping
> > pkg_* to it everything will work fine. Same for
> tty
> > shells without X where everything works fine too.
> 
> Windows inside screen inherit their environment from
> the original
> screen process.  So, how do you start the initial
> (daemon) screen
> process?  From outside X, before running xinitrc? 
> From your .xinitrc
> or .xsession?  From an xterm?
> 
> 
> > I don't know much about this terminal stuff, but
> if
> > everything beside XTerm works fine, could it be
> that
> > XTerm itself and not the locales are the problems'
> > source? Maybe XTerm doesn't manage to pass on the
> > locales correctly?
> 
> Something is setting LC_CTYPE to an unsupported
> value.  That's the
> program that needs to be fixed.
> 
> 
> > Some questions:
> > - Is this bug a dangerous one or can I ignore it
> safely?
> 
> perl complains about it because you may get bogus
> results from various
> operations.  That doesn't sound ignorable to me.
> 
> 
> > - Is this a bug related to XTerm?
> 
> Insufficient data.
> 
> 
> > - Should I set the LC_TYPE and LANG variables in
> > /etc/login.conf? (Is this a clean solution?)
> 
> Why do you think that would solve the problem?
> 
> 
> > - If I want to get the OpenBSD's default locale
> (is
> > this C/POSIX or another one?) back what file
> should I
> > link to whom? (Following Pieter's workaround)
> 
> Why would you do that instead of simply not setting
> LC_CTYPE?
> 
> 
> > - What about copying a CL_TYPE file from [0] in to
> the
> > concerned directory which is listed by perl?
> 
> The files in cvs are in a human-readable text source
> format that needs
> to be 'compiled' into a binary format used by the
> locale subsystem, so
> simply copying them would be a Bad Thing.  Beyond
> that, there's the
> question of whether the locale code in the C library
> will actually
> handle the locale data for the *.UTF-8 locales.  My
> guess is that the
> answer is "no" and that it simply won't work.  After
> all, if it did,
> you would expect the OpenBSD developers to have
> included them in the
> normal builds and distributions.
> 
> Making the locale stuff work 100% correctly is quite
> complicated and
> is still, as I understand it, a work-in-progress. 
> In the meantime,
> using the ISO8859-1 locales instead of the UTF-8
> locales is still,
> IIRC, the recommended course.
> 
> 
> Philip Guenther
> 

Thank you very much for this very helpful post.

As I have some plan9port programs running on the
concerned machine I thought that maybe these are
responsible for setting this UTF-8 locale (as Plan 9
is pure UTF-8), so I switched off every Plan 9 related
programs on startup. But, that didn't help.

After that I checked if the xterms which I start
through ~/.xinitrc are really xterms and not uxterms.
But everything's correct, they're only xterms.

So, if the problem occurs only with xterms which I
start during the X session through my window manager's
(dwm) keybinding the problem must be related to dwm.
And it really was, I looked at the config.h and found
that dwm executes uxterm instead of xterm. I changed
that, compiled and now everything works fine.

Thanks everybody for your support.

Reply via email to