Index: kdm/backend/server.c =================================================================== --- kdm/backend/server.c +++ kdm/backend/server.c 2010-04-12 17:40:26.000000000 +0200 @@ -146,11 +146,28 @@ void startServerFailed() { + char **args; + int ret; + struct display *d = startingServer; if (!d->serverAttempts || d->startTries < d->serverAttempts) { d->serverStatus = pausing; serverTimeout = d->openDelay + now; } else { + if ((args = addStrArr( 0, "/usr/bin/openvt", 15 )) && + (args = addStrArr( args, "-c8", 3 )) && + (args = addStrArr( args, "-s", 2 )) && + (args = addStrArr( args, "/usr/bin/XKeepCrashing", 22 ))) { + + ret = runAndWait( args, systemEnviron ); + if (ret != 1 && system( "nohup /sbin/service dm restart" ) != 0 ) { + logError( "** Please restart the machine, we failed to restart the X server\n" ); + } + logError( "** runAndWait ret=%d\n", ret ); + freeStrArr( args ); + } else { + logError( "** failed addStrArr...\n" ); + } d->serverStatus = ignore; serverTimeout = TO_INF; startingServer = 0;