You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
4.0 KiB
159 lines
4.0 KiB
#!/bin/sh
|
|
#
|
|
# Slim login manager Xsession script
|
|
#
|
|
|
|
command="$@"
|
|
|
|
# this will go into slim.log along with all other echo's
|
|
# good for debugging where things go wrong
|
|
echo "$0: Beginning session setup..."
|
|
|
|
# First read /etc/profile and .profile
|
|
test -f /etc/profile && . /etc/profile
|
|
test -f "$HOME/.profile" && . "$HOME/.profile"
|
|
# Second read /etc/xprofile and .xprofile for X specific setup
|
|
test -f /etc/xprofile && . /etc/xprofile
|
|
test -f "$HOME/.xprofile" && . "$HOME/.xprofile"
|
|
|
|
# wrap possible arguments to determine whether to treat special or not
|
|
if [ "x$command" = "xcustom" ] || [ "x$command" = "xCustom" ] || [ "x$command" = "xdefault" ] || [ "x$command" = "xDefault" ]; then
|
|
command="Xsession"
|
|
fi
|
|
if [ "x$command" = "x" ]; then
|
|
# no default specified, check if Xsession will complete
|
|
# and if not then assign XSESSION to command
|
|
if [ -x "$HOME/.xsession" ] || [ -x "$HOME/.Xclients" ] || [ -x /etc/X11/xinit/Xclients ] || [ -x /etc/X11/Xclients ]; then
|
|
command="Xsession"
|
|
else
|
|
command=$XSESSION
|
|
fi
|
|
fi
|
|
|
|
# most of this is from /etc/X11/chooser.sh
|
|
sessionscript=""
|
|
if [ -n "${command}" ]; then
|
|
# find a match for $command in /etc/X11/Sessions
|
|
for x in /etc/X11/Sessions/* ; do
|
|
if [ "`echo ${x##*/} | awk '{ print toupper($1) }'`" = "`echo ${command} | awk '{ print toupper($1) }'`" ]; then
|
|
sessionscript=${x}
|
|
break
|
|
fi
|
|
done
|
|
if [ -n "${sessionscript}" ]; then
|
|
if [ -x "${sessionscript}" ]; then
|
|
command="${sessionscript}"
|
|
else
|
|
command="/bin/sh ${sessionscript}"
|
|
fi
|
|
else
|
|
|
|
# find an executable for $command
|
|
x=""
|
|
y=""
|
|
|
|
for x in "${command}" "`echo ${command} | awk '{ print toupper($1) }'`" "`echo ${command} | awk '{ print tolower($1) }'`"
|
|
do
|
|
# Fall through ...
|
|
if [ -x "`which ${x} 2>/dev/null`" ]; then
|
|
y="`which ${x} 2>/dev/null`"
|
|
break
|
|
fi
|
|
done
|
|
# note , if the command could not be found then $command will be empty
|
|
command="$y"
|
|
unset x
|
|
unset y
|
|
fi
|
|
fi
|
|
|
|
# call xrdb and xmodmap and such, since $command is not a session script
|
|
if [ -z "${sessionscript}" ]; then
|
|
userresources="$HOME/.Xresources"
|
|
usermodmap="$HOME/.Xmodmap"
|
|
userxkbmap="$HOME/.Xkbmap"
|
|
|
|
sysresources=/etc/X11/Xresources
|
|
sysmodmap=/etc/X11/Xmodmap
|
|
sysxkbmap=/etc/X11/Xkbmap
|
|
|
|
rh6sysresources=/etc/X11/xinit/Xresources
|
|
rh6sysmodmap=/etc/X11/xinit/Xmodmap
|
|
|
|
# merge in defaults
|
|
if [ -f "$rh6sysresources" ]; then
|
|
xrdb -merge "$rh6sysresources"
|
|
fi
|
|
|
|
if [ -f "$sysresources" ]; then
|
|
xrdb -merge "$sysresources"
|
|
fi
|
|
|
|
if [ -f "$userresources" ]; then
|
|
xrdb -merge "$userresources"
|
|
fi
|
|
|
|
# merge in keymaps
|
|
if [ -f "$sysxkbmap" ]; then
|
|
setxkbmap `cat "$sysxkbmap"`
|
|
XKB_IN_USE=yes
|
|
fi
|
|
|
|
if [ -f "$userxkbmap" ]; then
|
|
setxkbmap `cat "$userxkbmap"`
|
|
XKB_IN_USE=yes
|
|
fi
|
|
|
|
#
|
|
# Eeek, this seems like too much magic here
|
|
#
|
|
if [ -z "$XKB_IN_USE" -a ! -L /etc/X11/X ]; then
|
|
if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then
|
|
xkbsymbols=`sed -n -e 's/^[ ]*XkbSymbols[ ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config`
|
|
if [ -n "$xkbsymbols" ]; then
|
|
setxkbmap -symbols "$xkbsymbols"
|
|
XKB_IN_USE=yes
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# xkb and xmodmap don't play nice together
|
|
if [ -z "$XKB_IN_USE" ]; then
|
|
if [ -f "$rh6sysmodmap" ]; then
|
|
xmodmap "$rh6sysmodmap"
|
|
fi
|
|
|
|
if [ -f "$sysmodmap" ]; then
|
|
xmodmap "$sysmodmap"
|
|
fi
|
|
|
|
if [ -f "$usermodmap" ]; then
|
|
xmodmap "$usermodmap"
|
|
fi
|
|
fi
|
|
|
|
unset XKB_IN_USE
|
|
fi
|
|
unset sessionscript
|
|
|
|
# start failsafe session
|
|
if [ -z "${command}" ]; then
|
|
echo "$0: Failed to find a command to start the session, so starting a failsafe xterm."
|
|
exec xterm -geometry 80x24+0+0
|
|
fi
|
|
|
|
# run all system xinitrc shell scripts which will update command
|
|
if [ -d /etc/X11/xinit/xinitrc.d ]; then
|
|
for i in /etc/X11/xinit/xinitrc.d/* ; do
|
|
if [ -x "$i" ]; then
|
|
. "$i"
|
|
fi
|
|
done
|
|
unset i
|
|
fi
|
|
|
|
echo "$0: Setup done, will execute: $command"
|
|
exec $command
|
|
|
|
# vim:ts=4
|