diff options
Diffstat (limited to 'prefdm')
-rwxr-xr-x | prefdm | 79 |
1 files changed, 79 insertions, 0 deletions
@@ -0,0 +1,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 |