#!/bin/sh # Copyright (c) 1999, 2000 Red Hat, Inc. # redirect errors to a file in user's home directory if we can for errfile in "${TMPDIR-/tmp}/.xsession-$USER" \ "/tmp/.xsession-$USER" \ "$HOME/.xsession-errors" do if cp /dev/null "$errfile" 2> /dev/null ; then chmod 600 "$errfile" exec > "$errfile" 2>&1 break fi done [ "`echo $PATH | grep -q /usr/X11R6/bin`" = "" ] && PATH="${PATH}:/usr/X11R6/bin" [ "`echo $PATH | grep -q "$HOME/bin"`" = "" ] && PATH="$PATH:$HOME/bin" test -f /etc/profile && . /etc/profile test -f $HOME/.profile && . $HOME/.profile if [ ! -f $HOME/.profile ] && echo $SHELL |grep -q "bash"; then test -f $HOME/.bash_profile && . $HOME/.bash_profile fi userresources=$HOME/.Xresources usermodmap=$HOME/.Xmodmap userxkbmap=$HOME/.Xkbmap sysresources=/etc/X11/Xresources sysmodmap=/etc/X11/Xmodmap sysxkbmap=/etc/X11/Xkbmap # merge in defaults [ -f "$sysresources" ] && xrdb -merge "$sysresources" [ -f "$userresources" ] && xrdb -merge "$userresources" # 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 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 [ -f "$sysmodmap" ] && xmodmap "$sysmodmap" [ -f "$usermodmap" ] && xmodmap "$usermodmap" fi unset XKB_IN_USE # run all system xinitrc shell scripts. for i in /etc/X11/xinit/xinitrc.d/* ; do if [ -x "$i" ]; then . "$i" fi done # exec specified session or tell user if not found loadsess() { if [ -f "$HOME/bin/$sess.sh" ]; then exec "$HOME/bin/$sess.sh" else [ `/usr/bin/which $sess` ] && exec $sess || exec xmessage -center \ -buttons OK:0 -default OK "Sorry, $sess not found." fi } # now, we see if xdm/gdm/kdm has asked for a specific environment case $1 in failsafe) exec xterm -geometry 80x24-0-0 ;; gnome) sess=gnome-session loadsess ;; kde) sess=startkde loadsess ;; windowmaker) sess=wmaker loadsess ;; xfce) sess=startxfce loadsess ;; xfce4) sess=xfce4-session loadsess ;; ""|default) # take default action if [ -f "$HOME/.Xclients" ]; then exec "$HOME/.Xclients" else exec /etc/X11/xinit/Xclients fi ;; *) sess=$1 loadsess esac