#! /bin/sh

#######################################
# 作者：小撸（撸linux站长）
# 电子邮件：lovinux@163.com
# 网站：http://www.lulinux.com
# 本shell脚本遵循GPL协议发布，请尊重作者的署名
# 制作脚本的原因：http://www.lulinux.com/archives/598
#######################################

#计算系统中session的数量
a=`ls -l /usr/share/xsessions/*.desktop|wc -l`

#设置两个temp文件
temp=`mktemp -t myde_menu.XXXXXX`
temp2=`mktemp -t myde_selected_id.XXXXXX`

#设置一个listsessions的函数，将/usr/share/xsessions目录下的所有sessions都通过一个dialog列出来
function listsessions {
for i in `seq $a`
do
    echo $i `ls /usr/share/xsessions/*.desktop|sed 's/\/usr\/share\/xsessions\///'|sed 's/\.desktop//'|sed -n "$i"p`>>$temp
done
dialog --menu "Choose a session you like:" 40 30 $a `cat $temp` 2>$temp2
}

listsessions

#设置一个循环，让用户无论如何，都选择一个session
while [ -z `cat $temp2` ] 
do
    dialog --msgbox "You must choose a session." 6 40
    listsessions
done    

if dialog --title "Question" --yesno "Write in ~/.xinitrc to use startx command to start X server next time?" 7 40 
then
    w="1"
    #将原来的不以#开头的exec行用#注释掉，同时把#为开头的行的#和后一个单词中间的空白去掉
    sed -i -e 's/^exec/#exec/' -e 's/^#[[:blank:]]\+/#/' ~/.xinitrc
    #将/usr/share/xsessions中所有sessions中的exec 行提取出来到.xinitrc中
    cat /usr/share/xsessions/*.desktop|grep ^Exec=|sed 's/\/usr\/bin\///'|sed 's/Exec=/#exec\ /'>>~/.xinitrc
    #删除.xinitrc中的重复行
    awk '!a[$0]++' ~/.xinitrc>~/.xinitrc1
    mv ~/.xinitrc1 ~/.xinitrc
    #将刚才选择的菜单ID的具体内容放入到b变量中
    z=`cat $temp2`
    b=`cat /usr/share/xsessions/*.desktop|grep ^Exec=|sed 's/\/usr\/bin\///'|sed 's/Exec=/#exec\ /'|sed -n "$z"p`
    c=`cat /usr/share/xsessions/*.desktop|grep ^Exec=|sed 's/\/usr\/bin\///'|sed 's/Exec=/exec\ /'|sed -n "$z"p`
    #将包含b内容的行的开头的#去掉,^$b$匹配的是整行
    #echo $b>~/.xinitrc
    #echo $c>>~/.xinitrc
    sed -i "s/^$b$/$c/g" ~/.xinitrc
    #提示写入.xinitrc成功
    dialog --msgbox "Write successfully！" 5 30
else
    w="0"
    #如果不保存到~/.xinitrc中的话，就先把~/.xinitrc拷贝为临时备份文件~/.xinitrc_bak
    cp -f ~/.xinitrc ~/.xinitrc_bak
    #然后重复跟上面一样的过程
    sed -i -e 's/^exec/#exec/' -e 's/^#[[:blank:]]\+/#/' ~/.xinitrc
    cat /usr/share/xsessions/*.desktop|grep ^Exec=|sed 's/\/usr\/bin\///'|sed 's/Exec=/#exec\ /'>>~/.xinitrc
    awk '!a[$0]++' ~/.xinitrc>~/.xinitrc1
    mv ~/.xinitrc1 ~/.xinitrc
    z=`cat $temp2`
    b=`cat /usr/share/xsessions/*.desktop|grep ^Exec=|sed 's/\/usr\/bin\///'|sed 's/Exec=/#exec\ /'|sed -n "$z"p`
    c=`cat /usr/share/xsessions/*.desktop|grep ^Exec=|sed 's/\/usr\/bin\///'|sed 's/Exec=/exec\ /'|sed -n "$z"p`
    sed -i "s/^$b$/$c/g" ~/.xinitrc
fi

#提示现在启动X服务器吗？
if dialog --title "Question" --yesno "Start X server now?" 5 25
then
    #恢复到系统默认语言
    #locale=`locale|head -n 1`
    #export LANG=`echo ${locale#*LANG=}`
    #export LANGUAGE=`echo ${locale#*LANG=}`
    #export LC_CTYPE=`echo ${locale#*LANG=}`
    if w="0"
    then
        #如果选择的session不保存到.xinitrc，则先启动startx，然后恢复原始备份好的.xinitrc_bak为.xinitrc
        startx 
        mv -f ~/.xinitrc_bak ~/.xinitrc
    else
        startx
    fi
else
    if w="0"
    then
        #当未保存所选session到.xinitrc之后，就恢复原始备份好的.xinitrc_bak为.xinitrc
        if [ -f ~/.xinitrc_bak ]
        then
            mv -f ~/.xinitrc_bak ~/.xinitrc
        fi
    fi
fi

#删除所有临时文件
rm -f $temp 2> /dev/null
rm -f $temp2 2> /dev/null
