1 |
#!/bin/sh |
2 |
#--------------------------------------------------------------- |
3 |
# Project : Mandriva Linux |
4 |
# Module : xinitrc |
5 |
# File : Xsession |
6 |
# Version : $Id: Xsession,v 1.48 2006/05/16 13:48:06 boiko Exp $ |
7 |
# Author : Chmouel Boudjnah |
8 |
# Created On : Mon May 30 11:44:57 2005 |
9 |
# Purpose : start a graphical session according to the |
10 |
# argument. |
11 |
#--------------------------------------------------------------- |
12 |
# default values |
13 |
|
14 |
DESKTOP=default |
15 |
|
16 |
# read the user (~/.i18n) or system-wide (/etc/sysconfig/i18n) i18n settings |
17 |
. /etc/profile.d/10lang.sh |
18 |
|
19 |
if [ -z "$GDMSESSION" ]; then |
20 |
# redirect errors to a file in user's home directory if we can |
21 |
for errfile in "$HOME/.xsession-errors" "${TMPDIR-/tmp}/xses-$USER" "/tmp/xses-$USER" |
22 |
do |
23 |
if ( umask 077 && cp /dev/null "$errfile" 2> /dev/null ) |
24 |
then |
25 |
chmod 600 "$errfile" |
26 |
exec > "$errfile" 2>&1 |
27 |
break |
28 |
fi |
29 |
done |
30 |
fi |
31 |
|
32 |
# Mandriva Linux default background |
33 |
if [ "`whoami`" = root ]; then |
34 |
xsetroot -solid "#B20003" |
35 |
IS_ROOT=1 |
36 |
else |
37 |
IS_ROOT= |
38 |
fi |
39 |
|
40 |
xsetroot -cursor_name watch |
41 |
|
42 |
# clean up after xbanner |
43 |
if [ -f /usr/bin/freetemp ]; then |
44 |
freetemp |
45 |
fi |
46 |
|
47 |
userresources=$HOME/.Xresources |
48 |
userresources2=$HOME/.Xdefaults |
49 |
sysresources=/etc/X11/Xresources |
50 |
|
51 |
# merge in defaults and keymaps |
52 |
if [ -f $sysresources ]; then |
53 |
xrdb -nocpp -merge $sysresources |
54 |
fi |
55 |
|
56 |
if [ -f $userresources ]; then |
57 |
xrdb -merge $userresources |
58 |
fi |
59 |
|
60 |
if [ -f $userresources2 ]; then |
61 |
xrdb -merge $userresources2 |
62 |
fi |
63 |
|
64 |
if [ -x /etc/X11/xinit/fixkeyboard ]; then |
65 |
/etc/X11/xinit/fixkeyboard |
66 |
fi |
67 |
|
68 |
CK_XINIT_SESSION= |
69 |
if [ -x /usr/bin/ck-xinit-session -a -z "$XDG_SESSION_COOKIE" ]; then |
70 |
CK_XINIT_SESSION="/usr/bin/ck-xinit-session" |
71 |
fi |
72 |
|
73 |
|
74 |
if [ -z "$BROWSER" ] ; then |
75 |
BROWSER=`which www-browser 2> /dev/null` |
76 |
if [ -n "$BROWSER" ] && [ -e "$BROWSER" ] ; then |
77 |
export BROWSER |
78 |
fi |
79 |
fi |
80 |
|
81 |
|
82 |
# now, we see if xdm/gdm/kdm has asked for a specific environment |
83 |
if [ $# = 1 ]; then |
84 |
DESKTOP=$1 |
85 |
else |
86 |
# use default DESKTOP from config file |
87 |
# users may want to choose their own desktop |
88 |
# even when x-session is started by startx command. |
89 |
# -- Jaegeum -- |
90 |
if [ -f $HOME/.desktop ]; then |
91 |
. $HOME/.desktop >/dev/null 2>&1 |
92 |
elif [ -f /etc/sysconfig/desktop ]; then |
93 |
. /etc/sysconfig/desktop >/dev/null 2>&1 |
94 |
fi |
95 |
fi |
96 |
|
97 |
### Launch first time wizard if needed |
98 |
if [ -z "$IS_ROOT" -a ! -e $HOME/.drakfw ] && type drakfw > /dev/null 2>&1 && touch $HOME/.drakfw > /dev/null 2>&1; then |
99 |
if [ -x /etc/X11/xinit.d/numlock ]; then |
100 |
/etc/X11/xinit.d/numlock |
101 |
fi |
102 |
xsetroot -cursor_name left_ptr |
103 |
exec $CK_XINIT_SESSION drakfw |
104 |
fi |
105 |
|
106 |
|
107 |
if [ "${DESKTOP}" = default ]; then |
108 |
SESSION=$(/usr/sbin/chksession -F) |
109 |
else |
110 |
SESSION=${DESKTOP} |
111 |
fi |
112 |
|
113 |
# run scripts in /etc/X11/xinit.d |
114 |
for i in /etc/X11/xinit.d/* ; do |
115 |
[ -d $i ] && continue |
116 |
# Don't run ??foo.{rpmsave,rpmorig,rpmnew,~} scripts |
117 |
[ "${i%.rpmsave}" != "${i}" ] && continue |
118 |
[ "${i%.rpmorig}" != "${i}" ] && continue |
119 |
[ "${i%.rpmnew}" != "${i}" ] && continue |
120 |
[ "${i%\~}" != "${i}" ] && continue |
121 |
|
122 |
if [ -x $i ]; then |
123 |
if grep -q "# to be sourced" $i; then |
124 |
. $i "${SESSION}" |
125 |
else |
126 |
$CK_XINIT_SESSION $i "${SESSION}" & |
127 |
fi |
128 |
fi |
129 |
done |
130 |
|
131 |
if [ -n "$DESKTOP" ]; then |
132 |
case $DESKTOP in |
133 |
failsafe) |
134 |
xsetroot -cursor_name left_ptr |
135 |
type -p rxvt > /dev/null >& 2 && exec rxvt -geometry 80x24-0-0 |
136 |
type -p xterm > /dev/null >& 2 && exec xterm -geometry 80x24-0-0 |
137 |
type -p xvt > /dev/null >& 2 && exec xvt |
138 |
type -p twm > /dev/null >& 2 && exec $CK_XINIT_SESSION twm |
139 |
;; |
140 |
default) |
141 |
;; |
142 |
*) |
143 |
if type -p "$DESKTOP" > /dev/null; then |
144 |
exec $CK_XINIT_SESSION /bin/sh -c "$DESKTOP" |
145 |
else |
146 |
exec $CK_XINIT_SESSION /bin/sh -c "$(/usr/sbin/chksession -x=$DESKTOP)" |
147 |
fi |
148 |
;; |
149 |
esac |
150 |
fi |
151 |
|
152 |
# otherwise, take default action |
153 |
if [ -x "$HOME/.xsession" ]; then |
154 |
xsetroot -cursor_name left_ptr |
155 |
exec $CK_XINIT_SESSION /bin/sh -c "$HOME/.xsession" |
156 |
elif [ -x "$HOME/.Xclients" ]; then |
157 |
xsetroot -cursor_name left_ptr |
158 |
exec $CK_XINIT_SESSION /bin/sh -c "$HOME/.Xclients" |
159 |
fi |
160 |
|
161 |
# We may try with chksession |
162 |
if [ -x /usr/sbin/chksession ];then |
163 |
#get the first available |
164 |
SESSION=$(/usr/sbin/chksession -F) |
165 |
[ -n "$SESSION" -a "$SESSION" != default ] && exec $CK_XINIT_SESSION /bin/sh -c "$(/usr/sbin/chksession -x=$SESSION)" |
166 |
fi |
167 |
|
168 |
# Argh! Nothing good is installed. Fall back to icewm |
169 |
if [ -x /usr/bin/icewm ];then |
170 |
exec $CK_XINIT_SESSION /usr/bin/icewm |
171 |
else |
172 |
# gosh, neither icewm is available; |
173 |
# fall back to failsafe settings |
174 |
xsetroot -cursor_name left_ptr |
175 |
xclock -geometry 100x100-5+5 & |
176 |
xvt -geometry +0+50 & |
177 |
if [ -x "$BROWSER" -a -f /usr/share/doc/HTML/index.html ]; then |
178 |
$BROWSER /usr/share/doc/HTML/index.html & |
179 |
fi |
180 |
if [ -x /usr/bin/icewm-light ];then |
181 |
exec $CK_XINIT_SESSION /usr/bin/icewm-light |
182 |
elif [ -x /usr/bin/twm ];then |
183 |
exec $CK_XINIT_SESSION /usr/bin/twm |
184 |
else |
185 |
exec $CK_XINIT_SESSION /usr/bin/xsm |
186 |
fi |
187 |
fi |