Trying to use /bin/sh
Stefan Esser
se at freebsd.org
Sat Sep 28 08:12:37 UTC 2013
Am 28.09.2013 00:14, schrieb Jilles Tjoelker:
> sh's model of startup files (only login shells use startup files with
> fixed names, other interactive shells only use $ENV) assumes that every
> session will load /etc/profile and ~/.profile at some point. This
> includes graphical sessions. The ENV file typically contains only shell
> options, aliases, function definitions and unexported variables but no
> environment variables.
>
> Some graphical environments actually source shell startup files like
> ~/.profile when logging in. I remember this from CDE for example. It is
> important to have some rule where this should happen to avoid doing it
> twice or never in "strange" configurations. As a workaround, I made
> ~/.xsession a script interpreted by my login shell and source some
> startup files. A problem here is that different login shells have
> incompatible startup files.
I used to modify Xsession to do the final exec with a forced login
shell of the user. This worked for users of all shells.
The script identified the shell to use and then used argv0 to start
a "login shell" to execute the display manager.
A simplified version of my Xsession script is:
------------------------------------------------------------------
#!/bin/sh
LIB=/usr/local/lib
SH=$SHELL
[ -n "$SH" ] || SH="/bin/sh"
SHNAME=`basename $SH`
echo "exec $LIB/xdm/Xsession.real $*" | \
/usr/local/bin/argv0 $SH -$SHNAME
------------------------------------------------------------------
The argv0 command is part of "sysutils/ucspi-tcp", BTW.
This script prepends a "-" to the name of the shell that is
started to execute the real "Xsession", which had been renamed
to Xession.real.
I know that the script could be further simplified by using "modern"
variable expansion/substitution commands, but this script was in use
some 25 years ago on a variety of Unix systems (SunOS, Ultrix, HP-UX)
and I only used the minimal set of Bourne Shell facilities, then.
You may want a command to source standard profiles or environment
settings before the final exec, in case the users shell does not
load them.
Regards, STefan
More information about the freebsd-hackers
mailing list