[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

XDM loop: Fix report.


The XDM loop-o-death.

XDM sometimes goes into an endless loop in which it continuously respawns
itself.  This is due to the fact that XDM was designed to control access to the
system in much the same way that the console login does.

Normal process:

        XDM is started, normally at bootup, and takes control of the display and

        XDM starts up the X server for graphics.

        It displays a graphical login widget for the user to type in his or her
        name and password, and releases the keyboard.

        Once the user successfully logs in, XDM passes control of the display
        and keyboard to the X server and runs the various startup scripts to
        put the user in their configured environment.

        When the user exits the environment XDM runs some clean up scripts and
        takes control again.


        XDM is started at bootup and takes control of the display and keyboard.

        XDM fires up the X server.

        The X server finds a problem in it's config file and terminates itself.

        XDM notes that the X server was killed and respawns itself to take
        control over the display and console.

        This repeats about every second and manifests itself as a flashing of
        the screen, between text and graphic modes.

Because XDM grabs the keyboard when it starts and doesn't release it until it
either displays the login widget or is killed there is no way to stop this
cycle once it has started, unless you can manage to type killall xdm between
cycles which is a fraction of a second.

I was able to prevent getting stuck in this endless loop by creating a script
that runs XDM called safe-xdm.  It's a very small script that simply:

        Creates a file called /etc/X11/xdm/started.dat using touch.

        Starts XDM using the same command used at boot or manually.

        Sleeps for 5 seconds.

        Runs an "if" statement:
                if [ -f $started ]; then
                        echo "XDM problem, killing it ...." >> /dev/console;
                        xdm stop

        Sends the user a message telling them it detected a problem.

In order for this to work, the started.dat file has to be deleted before the 5
seconds is up.  I did this by placing the remove statement in the Xsetup, which
XDM runs to setup the graphical display at start up.  XDM doesn't get this far
when in the loop so it doesn't remove the started.dat file when looping, making
a perfect signal that XDM is stuck in a loop.

- ---
E-Mail: Cyberdyn@seul.org       Date: 18-Feb-98        Time: 02:20:54
A journey of a thousand miles starts under one's feet.
                -- Lao Tsu

Version: 2.6.3a
Charset: noconv