| #!/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 |