Archlinux因为速度快,所以我一直在用它。但是archlinux要设置显示管理器(gdm、lxdm、mdm、kdm)需要用力折腾一下,而且还消耗系统资源拖慢系统速度,所以我一直没用显示管理器,而坚持用startx手动启动桌面。
但是问题来了,我这人就是喜欢换各种DE玩赏折腾,折腾之后可以为这个网站填料,给大家分享经验。昨天lxde玩腻了,今天可能又会玩gnome,明天又会尝试一下kde桌面。但是每次要换桌面,需手动修改~/.xinitrc文件,稍显繁琐,于是就撸了这么一个脚本,内容如下:
#! /bin/sh ####################################### # 作者:小衲(撸linux站长) # 电子邮件:lovinux@163.com # 网站:http://www.linux.zone # 本shell脚本遵循GPL协议发布,请尊重作者的署名 # 制作脚本的原因:http://www.linux.zone/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
大家可以在这里下载脚本,然后放到/usr/bin下并chmod 755 /usr/bin/myde,就可以在tty文本界面里运行它了。
最后来几张myde的截图:
博主你的文章很不错,很优秀,我很喜欢。如今看到这个文章已经时隔多日了,想问的是:现在还可以用么?
或者博主考虑,发布新版本哈。谢谢。会持续关注的!
应该可以用吧。试试看。不过这个东西就是个玩具,如果不是为了节省一点内存资源,谁还不用DM呢?
好的,知道了,谢谢
其实Arch wiki里就有starx的例子啊
https://wiki.archlinux.org/index.php/Xinitrc#Making_a_DE.2FWM_choice
后面加上想要启动的环境名称就行
你说的这个方法需要手动修改脚本,而且列出的还不是全部可用session,我做这个脚本的目的就是实现自动化。