--- 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.