#!/bin/sh # @vasm : XDMSET # @level: root # @description: setup display managers and its sessions # # (c) Kocil, 2003 # (c) Vector Linux, 2003 vdir=$(dirname $0) . $vdir/vasm-functions check_root KDM_CMD=/opt/kde/bin/kdm GDM_CMD=/opt/gnome2/bin/gdm WDM_CMD=/usr/X11R6/bin/wdm XDM_CMD=/usr/X11R6/bin/xdm XINIT_DIR="/etc/X11/xinit" KDMRC="/opt/kde/share/config/kdm/kdmrc" WDMRC="/etc/X11/wdm/wdm-config" #CONFIG="/etc/sysconfig/X11" CONFIG="/etc/rc.d/rc.X" new_dmconfig() { cat< $CONFIG ## X11 system configuration ## This file is read by /etc/rc.d/rc.X during init level 4/5 DISPLAY_MANAGER="$1" WINDOW_MANAGER= SOUND_SERVER= EOF } ## write down the configuration set_dmconfig() { if [ -f $CONFIG ] ; then if grep -qe "^DISPLAY_MANAGER=" $CONFIG ; then sed -i "s!^DISPLAY_MANAGER=.*!DISPLAY_MANAGER=$1!" $CONFIG else echo "DISPLAY_MANAGER=$1" >> $CONFIG fi else new_dmconfig fi } ################################################ wm_description() { case "$1" in KDE*|kde*) echo "A desktop with more than anything you want" ;; GNOME*|gnome*) echo "A desktop with almost everything you want" ;; dropline|metacity) echo "When GNOME is too heavy for you" ;; XFCE*|xfce*) echo "Good looking, medium weight desktop" ;; IceWM*|icewm*) echo "Cool, effective windows manager" ;; fluxbox*|openbox*) echo "No nonsense windows manager" ;; blackbox*) echo "The ancestor of *box windows manager" ;; enlightenment*) echo "Fancy yet light windows manager" ;; windowmaker*|wmmaker*) echo "The most decorated window manager" ;; ROX|rox|rof-filer) echo "This one rocks !!!" ;; *) echo "Another X window manager" ;; esac } dm_status() { if [ "$1" = "$DISPLAY_MANAGER" ]; then echo "on" else echo "off" fi } # Check if KDM is configurable # Only KDM 3.1> function checkkdm() { if [ ! -f $KDMRC ]; then KDMPATH=`which kdm` if [ $? = 0 ]; then KDMPATH=`dirname $KDMPATH` KDMPATH=`dirname $KDMPATH` KDMRC="$KDMPATH/share/config/kdm/kdmrc" fi fi if [ ! -f $KDMRC ]; then return 1 fi grep -e "^SessionTypes=" $KDMRC > /dev/null if [ ! $? = 0 ]; then return 1 fi return 0 } function buildkdm() { if [ ! -f $KDMRC ]; then KDMPATH=`which kdm` if [ $? = 0 ]; then KDMPATH=`dirname $KDMPATH` KDMPATH=`dirname $KDMPATH` KDMRC="$KDMPATH/share/config/kdm/kdmrc" fi fi if [ ! -f $KDMRC ]; then dbug "WARNING: Could not find $KDMRC" return 1 fi SS=`echo $1 | sed -e 's/ /,/g'` SS="$SS,default,failsafe" cp $KDMRC $KDMRC.old sed -e "s:^SessionTypes=.*:SessionTypes=${SS}:" < $KDMRC.old > $KDMRC grep -e "^SessionTypes=${SS}" $KDMRC > /dev/null if [ ! $? = 0 ]; then dbug "ERROR: Could not modify $KDMRC" return 2 else dbug "Sessions has been added to KDM". fi } function buildwdm() { if [ ! -f $WDMRC ]; then dbug "WARNING: Could not find $WDMRC" return 1 fi cp $WDMRC $WDMRC.old SS=`echo $SESSIONS | sed -e 's/ /:/g'` SS="$SS:default" sed -e "s/^DisplayManager\*wdmWm:.*/DisplayManager\*wdmWm: $SS/" < $WDMRC.old > $WDMRC grep -e "^DisplayManager\*wdmWm: $SS" $WDMRC > /dev/null if [ ! $? = 0 ]; then dbug "ERROR: Could not modify $WDMRC" return 2 else dbug "Sessions has been added to WDM". fi } ####################################################################################### # CHOOSE DISPLAY MANAGER menuA() { DISPLAY_MANAGER=`grep -e "^DISPLAY_MANAGER=" $CONFIG | cut -d = -f 2` LAST=$(grep ^DISPLAY /etc/rc.d/rc.X|cut -d "=" -f2) DIMENSION="17 56 5" TITLE="DISPLAY MANAGER CONFIGURATOR" TEXT="\n Welcome to display manager configurator. Display\n manager is the program for GUI mode login.\n\n Use SPACE BAR to select the DM, then press OK:" echo '$DCMD --backtitle "$BACKTITLE" --title "$TITLE" --radiolist "$TEXT" $DIMENSION \' > $fmenu which kdm &> /dev/null if [ $? = 0 ]; then echo 'KDM "State of the art from KDE"' $(dm_status KDM) '\' >> $fmenu fi which gdm &> /dev/null if [ $? = 0 ]; then echo 'GDM "State of the art from GNOME"' $(dm_status GDM) '\' >> $fmenu fi which wdm &> /dev/null if [ $? = 0 ]; then echo 'WDM "Diet choice from Window Maker"' $(dm_status WDM) '\' >> $fmenu fi which entrance &> /dev/null if [ $? = 0 ]; then echo 'EDM "Enlightened Display Manager"' $(dm_status EDM) '\' >> $fmenu fi which xdm &> /dev/null if [ $? = 0 ]; then echo 'XDM "The original recipe from X-Window"' $(dm_status XDM) '\' >> $fmenu fi echo ' 2> $freply' >> $fmenu #cat $fmenu . $fmenu status=$? [ $status != 0 ] && return $status CHOICE=`cat $freply` dbug "CHOICE=$CHOICE" if [ ! "$CHOICE" = "$LAST" ]; then set_dmconfig $CHOICE DISPLAY_MANAGER=$CHOICE fi dbug "DISPLAY_MANAGER=$DISPLAY_MANAGER" #case $DISPLAY_MANAGER in # WDM) # return 0 # ;; # KDM) # #[ `check_kdm` ] && return 0 # return 0 # ;; #esac # SKIP to the END wizard menuC } ######################################################################### menuB() { DIMENSION="20 70 6" TITLE="DISPLAY MANAGER SESSIONS" TEXT="\n You may select the sessions menu for $DISPLAY_MANAGER.\n The session scripts are located at $XINIT_DIR.\n If you want more options, just make your own script\n there then call this program again.\n\n For now please toggle your choices:" echo '$WCMD --backtitle "$BACKTITLE" --title "$TITLE" --checklist "$TEXT" $DIMENSION \' > $fmenu for XINIT in $XINIT_DIR/xinitrc.*; do if [ -x $XINIT ]; then FNAME=`basename $XINIT` FEXT=`echo $FNAME | cut -d . -f 2` # WARNING: this will be broken if the script name has more than one period DESCRIPTION=`grep "@description:" $XINIT | cut -d : -f 2 | sed -e "s/^ //g"` [ -z "$DESCRIPTION" ] && DESCRIPTION="$FEXT session" echo "$FEXT \"$DESCRIPTION\" on \\" >> $fmenu fi done echo ' 2> $freply ' >> $fmenu # cat $fmenu . $fmenu status=$? [ $status != 0 ] && return $status if [ "$CMD" = "" ]; then SESSIONS=`cat $freply | sed -e 's/"/ /g' -e 's/ / /g'` else SESSIONS=`cat $freply | sed -e 's!/! !g' -e 's/ / /g'` fi case $DISPLAY_MANAGER in KDM) buildkdm "$SESSIONS" ;; WDM) buildwdm "$SESSIONS" ;; esac if [ ! $? = 0 ]; then $DCMD --backtitle "$BACKTITLE" --title " ERROR " --msgbox \ "\nCould not setup $DISPLAY_MANAGER\nPlease check your installation" 0 0 clean_exit 1 fi return 0 } menuC() { if [ "$DISPLAY" ]; then DIMENSION="14 50" TITLE=" DONE " TEXT="\n Display manager has been configured to $DISPLAY_MANAGER.\n Since you are running from a GUI,\n to activate this new DM you should:\n - logout or exit from the GUI\n - switch to a console (press Ctrl-Alt-F1)\n - login as root\n - call init 2\n - call init 4\n" $DCMD --backtitle "$BACKTITLE" --title "$TITLE" --msgbox "$TEXT" $DIMENSION else DIMENSION="10 50" TITLE=" DONE " TEXT="\n Display manager has been configured to $DISPLAY_MANAGER.\n Do you want to try it now ?\n Warning, running X will be killed !" $DCMD --backtitle "$BACKTITLE" --title "$TITLE" \ --yesno "$TEXT" $DIMENSION 2> $freply status=$? [ $status != 0 ] && return $status clean_tmp clear run_level=$(runlevel | cut -f 2 -d " ") case $run_level in 5) init 3 sleep 5 init 5 ;; 4) init 2 sleep 5 init 4 ;; *) # Kill X, if any skill X sleep 3 init 5 ;; esac fi clean_exit } #################################################################################### # MAIN PROGRAM wizard menuA menuB menuC clean_exit