#!/bin/bash # # Xsession: Setup the xsession and start the xsession # script of the user for logon. # # Copyright (c) 1998-2000 SuSE GmbH Nuernberg, Germany. # Copyright (c) 2005 SUSE LINUX Products GmbH # please report bugfixes or comments at http://www.suse.de/feedback. # # Author: Werner Fink # # # What we do if we are signaled or do not leave this # script with an appropriate exec call. # failsafe="xterm -ls -T Failsafe -geometry 80x24+0+0" trap "exec $failsafe" EXIT SIGHUP SIGINT SIGPIPE SIGTERM SIGIO # # Some bash (1 and 2) settings to avoid trouble on a # failed program call. # set +e > /dev/null 2>&1 set +u > /dev/null 2>&1 set +o posix > /dev/null 2>&1 if type shopt > /dev/null 2>&1 ; then shopt -s execfail else no_exit_on_failed_exec=1 fi # # Some system defaults # XETCDIR=/etc/X11 XDMDIR=$XETCDIR/xdm XINITDIR=$XETCDIR/xinit : ${TMPDIR=/tmp} export OPENWINHOME TMPDIR test -n "$XAUTHORITY" || unset XAUTHORITY # # Save our arguments, maybe some of users call # `set' in their profile files. # argv="$@" # # Handle the NoChange option of wdm # /sbin/pidof -s wdm > /dev/null 2>&1 if test $? -eq 0 ; then if test -z "$argv" ; then if test -s $HOME/.wmrc ; then argv=$(<$HOME/.wmrc) #use wm from previous session fi else echo "$argv" > $HOME/.wmrc #save wm fi fi readonly argv # # Disable graphical login if normal login is disabled # login=false while read sh ; do if test "$sh" = "$SHELL" ; then login=true break fi done < /etc/shells if test "$login" != "true" -o "$SHELL" = "/bin/false" ; then trap "exec xmessage -timeout 10 -button okay:1 -center \ \"${0##*/}: Login for $USER is disabled.\"" \ EXIT SIGHUP SIGINT SIGPIPE SIGTERM SIGIO exit 1 fi unset sh login # # Run the X session scripts with the login shell of # the user. This function requires bash 2.0 or higher. # exec_login () { local shell=$SHELL case "$SHELL" in */csh|*/tcsh) ;; */sh|*/bash) ;; */bash2|*/bash1) ;; */pdksh|*/ksh) ;; */zsh|*/ash) ;; */rbash) shell=/bin/bash ;; */rsh) shell=/bin/sh ;; */rksh) shell=/bin/ksh ;; */rzsh) shell=/bin/zsh ;; *) shell=/bin/bash ;; esac exec -l -a ${shell##*/} ${shell} -c ${1+"exec $@"} } # # Redirect errors to the standard user log files. # for errfile in "$HOME/.xsession-errors" \ "$TMPDIR/xses-$USER" \ "/tmp/xses-$USER" do # GDM seems to handle this its self test -z "$GDMSESSION" || break # Once if KDM does handle this its self #test -z "$KDMSESSION" || break # Avoid bad symbolic links case "$errfile" in /tmp/*|$TMPDIR/*) if rm -f -- "$errfile" && errfile="$(mktemp -q "$errfile")" ; then exec > "$errfile" 2>&1 break fi ;; *) if test -e "$errfile" || errfile="$(mktemp -q "$errfile")" ; then exec > "$errfile" 2>&1 break fi ;; esac done # # Check for X11R6 in execution path # case ":${PATH}:" in *:/usr/X11R6/bin:*) ;; *) PATH="${PATH}:/usr/X11R6/bin" esac # # Window manager provided later by KDM/GDM # or read from the system settings # WINDOWMANAGER="" export WINDOWMANAGER # # Handle arguments given by xdm/kdm/gdm. # forced=no set -- $argv if test $# -ge 1 ; then case "$1" in failsafe) exec $failsafe ;; default) ;; custom) ;; *) forced=yes WINDOWMANAGER=$1 ;; esac if test $# -ge 2 -a -n "$2" ; then LANG=$2 export LANG else # get the system default locale settings: if [ -z "$LANG" -a -f /etc/profile.d/lang.sh ] ; then . /etc/profile.d/lang.sh fi fi fi # If LANG is still not set, get the system default locale settings: # if [ -z "$LANG" -a -f /etc/profile.d/lang.sh ] ; then . /etc/profile.d/lang.sh fi # # No window manager? Get system default # if test "$forced" != "yes" ; then . /etc/profile.d/profile.sh fi # # Source common code shared between the # X session and X init scripts # . /etc/X11/xinit/xinitrc.common # # Some common user and system files # session=$HOME/.xsession xinitrc=$HOME/.xinitrc sysinit=$XINITDIR/xinitrc syssess=$XDMDIR/sys.xsession # # Forced X session type if the user asked for # an other session environment. # if test "$forced" = "yes" ; then unset WINDOW_MANAGER STARTUP test -x $syssess && exec_login "$syssess" exec_login "/bin/bash $syssess" fi # User login X session # If the user doesn't have their own xsession, then run # system xsession or xinitrc script if they exist if test -f $session ; then test -x $session && exec_login "$session" exec_login "/bin/bash $session" elif test -f $xinitrc ; then test -x $xinitrc && exec_login "$xinitrc" exec_login "/bin/bash $xinitrc" elif test -f $syssess; then test -x $syssess && exec_login "$syssess" exec_login "/bin/bash $syssess" elif test -f $sysinit ; then test -x $sysinit && exec_login "$sysinit" exec_login "/bin/bash $sysinit" elif test -n "$WINDOWMANAGER" ; then unset WINDOW_MANAGER STARTUP exec_login "$WINDOWMANAGER" fi # # Call failsafe # exit 1