Re: Ideal place to set environment variables
On Fri 30 Mar 2018 at 09:59:22 (-0400), Greg Wooledge wrote:
> On Thu, Mar 29, 2018 at 09:42:34PM +0100, Jonathan de Boyne Pollard wrote:
> > I think that login.conf is a step in the right direction, and I'm planning
> > on making tools that support it. Or, rather, on making the tools that
> > already support it on the BSDs also support it on Linux operating systems.
> > * http://netbsd.gw.com/cgi-bin/man-cgi?login.conf
> > * https://www.freebsd.org/cgi/man.cgi?query=login.conf
> > * https://man.openbsd.org/login.conf
> > * http://jdebp.eu./Softwares/nosh/guide/userenv-fromenv.html
> > I already use them to set the GUI environment from login.conf on TrueOS.
> > * https://unix.stackexchange.com/a/390089/5132
> I have an extremely simple real-world litmus test which every system
> I've ever seen so far has failed:
> How do I set MAIL=$HOME/Maildir/ in the login environment of every
> user, regardless of their shell, or how they log in (console, ssh,
> X Display Manager, GNOME Display Manager, etc.)?
> That's it. Simple, right? But login.conf can't do it. And pam_env.so
> can't do it. They only allow static strings with no substitutions.
> In fact I'm not aware of ANYTHING that can do it.
> The closest I've seen is sshd_config which uses %h and %u tokens in
> some contexts, but only for specific sshd configuration parameters --
> not for setting environment variables.
> In the real world, today, the only solution is to duplicate that setting
> in multiple places, so that (hopefully) every conceivable login method +
> shell combination will pick up at least one of them.
A shotgun approach may work well for something like MAIL=$HOME/Maildir/
where you *always* want it set, and setting it again has no side-effects.
But a more focussed approach is necessary when setting, say, PATH.