--- xinit/startx.cpp.startx 2005-11-15 09:35:19.000000000 +0100 +++ xinit/startx.cpp 2005-11-15 15:52:18.000000000 +0100 @@ -64,8 +64,6 @@ userserverrc=$HOME/.xserverrc sysserverrc=XINITDIR/xserverrc -defaultclient=XTERM -defaultserver=XSERVER defaultclientargs="" defaultserverargs="" clientargs="" @@ -111,13 +109,13 @@ /''*|\./''*) if [ "$whoseargs" = "client" ]; then if [ x"$clientargs" = x ]; then - client="$1" + clientargs="$1" else clientargs="$clientargs $1" fi else if [ x"$serverargs" = x ]; then - server="$1" + serverargs="$1" else serverargs="$serverargs $1" fi @@ -128,12 +126,17 @@ ;; *) if [ "$whoseargs" = "client" ]; then - clientargs="$clientargs $1" + if [ "x$clientargs" = x ]; then + clientargs="$defaultclientargs $1" + else + clientargs="$clientargs $1" + fi else XCOMM display must be the FIRST server argument if [ x"$serverargs" = x ] && @@ expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then display="$1" + serverargs="$1" else serverargs="$serverargs $1" fi @@ -143,24 +146,12 @@ shift done -XCOMM process client arguments -if [ x"$client" = x ]; then - XCOMM if no client arguments either, use rc file instead - if [ x"$clientargs" = x ]; then - client="$defaultclientargs" - else - client=$defaultclient - fi +if [ x"$clientargs" = x ]; then + clientargs="$defaultclientargs" fi -XCOMM process server arguments -if [ x"$server" = x ]; then - XCOMM 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 +if [ x"$serverargs" = x ]; then + serverargs="$defaultserverargs" fi if [ x"$XAUTHORITY" = x ]; then @@ -223,10 +214,11 @@ else XINIT $client $clientargs -- $server $display $serverargs fi -#else -XINIT $client $clientargs -- $server $display $serverargs #endif +cleanup() { + [ -n "$PID" ] && kill $PID > /dev/null 2>&1 + if [ x"$removelist" != x ]; then XAUTH remove $removelist fi @@ -251,3 +243,15 @@ #if defined(sun) kbd_mode -a #endif +} + + +trap cleanup 0 + +xinit $clientargs -- $serverargs -deferglyphs 16 & + +PID=$! + +wait $PID + +unset PID --- xinit/xinit.c.startx 2005-10-04 13:26:37.000000000 +0200 +++ xinit/xinit.c 2005-11-15 15:48:12.000000000 +0100 @@ -158,7 +158,7 @@ char *default_server = "X"; char *default_display = ":0"; /* choose most efficient */ -char *default_client[] = {"xterm", "-geometry", "+1+1", "-n", "login", NULL}; +char *default_client[] = {"xvt", "-geometry", "+1+1", NULL}; char *serverargv[100]; char *clientargv[100]; char **server = serverargv + 2; /* make sure room for sh .xserverrc args */ @@ -446,6 +446,7 @@ signal(SIGINT, sigCatch); signal(SIGHUP, sigCatch); signal(SIGPIPE, sigCatch); + signal(SIGTERM, sigCatch); #else /* Let those signal interrupt the wait() call in the main loop */ memset(&sa, 0, sizeof sa); @@ -458,6 +459,7 @@ sigaction(SIGINT, &sa, NULL); sigaction(SIGHUP, &sa, NULL); sigaction(SIGPIPE, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); #endif signal(SIGALRM, sigAlarm); signal(SIGUSR1, sigUsr1);