在Linux下使用X-Window,当你也象Lanche一样在系统中安装了七八个窗口管理器时,是否也为选择启动哪一个管理器而伤脑筋呢?因为还没有在启动X-Window时可以选择使用哪一个窗口管理器的好工具,而且只有极少数的窗口管理器提供直接切换到其它界面的功能,比如在mlvwm中可能通过菜单操作来直接启动进入icewm,而反之在icewm中却不能直接切换回mlvwm;虽然许多Linux发行套件都带有的KDE和Gnome这两个杰出的桌面操作环境可以利用swithdesk工具来实现切换,但在切换后仍须重启动X会话才能进入新的桌面环境。

要在启动X-Window时可以选择使用哪一个窗口管理器,其实最简单的做法就是修改用户主目录下的.xinitrc文件,利用它来控制启动哪一个窗口管理器,这样做既容易又不会影响到其它X资源文件或系统的其它用户。可是每次启动不同的窗口管理器时都要手动修改.xinitrc文件是不太可取的,为了一劳永逸Lanche就写了一个叫做xwin的脚本,通过运行这个脚本就可以在每次运行X-Window时任意选择想要启动的Window Manager了。

xwin脚本的清单附后,在此先作一个简要说明:

清单中的行号只是用于阅读,在真正的脚本中是没有行号的;007-014行在首次运行本脚本时备份你的.xinitrc文件;016-063行的Functions段有两个函数,writerc( )函数将“<< RCFILE”和“RCFILE”之间的HERE文本写入\$HOME/.xinitrc,它是用于运行位于\$HOME/Desktop/Autostart的启动组程序的语句,并非是必须的;getchose( )函数则是显示选择菜单;065-144行判断用户输入的选择动态地修改\$HOME/.xinitrc文件然后启动相应的窗口管理器,如果选择了系统中还没有安装的窗口管理器则会给出错误提示。

小技巧:利用此脚本,你还可以同时在一台机子的七号及八号虚拟控制台上运行两个完全不同的X-Window Manager。

xwin脚本清单:

001 #!/bin/sh  002 #  003 # xwin This script display a text menu and allow you to select  004 # which X-Window Manager you want to use  005 # Author: Lanche , < lanche@163.com >  006 #  007 # Backcup your \$HOME/.xinirtc file while run this  008 # script first time  009 #  010 if [ -f \$HOME/.xinitrc~ ];then  011 echo  012 else  013 cp \$HOME/.xinitrc \$HOME/.xinitrc~  014 fi  015 #  016 # Functions  017 #  018 writerc( ) {  019 tee \$HOME/.xinitrc << RCFILE  020 #!/bin/sh  021 #  022 # This file writed by the xwin script  023 #  024 # Start-up items from ~/Desktop/Autostart  025 #  026 for i in \$(ls \$HOME/Desktop/Autostart/); do  027 if test -x \$HOME/Desktop/Autostart/\$i; then  028 \$HOME/Desktop/Autostart/\$i &  030 fi  031 done  032 #  033 # And launch window manager  034 #  035 RCFILE  036 }  037 #  038 getchose( ) {  039 clear  040 echo  041 echo  042 echo  043 echo  044 echo  045 echo  046 echo ' ################################################'  047 echo ' # #'  048 echo ' # 你想使用哪一个窗口管理器? #'  049 echo ' # #'  050 echo ' # #'  051 echo ' # 1 --- kde #'  052 echo ' # 2 --- xfce #'  053 echo ' # 3 --- icewm #'  054 echo ' # 4 --- mlvwm #'  055 echo ' # 5 --- Fvwm95 #'  056 echo ' # 6 --- AfterStep #'  057 echo ' # #'  058 echo ' # #'  059 echo ' ################################################'  060 echo  061 echo -n ' 请选择:'  062 }  063 # End of Functions  064 #  065 getchose  066 read CHOSE  067 #  068 #Start the selected X-window manager  069 #  070 case \$CHOSE in  071 1)  072 echo 'You chosed kde'  073 if [ -f `which kde` ];then  074 writerc  075 echo 'startkde' >> \$HOME/.xinitrc  076 echo 'Starting kde...'  077 startx  078 else  079 echo 'KDE is not installed on your system!'  080 fi  081 ;;  082 2)  083 echo 'You chosed xfce'  084 if [ -f `which xfce` ];then  085 writerc  086 echo 'exec xfwm' >> \$HOME/.xinitrc  087 echo 'Starting xfce...'  088 startx  089 else  090 echo 'XFCE is not installed on your system!'  091 fi  092 ;;  093 3)  094 echo 'You chosed icewm'  095 if [ -f `which icewm` ];then  096 writerc  097 echo 'xsetbg -onroot /root/wall.jpg &' >> \$HOME/.xinitrc  098 echo 'exec icewm' >> \$HOME/.xinitrc  099 echo 'Starting icewm...'  100 startx  101 else  102 echo 'Icewm is not installed on your system!'  103 fi  104 ;;  105 4)  106 echo 'You chosed mlvwm'  107 if [ -f `which mlvwm` ];then  108 writerc  109 echo 'cd /usr/X11R6/lib/X11/mlvwm' >> \$HOME/.xinitrc  110 echo 'xsetbg -onroot /usr/X11R6/lib/X11/mlvwm/Mac.jpg &'>> \$HOME/.xinitrc  111 echo 'exec mlvwm' >> \$HOME/.xinitrc  112 echo 'Starting mlvwm...'  113 startx  114 else  115 echo 'Mlvwm is not installed on your system!'  116 fi  117 ;;  118 5)  119 echo 'You chosed fvwm95'  120 if [ -f `which fvwm95` ];then  121 writerc  122 echo 'exec fvwm95' >> \$HOME/.xinitrc  123 echo 'Starting fvwm95...'  124 startx  125 else  126 echo 'fvwm95 is not installed on your system!'  127 fi  128 ;;  129 6)  130 echo 'You chosed AfterStep'  131 if [ -f `which afterstep` ];then  132 writerc  133 echo 'exec afterstep' >> \$HOME/.xinitrc  134 echo 'Starting AfterStep...'  135 startx  136 else  137 echo 'AfterStep is not installed on your system!'  138 fi  139 ;;  140 *)  141 echo 'No one was chosed.'  142 esac  143 #  144 exit 0  145 #  146 # End of the script