LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4321|回复: 5

修改了一下startx,用于窗口管理器的选择

[复制链接]
发表于 2003-6-18 16:49:01 | 显示全部楼层 |阅读模式
如果你有多个窗口管理器,而又喜欢用startx启动的话,那这个脚本可以满足你的要求。
1.修改startx,变成这样:

  1. #!/bin/sh

  2. # $Xorg: startx.cpp,v 1.3 2000/08/17 19:54:29 cpqbld Exp $
  3. #
  4. # This is just a sample implementation of a slightly less primitive
  5. # interface than xinit.  It looks for user .xinitrc and .xserverrc
  6. # files, then system xinitrc and xserverrc files, else lets xinit choose
  7. # its default.  The system xinitrc should probably do things like check
  8. # for .Xresources files and merge them in, startup up a window manager,
  9. # and pop a clock and serveral xterms.
  10. #
  11. # Site administrators are STRONGLY urged to write nicer versions.
  12. #
  13. # $XFree86: xc/programs/xinit/startx.cpp,v 3.12.2.2 2002/01/28 18:27:34 tsi Exp $

  14. [color=red]#--------------------增加----------------------[/color]
  15. GNOME=$HOME/.startx/gnome
  16. ICEWM=$HOME/.startx/icewm
  17. #FVWM=$HOME/.startx/fvwm
  18. [color=red]#-----------------------------------------------[/color]

  19. userclientrc=$HOME/.xinitrc
  20. userclientrc=$HOME/.xinitrc
  21. userserverrc=$HOME/.xserverrc
  22. sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc
  23. sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc
  24. defaultclient=/usr/X11R6/bin/xterm
  25. defaultserver=/usr/X11R6/bin/X
  26. defaultclientargs=""
  27. defaultserverargs=""
  28. clientargs=""
  29. serverargs=""






  30. if [ -f $userclientrc ]; then
  31.     defaultclientargs=$userclientrc
  32. elif [ -f $sysclientrc ]; then
  33.     defaultclientargs=$sysclientrc
  34. fi
  35. if [ -f $userserverrc ]; then
  36.     defaultserverargs=$userserverrc
  37. elif [ -f $sysserverrc ]; then
  38.     defaultserverargs=$sysserverrc
  39. fi

  40. whoseargs="client"
  41. while [ x"$1" != x ]; do
  42.     case "$1" in
  43. [color=red]#----------------------增加--------------------------[/color]
  44.     gnome)
  45.         if [ x"$clientargs" = x ]; then
  46.             if [ -e $GNOME ]; then
  47.                 client=$GNOME
  48.             fi
  49.         else
  50.             clientargs="$clientargs $1"
  51.         fi
  52.         ;;    icewm)
  53.         if [ x"$clientargs" = x ]; then
  54.             if [ -e $ICEWM ]; then
  55.                 client=$ICEWM
  56.             fi
  57.         else
  58.             clientargs="$clientargs $1"
  59.         fi
  60.         ;;
  61. #    fvwm)
  62. #       client=$FVWM
  63. #       ;;
  64. #if there are more window manager that you want to start by startx,
  65. #you can add it here
  66. #    ...)
  67. #       ;;
  68. [color=red]#-----------------------------------------------------------------[/color]
  69.     # '' required to prevent cpp from treating "/*" as a C comment.
  70.     /''*|\./''*)
  71.         if [ "$whoseargs" = "client" ]; then
  72.             if [ x"$clientargs" = x ]; then
  73.                         client="$1"
  74.             else
  75.                 clientargs="$clientargs $1"
  76.             fi  
  77.         else
  78.             if [ x"$serverargs" = x ]; then
  79.                 server="$1"
  80.             else
  81.                 serverargs="$serverargs $1"
  82.             fi
  83.         fi
  84.         ;;
  85.     --)
  86.         whoseargs="server"
  87.         ;;
  88.     *)
  89.         if [ "$whoseargs" = "client" ]; then
  90.             clientargs="$clientargs $1"
  91.         else
  92.             # display must be the FIRST server argument
  93.              if [ x"$serverargs" = x ] &&                 expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then

  94.                 display="$1"
  95.             else
  96.                 serverargs="$serverargs $1"
  97.             fi
  98.         fi
  99.         ;;
  100.     esac
  101.     shift
  102. done

  103. # process client arguments
  104. if [ x"$client" = x ]; then
  105.     # if no client arguments either, use rc file instead
  106.     if [ x"$clientargs" = x ]; then
  107.         client="$defaultclientargs"
  108.     else
  109.         client=$defaultclient
  110.     fi
  111.    fi                                                                              
  112. # process server arguments
  113. if [ x"$server" = x ]; then
  114.     # if no server arguments or display either, use rc file instead
  115.     if [ x"$serverargs" = x -a x"$display" = x ]; then
  116.         server="$defaultserverargs"
  117.     else
  118.         server=$defaultserver
  119.     fi
  120. fi  

  121. if [ x"$XAUTHORITY" = x ]; then
  122.     XAUTHORITY=$HOME/.Xauthority
  123.     export XAUTHORITY
  124. fi  
  125.    
  126. removelist=
  127.   # set up default Xauth info for this machine

  128. # check for GNU hostname
  129. if hostname --version > /dev/null 2>&1; then
  130.         if [ -z "`hostname --version 2>&1 | grep GNU`" ]; then
  131.                 hostname=`hostname -f`
  132.         fi
  133. fi

  134. if [ -z "$hostname" ]; then
  135.         hostname=`hostname`
  136. fi

  137. authdisplay=${display:-:0}
  138. mcookie=`mcookie`
  139. for displayname in $authdisplay $hostname$authdisplay; do
  140.     if ! xauth list "$displayname" | grep "$displayname " >/dev/null 2>&1; then
  141.         xauth add $displayname . $mcookie
  142.         removelist="$displayname $removelist"
  143.     fi
  144. done
  145.                                                                         
  146. xinit $client $clientargs -- $server $display $serverargs

  147. if [ x"$removelist" != x ]; then
  148.     xauth remove $removelist
  149. fi      



  150.         

  151. if command -v deallocvt > /dev/null 2>&1; then
  152.     deallocvt
  153. 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
仿照这个方法,你也可以改动它,能启动其他的一些窗口管理器。
发表于 2003-6-18 19:18:05 | 显示全部楼层
very good ;)
发表于 2003-6-24 13:30:44 | 显示全部楼层
mandrake就是用这个方式启动到不同的图形界面,是不是借用过来的呢?
 楼主| 发表于 2003-6-24 19:14:24 | 显示全部楼层
不是吧?
我只是在懂shell 之前用过mandrake,它不是用gmd/kdm启动?
发表于 2003-6-26 20:22:55 | 显示全部楼层
我写了几个非常简单的脚本,名字叫xfvwm,ice,kde,等,然后在自己的根目录下写了几个.XSESSION的复本,比如启动FVWM
$cat xfvwm
cp ~/.xsession-fvwm ~/.xsession
startx
呵呵,只是太简单了
发表于 2003-6-27 12:09:28 | 显示全部楼层
我觉得neil007的方法更好一些
不是任何用户都有权改startx的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表