[systemd-devel] Locale setup for non-shells
Lennart Poettering
mzerqung at 0pointer.de
Tue May 23 20:42:53 UTC 2017
On Mon, 22.05.17 19:36, Nikolai Kondrashov (Nikolai.Kondrashov at redhat.com) wrote:
> On 05/22/2017 04:46 PM, Lennart Poettering wrote:
> > On Mon, 22.05.17 14:11, Nikolai Kondrashov (Nikolai.Kondrashov at redhat.com) wrote:
> > > I'm trying to solve a problem of supplying locale settings to non-shell
> > > programs acting as login shells in Fedora and RHEL, as described
> > > below.
> >
> > Which services precisely are running these PAM sessions?
> >
> > Note that explicitly importing /etc/locale.conf should be entirely
> > unnecessary: systemd reads that anyway and adds it to the environment
> > of all services it spawns.
> >
> > I am pretty sure instead of readding this to the env block through PAM
> > it should just stay in place anyway, and simply be inherited
> > down. Hence, I'd claim that the services setting up the PAM session
> > are simply too eager in cleaning up the environment and should be
> > fixed to leave LANG= and LC_*= in the environment passed to activates sessions.
> >
> > > So far it seems the Debian way of doing things will work.
> > >
> > > Could you please confirm that the format of locale.conf is not going to change
> > > in a way incompatible with what pam_env.so expects?
> > >
> > > The pam_env.so manpage:
> > >
> > > http://man7.org/linux/man-pages/man8/pam_env.8.html
> > >
> > > The locale.conf manpage:
> > >
> > > https://www.freedesktop.org/software/systemd/man/locale.conf.html
> > >
> > > Also, am I missing anything? Is there another way systemd can help here?
> >
> > The syntax described in the man page is unlikely to change. I have no
> > idea about the format pam_env expects though.
> >
> > And I can only recommend fixing the services in question instead of
> > taping over the issue with pam_env...
>
> Thanks for your prompt response, Lennart!
>
> I'm talking about logins on console now, so I assume the service in question,
> technically, is systemd-logind. However, I found out that it's working OK, and
> the real problem is these two pieces in /lib/systemd/system/getty at .service:
>
> # Unset locale for the console getty since the console has problems
> # displaying some internationalized messages.
> Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
>
> and
>
> ExecStart=-/sbin/agetty --noclear %I $TERM
>
> What the first one does is obvious, and the second needs to be modified to
> make login preserve the environment. Like this:
>
> ExecStart=-/sbin/agetty -o "-p -- \u" --noclear %I $TERM
>
> Do you think the two pieces above can be changed to let the locale environment
> through?
Yes, I think that would make sense to do. Could you file an issue
asking for that on systemd github? (or even better: a PR implementing
it!)
https://github.com/systemd/systemd/issues/new
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list