如果你有多个窗口管理器,而又喜欢用startx启动的话,那这个脚本可以满足你的要求。
1.修改startx,变成这样:
代码:
#!/bin/sh
# $Xorg: startx.cpp,v 1.3 2000/08/17 19:54:29 cpqbld Exp $
#
# This is just a sample implementation of a slightly less primitive
# interface than xinit. It looks for user .xinitrc and .xserverrc
# files, then system xinitrc and xserverrc files, else lets xinit choose
# its default. The system xinitrc should probably do things like check
# for .Xresources files and merge them in, startup up a window manager,
# and pop a clock and serveral xterms.
#
# Site administrators are STRONGLY urged to write nicer versions.
#
# $XFree86: xc/programs/xinit/startx.cpp,v 3.12.2.2 2002/01/28 18:27:34 tsi Exp $
#--------------------增加----------------------
GNOME=$HOME/.startx/gnome
ICEWM=$HOME/.startx/icewm
#FVWM=$HOME/.startx/fvwm
#-----------------------------------------------
userclientrc=$HOME/.xinitrc
userclientrc=$HOME/.xinitrc
userserverrc=$HOME/.xserverrc
sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc
sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc
defaultclient=/usr/X11R6/bin/xterm
defaultserver=/usr/X11R6/bin/X
defaultclientargs=""
defaultserverargs=""
clientargs=""
serverargs=""
if [ -f $userclientrc ]; then
defaultclientargs=$userclientrc
elif [ -f $sysclientrc ]; then
defaultclientargs=$sysclientrc
fi
if [ -f $userserverrc ]; then
defaultserverargs=$userserverrc
elif [ -f $sysserverrc ]; then
defaultserverargs=$sysserverrc
fi
whoseargs="client"
while [ x"$1" != x ]; do
case "$1" in
#----------------------增加--------------------------
gnome)
if [ x"$clientargs" = x ]; then
if [ -e $GNOME ]; then
client=$GNOME
fi
else
clientargs="$clientargs $1"
fi
;; icewm)
if [ x"$clientargs" = x ]; then
if [ -e $ICEWM ]; then
client=$ICEWM
fi
else
clientargs="$clientargs $1"
fi
;;
# fvwm)
# client=$FVWM
# ;;
#if there are more window manager that you want to start by startx,
#you can add it here
# ...)
# ;;
#-----------------------------------------------------------------
# '' required to prevent cpp from treating "/*" as a C comment.
/''*|\./''*)
if [ "$whoseargs" = "client" ]; then
if [ x"$clientargs" = x ]; then
client="$1"
else
clientargs="$clientargs $1"
fi
else
if [ x"$serverargs" = x ]; then
server="$1"
else
serverargs="$serverargs $1"
fi
fi
;;
--)
whoseargs="server"
;;
*)
if [ "$whoseargs" = "client" ]; then
clientargs="$clientargs $1"
else
# display must be the FIRST server argument
if [ x"$serverargs" = x ] && expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then
display="$1"
else
serverargs="$serverargs $1"
fi
fi
;;
esac
shift
done
# process client arguments
if [ x"$client" = x ]; then
# if no client arguments either, use rc file instead
if [ x"$clientargs" = x ]; then
client="$defaultclientargs"
else
client=$defaultclient
fi
fi
# process server arguments
if [ x"$server" = x ]; then
# if no server arguments or display either, use rc file instead
if [ x"$serverargs" = x -a x"$display" = x ]; then
server="$defaultserverargs"
else
server=$defaultserver
fi
fi
if [ x"$XAUTHORITY" = x ]; then
XAUTHORITY=$HOME/.Xauthority
export XAUTHORITY
fi
removelist=
# set up default Xauth info for this machine
# check for GNU hostname
if hostname --version > /dev/null 2>&1; then
if [ -z "`hostname --version 2>&1 | grep GNU`" ]; then
hostname=`hostname -f`
fi
fi
if [ -z "$hostname" ]; then
hostname=`hostname`
fi
authdisplay=${display:-:0}
mcookie=`mcookie`
for displayname in $authdisplay $hostname$authdisplay; do
if ! xauth list "$displayname" | grep "$displayname " >/dev/null 2>&1; then
xauth add $displayname . $mcookie
removelist="$displayname $removelist"
fi
done
xinit $client $clientargs -- $server $display $serverargs
if [ x"$removelist" != x ]; then
xauth remove $removelist
fi
if command -v deallocvt > /dev/null 2>&1; then
deallocvt
fi
2.然后创建文件~/.startx/gnome,~/.startx/icewm
下面是我的文件内容:
>cat ~/.startx/gnome
exec gnome-session
>cat ~/.startx/icewm
fcitx &
xscreensaver -no-splash &
exec /usr/bin/icewm
killall fcitx
其实他们的作用跟~/.xinitrc是一样的。
3.使用方法。
启动gnome:startx gnome
启动icewm:startx icewm
当然还是可以利用~/.xinitrc:startx
仿照这个方法,你也可以改动它,能启动其他的一些窗口管理器。