aboutsummaryrefslogtreecommitdiffstats
path: root/prefdm
blob: 6d4be7268405c994fe910586ee23ed90efa7fd46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/sh

PATH=/sbin:/usr/sbin:/bin:/usr/bin
HOME=/root
export HOME

# xdm-like program are launched from the console, however, the locale-setting
# can be done in a way that console is not localize, while X11 is.
# That is handled by the lang.sh script, depending on the existance of
# $DISPLAY or $DESKTOP variable. Now that $DESKTOP is defined resource lang.sh
[ -z "$DESKTOP" ] && DESKTOP=dummy_DESKTOP_variable
# We need to source this so that the login screens get translated
. /etc/profile.d/10lang.sh
[ "$DESKTOP" = "dummy_DESKTOP_variable" ] && unset DESKTOP

# Try autologin first, if wanted...
if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
	. /etc/sysconfig/autologin
	if [ -n "$USER" -a "$AUTOLOGIN" = yes ]; then
	    # shut down boot splash
	    [ -x /bin/plymouth ] && /bin/plymouth quit
	    /usr/sbin/autologin &
	    echo -n $$ > /var/lock/subsys/dm
	    wait $!
	fi
fi

# we have to assume that /etc/sysconfig/desktop has two variables, DESKTOP
# and DISPLAYMANAGER because administors may prefer a specific DM regardless
# of desktops.
# DISPLAYMANAGER is referenced by this script, and DESKTOP is referenced
# as system-wide default by /etc/X11/Xsession script only when X-session
# is opened by "startx" command. 
# when DMs open an X-session, they send DESKTOP, which is in this case
# directly selected by users, as a commandline argument of /etc/X11/Xsession.
# actually Xsession script is only able to know by existance of its first
# argument whether it is called by DM or "startx". see the logic
# in /etc/X11/Xsession.
# If DISPLAYMANAGER is not defined, then assume that it is the same as DESKTOP
dm=
if [ -f /etc/sysconfig/desktop ]; then
	. /etc/sysconfig/desktop >/dev/null 2>&1
	[ -z "$DISPLAYMANAGER" ] && DISPLAYMANAGER=$DESKTOP
	if [ "$DISPLAYMANAGER" = "GDM" -o "$DISPLAYMANAGER" = "gdm" -o "$DISPLAYMANAGER" = "GNOME" -o "$DISPLAYMANAGER" = "gnome" -o "$DISPLAYMANAGER" = "Gnome" ]; then
	    dm=GNOME
	elif [ "$DISPLAYMANAGER" = "KDM" -o "$DISPLAYMANAGER" = "kdm" -o "$DISPLAYMANAGER" = "KDE" -o "$DISPLAYMANAGER" = "kde" ]; then
	    dm=KDM
	elif [ "$DISPLAYMANAGER" = "WDM" -o "$DISPLAYMANAGER" = "wdm" ] ; then
	    dm=WDM
	    plymouth_quit=yes
	elif [ "$DISPLAYMANAGER" = "XDM" -o "$DISPLAYMANAGER" = "xdm" ] ; then
	    dm=XDM
	    plymouth_quit=yes
	elif [ "$DISPLAYMANAGER" = "SLiM" -o "$DISPLAYMANAGER" = "slim" ] ; then
	    dm=SLiM
	    plymouth_quit=yes
	elif [ "$DISPLAYMANAGER" = "LXDM" -o "$DISPLAYMANAGER" = "lxdm" ] ; then
	    dm=LXDM
	elif [ -n "$DISPLAYMANAGER" ]; then
	    dm=$DISPLAYMANAGER
	    plymouth_quit=yes
	fi
fi

# shut down boot splash
[ -x /bin/plymouth ] && [ "x$plymouth_quit" = "xyes" ] && /bin/plymouth quit

shopt -s execfail

preferred=`/etc/X11/lookupdm "$dm"`
[ -n "$preferred" ] && exec $preferred "$@" >/dev/null 2>&1 </dev/null

# Fallbacks, in order
exec gdm "$@" >/dev/null 2>&1 </dev/null
exec kdm "$@" >/dev/null 2>&1 </dev/null

# catch all exit error
[ -x /bin/plymouth ] && /bin/plymouth quit
exit 1