Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

X(1)

xinit(1)



  XDM(1)              X Version 11 (Release 4)               XDM(1)



  NAME
       xdm - X Display Manager


  SYNOPSIS
       xdm [-config configuration_file] [-daemon] [-debug
       debug_level] [-error error_log_file] [-nodaemon] [-resources
       resource_file] [-server server_entry] [-session
       session_program] [-xrm resource_specification]

  DESCRIPTION
       Xdm manages a collection of X displays, both local and
       possibly remote - the emergence of X terminals guided the
       design of several parts of this system, along with the
       development of the X Consortium standard XDMCP, the X
       Display Manager Control Protocol).  It is designed to
       provide services similar to that provided by init, getty and
       login on character terminals:  prompting for login/password,
       authenticating the user and running a ``session''.

       A ``session'' is defined by the lifetime of a particular
       process; in the traditional character-based terminal world,
       it is the user's login shell process.  In the xdm context,
       it is an arbitrary session manager.  This is because in a
       windowing environment, a user's login shell process would
       not necessarily have any terminal-like interface with which
       to connect.

       Until real session managers become widely available, the
       typical xdm substitute would be either a window manager with
       an exit option, or a terminal emulator running a shell -
       with the condition that the lifetime of the terminal
       emulator is the lifetime of the shell process that it is
       running - thus degenerating the X session to an emulation of
       the character-based terminal session.

       When the session is terminated, xdm resets the X server and
       (optionally) restarts the whole process.




Page 1 (printed 8/30/91)

  XDM(1)              X Version 11 (Release 4)               XDM(1)



       Because xdm provides the first interface that users will
       see, it is designed to be simple to use and easy to
       customize to the needs of a particular site.  Xdm has many
       options, most of which have reasonable defaults.  Browse
       through the various sections, picking and choosing the
       things you want to change.  Pay particular attention to the
       Xsession section, which will describe how to set up the
       style of session desired.

  OPTIONS
       First, note that all of these options, except -config,
       specify values which can also be specified in the
       configuration file as resources.

       -config configuration_file
            Specifies a resource file which specifies the remaining
            configuration parameters.  If no file is specified and
            the file /usr/lib/X11/xdm/xdm-config exists, xdm will
            use it.

       -daemon
            Specifies ``true'' as the value for the
            DisplayManager.daemonMode resource.  This makes xdm
            close all file descriptors, disassociate the
            controlling terminal and put itself in the background
            when it first starts up (just like the host of other
            daemons).  It is the default behavior.

       -debug debug_level
            Specifies the numeric value for the
            DisplayManager.debugLevel resource.  A non-zero value
            causes xdm to print piles of debugging statements to
            the terminal; it also disables the
            DisplayManager.daemonMode resource, forcing xdm to run
            synchronously.  To interpret these debugging messages,
            a copy of the source code for xdm is almost a
            necessity.  No attempt has been made to rationalize or
            standardize the output.




Page 2 (printed 8/30/91)
  XDM(1)              X Version 11 (Release 4)               XDM(1)



       -error error_log_file
            Specifies the value for the DisplayManager.errorLogFile
            resource.  This file contains errors from xdm as well
            as anything written to stderr by the various scripts
            and programs run during the progress of the session.

       -nodaemon
            Specifies ``false'' as the value for the
            DisplayManager.daemonMode resource.

       -resources resource_file
            Specifies the value for the DisplayManager*resources
            resource.  This file is loaded using xrdb (1) to
            specify configuration parameters for the authentication
            widget.

       -server server_entry
            Specifies the value for the DisplayManager.servers
            resource.  See the section below which describes this
            resource in depth.

       -udpPort port_number
            Specifies the value for the DisplayManager.requestPort
            resource.  This sets the port-number which XDM will
            monitor for XDMCP requests.  As XDMCP uses the
            registered well-known udp port 177, this resource
            should probably not be changed except for debugging.

       -session session_program
            Specifies the value for the DisplayManager*session
            resource.  This indicates the program to run when the
            user has logged in as the session.

       -xrm resource_specification
            This allows an arbitrary resource to be specified, just
            as most toolkit applications.

  RESOURCES
       At many stages the actions of xdm can be controlled through
       the use of the configuration file, which is in the familiar


  Page 3                                          (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



       X resource format.  See Jim Fulton's article on resource
       files (doc/tutorials/resources.txt) for a description of the
       format.  Some resources modify the behavior of xdm on all
       displays, while others modify its behavior on one single
       display.  Where actions relate to a specific display, the
       display name is inserted into the resource name between
       ``DisplayManager'' and the final resource name segment.  For
       example, DisplayManager.expo_0.startup is the name of the
       resource which defines the startup shell file on the
       ``expo:0'' display.  Because the resource manager uses
       colons to separate the name of the resource from its value
       and dots to separate resource name parts, xdm substitutes
       underscores for the dots and colons when generating the
       resource name.

       DisplayManager.servers
            This resource either specifies a file name full of
            server entries, one per line (if the value starts with
            a slash), or a single server entry.  Each entry
            indicates a displays which should constantly be managed
            and which is not using XDMCP.  Each entry consists of
            at least three parts:  a display name, a display class,
            a display type, and (for local servers) a command line
            to start the server.  A typical entry for local display
            number 0 would be:

              :0 Digital-QV local /usr/bin/X11/X :0

            The display types are:

            local          a local display, i.e. one which has a server program to run
            foreign        a remote display, i.e. one which has no server program to run


            The display name must be something that can be passed
            in the -display option to any X program.  This string
            is used in the display-specific resources to specify
            the particular display, so be careful to match the
            names (e.g. use ":0 local /usr/bin/X11/X :0" instead of
            "localhost:0 local /usr/bin/X11/X :0" if your other


  Page 4                                          (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)


            resources are specified as
            "DisplayManager._0.session").  The display class
            portion is also used in the display-specific resources,
            as the class portion of the resource.  This is useful
            if you have a large collection of similar displays
            (like a corral of X terminals) and would like to set
            resources for groups of them.  When using XDMCP, the
            display is required to specify the display class, so
            perhaps your X terminal documentation describes a
            reasonably standard display class string for your
            device.

       DisplayManager.requestPort
            This indicates the UDP port number which xdm uses to
            listen for incoming XDMCP requests.  Unless you need to
            debug the system, leave this with it's default value of
            177.

       DisplayManager.errorLogFile
            Error output is normally directed at the system
            console.  To redirect it simply set this resource to
            any file name.  A method to send these messages to
            syslog should be developed for systems which support
            it; however the wide variety of "standard" interfaces
            precludes any system-independent implementation.  This
            file also contains any output directed to stderr by
            Xstartup, Xsession and Xreset, so it will contain
            descriptions of problems in those scripts as well.

       DisplayManager.debugLevel
            A non-zero value specified for this integer resource
            will enable reams of debugging information to be
            printed.  It also disables daemon mode which would
            redirect the information into the bit-bucket.
            Specifying a non-zero debug level also allows non-root
            users to run xdm which would normally not be useful.

       DisplayManager.daemonMode
            Normally, xdm attempts to make itself into an
            unassociated daemon process.  This is accomplished by


  Page 5                                          (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)


            forking and leaving the parent process to exit, then
            closing file descriptors and mangling the controlling
            terminal.  When attempting to debug xdm , this is quite
            bothersome.  Setting this resource to "false" will
            disable this feature.

       DisplayManager.pidFile
            The filename specified will be created to contain an
            ascii representation of the process-id of the main xdm
            process.  This is quite useful when reinitializing the
            system.  Xdm also uses file locking to attempt to
            eliminate multiple daemons running on the same machine,
            which would cause quite a bit of havoc.

       DisplayManager.lockPidFile
            This is the resource which controls whether xdm uses
            file locking to keep multiple xdms from running amok.
            On SYSV, this uses the lockf library call, while on BSD
            it uses flock.  The default value is "true".

       DisplayManager.remoteAuthDir
            This is a directory name which xdm uses to temporarily
            store authorization files for displays using XDMCP.
            The default value is /usr/lib/X11/xdm.

       DisplayManager.autoRescan"
            This boolean controls whether xdm rescans the
            configuration file and servers file after a session
            terminates and the files have changed.  By default it
            is "true".  You can force xdm to reread these files by
            sending a SIGHUP to the main process.

       DisplayManager.removeDomainname
            When computing the display name for XDMCP clients, the
            resolver will typically create a fully qualified host
            name for the terminal.  As this is sometimes confusing,
            xdm will remove the domain name portion of the host
            name if it is the same as the domain name for the local
            host when this variable is set.  By default the value
            is "true".


  Page 6                                          (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)


       DisplayManager.keyFile
            XDM-AUTHENTICATION-1 style XDMCP authentication
            requires that a private key be shared between xdm and
            the terminal.  This resource specifies the file
            containing those values.  Each entry in the file
            consists of a display name and the shared key.  By
            default, xdm does not include support for XDM-
            AUTHENTICATION-1 as it requires DES which is not
            generally distributable.

       DisplayManager.DISPLAY.resources
            This resource specifies the name of the file to be
            loaded by xrdb (1) as the resource data-base onto the
            root window of screen 0 of the display.  This resource
            data base is loaded just before the authentication
            procedure is started, so it can control the appearance
            of the "login" window.  See the section below on the
            authentication widget which describes the various
            resources which are appropriate to place in this file.
            There is no default value for this resource, but the
            conventional name is /usr/lib/X11/xdm/Xresources.

       DisplayManager.DISPLAY.xrdb
            Specifies the program used to load the resources.  By
            default, xdm uses /usr/bin/X11/xrdb.

       DisplayManager.DISPLAY.cpp
            This specifies the name of the C preprocessor which is
            used by xrdb.

       DisplayManager.DISPLAY.startup
            This specifies a program which is run (as root) after
            the authentication process succeeds.  By default, no
            program is run.  The conventional name for a file used
            here is Xstartup.  See the Xstartup section below.

       DisplayManager.DISPLAY.session
            This specifies the session to be executed (not running
            as root).  By default, /usr/bin/X11/xterm is run.  The
            conventional name is Xsession.  See the Xsession


  Page 7                                          (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



            session below.

       DisplayManager.DISPLAY.reset
            This specifies a program which is run (as root) after
            the session terminates.  Again, by default no program
            is run.  The conventional name is Xreset.  See the
            Xreset section further on in this document.

       DisplayManager.DISPLAY.openDelay

       DisplayManager.DISPLAY.openRepeat

       DisplayManager.DISPLAY.openTimeout

       DisplayManager.DISPLAY.startAttempts
            These numeric resources control the behavior of xdm
            when attempting to open intransigent servers.
            openDelay is the length of the pause (in seconds)
            between successive attempts, openRepeat is the number
            of attempts to make, openTimeout is the amount of time
            to wait while actually attempting the open (i.e. the
            maximum time spent in the connect (2) syscall) and
            startAttempts is the number of times this entire
            process is done before giving up on the server.  After
            openRepeat attempts have been made, or if openTimeout
            seconds elapse in any particular attempt, xdm
            terminates and restarts the server, attempting to
            connect again, this process is repeated startAttempts
            time, at which point the display is declared dead and
            disabled.  Although this behavior may seem arbitrary,
            it has been empirically developed and works quite well
            on most systems.  The default values are 5 for
            openDelay, 5 for openRepeat, 30 for openTimeout and 4
            for startAttempts.

       DisplayManager.DISPLAY.pingInterval

       DisplayManager.DISPLAY.pingTimeout
            To discover when remote displays disappear, xdm
            occasionally "pings" them, using an X connection and


  Page 8                                          (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



            sending XSync requests.  pingInterval specifies the
            time (in minutes) between each ping attempt,
            pingTimeout specifies the maximum amount of time (in
            minutes) to wait for the terminal to respond to the
            request.  If the terminal does not respond, the session
            is declared dead and terminated.  By default, both are
            set to 5 minutes.  xdm will not ping local displays.
            Although it would seem harmless, it is unpleasant when
            the workstation session is terminated as a result of
            the server hanging for NFS service and not responding
            to the ping.

       DisplayManager.DISPLAY.terminateServer
            This boolean resource specifies whether the X server
            should be terminated when a session terminates (instead
            of resetting it).  This option can be used when the
            server tends to grow without bound over time in order
            to limit the amount of time the server is run.  The
            default value is "FALSE".

       DisplayManager.DISPLAY.userPath
            Xdm sets the PATH environment variable for the session
            to this value.  It should be a colon separated list of
            directories, see sh(1) for a full description.  The
            default value can be specified in the X system
            configuration file with DefUserPath, frequently it is
            set to ":/bin:/usr/bin:/usr/bin/X11:/usr/ucb".

       DisplayManager.DISPLAY.systemPath
            Xdm sets the PATH environment variable for the startup
            and reset scripts to the value of this resource.  The
            default for this resource is specified with the
            DefaultSystemPath entry in the system configuration
            file, but it is frequently
            "/etc:/bin:/usr/bin:/usr/bin/X11:/usr/ucb".  Note the
            conspicuous absence of "." from this entry.  This is a
            good practise to follow for root; it avoids many common
            trojan horse system penetration schemes.




Page 9 (printed 8/30/91)
XDM(1) X Version 11 (Release 4) XDM(1) DisplayManager.DISPLAY.systemShell Xdm sets the SHELL environment variable for the startup
            and reset scripts to the value of this resource.  By
            default, it is "/bin/sh".

       DisplayManager.DISPLAY.failsafeClient
            If the default session fails to execute, xdm will fall
            back to this program.  This program is executed with no
            arguments, but executes using the same environment
            variables as the session would have had (see the
            section "Xsession" below).  By default,
            /usr/bin/X11/xterm is used.

       DisplayManager.DISPLAY.grabServer

       DisplayManager.DISPLAY.grabTimeout
            To eliminate obvious security shortcomings in the X
            protocol, xdm grabs the server and keyboard while
            reading the name/password.  The grabServer resource
            specifies if the server should be held for the duration
            of the name/password reading, when FALSE, the server is
            ungrabbed after the keyboard grab succeeds, otherwise
            the server is grabbed until just before the session
            begins.  The grabTimeout resource specifies the maximum
            time xdm will wait for the grab to succeed.  The grab
            may fail if some other client has the server grabbed,
            or possibly if the network latencies are very high.
            This resource has a default value of 3 seconds; you
            should be cautious when raising it as a user can be
            spoofed by a look-alike window on the display.  If the
            grab fails, xdm kills and restarts the server (if
            possible) and session.

       DisplayManager.DISPLAY.authorize

       DisplayManager.DISPLAY.authName
            authorize is a boolean resource which controls whether
            xdm generates and uses authorization for the server
            connections.  If authorization is used, authName
            specifies the type to use.  Currently, xdm supports


  Page 10                                         (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



            only MIT-MAGIC-COOKIE-1 authorization, XDM-
            AUTHORIZATION-1 could be supported as well, but DES is
            not generally distributable.  XDMCP connections specify
            which authorization types are supported dynamically, so
            authName is ignored in this case.  When authorize is
            set for a display and authorization is not available,
            the user is informed by having a different message
            displayed in the login widget.  By default, authorize
            is "true"; authName is "MIT-MAGIC-COOKIE-1".

       DisplayManager.DISPLAY.authFile"
            This file is used to communicate the authorization data
            from xdm to the server, using the -auth server command
            line option.  It should be kept in a directory which is
            not world-writable as it could easily be removed,
            disabling the authorization mechanism in the server.

       DisplayManager.DISPLAY.resetForAuth
            The original implementation of authorization in the
            sample server reread the authorization file at server
            reset time, instead of when checking the initial
            connection.  As xdm generates the authorization
            information just before connecting to the display, an
            old server would not get up-to-date authorization
            information.  This resource causes xdm to send SIGHUP
            to the server after setting up the file, causing an
            additional server reset to occur, during which time the
            new authorization information will be read

       DisplayManager.DISPLAY.userAuthDir
            When xdm is unable to write to the usual user
            authorization file ($HOME/.Xauthority), it creates a
            unique file name in this directory and points the
            environment variable XAUTHORITY at the created file.
            By default it uses "/tmp".

  CONTROLLING THE SERVER
       Xdm controls local servers using POSIX signals.  SIGHUP is
       expected to reset the server, closing all client connections
       and performing other clean up duties.  SIGTERM is expected


  Page 11                                         (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



       to terminate the server.  If these signals do not perform
       the expected actions, xdm will not perform properly.

       To control remote servers not using XDMCP, xdm searches the
       window hierarchy on the display and uses the protocol
       request KillClient in an attempt to clean up the terminal
       for the next session.  This may not actually kill all of the
       clients, as only those which have created windows will be
       noticed.  XDMCP provides a more sure mechanism; when xdm
       closes it's initial connection, the session is over and the
       terminal is required to close all other connections.

  CONTROLLING XDM
       Xdm responds to two signals: SIGHUP and SIGTERM.  When sent
       a SIGHUP, xdm rereads the configuration file and the 1file
       specified by the DisplayManager.servers resource and notices
       if entries have been added or removed.  If a new entry has
       been added, xdm starts a session on the associated display.
       Entries which have been removed are disabled immediately,
       meaning that any session in progress will be terminated
       without notice, and no new session will be started.

       When sent a SIGTERM, xdm terminates all sessions in progress
       and exits.  This can be used when shutting down the system.

       Xdm attempts to mark the various sub-processes for ps(1) by
       editing the command line argument list in place.  Because
       xdm can't allocate additional space for this task, it is
       useful to start xdm with a reasonably long command line (15
       to 20 characters should be enough).  Each process which is
       servicing a display is marked "-<Display-Name>".

  AUTHENTICATION WIDGET
       The authentication widget is an application which reads a
       name/password pair from the keyboard.  As this is a toolkit
       client, nearly every imaginable parameter can be controlled
       with a resource.  Resources for this widget should be put
       into the file named by DisplayManager.DISPLAY.resources.
       All of these have reasonable default values, so it is not
       necessary to specify any of them.


  Page 12                                         (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



  xlogin.Login.y
       xlogin.Login.width, xlogin.Login.height, xlogin.Login.x,
            The geometry of the login widget is normally computed
            automatically.  If you wish to position it elsewhere,
            specify each of these resources.
       xlogin.Login.foreground
            The color used to display the typed-in user name.

       xlogin.Login.font
            The font used to display the typed-in user name.

       xlogin.Login.greeting
            A string which identifies this window.  The default is
            "Welcome to the X Window System".

       xlogin.Login.unsecureGreeting
            When X authorization is requested in the configuration
            file for this display and none is in use, this greeting
            replaces the standard greeting.  It's default value is
            "This is an unsecure session"

       xlogin.Login.greetFont
            The font used to display the greeting.

       xlogin.Login.greetColor
            The color used to display the greeting.

       xlogin.Login.namePrompt
            The string displayed to prompt for a user name.  Xrdb
            strips trailing white space from resource values, so to
            add spaces at the end of the prompt (usually a nice
            thing), add spaces escaped with backslashes.  The
            default is "Login:  "

       xlogin.Login.passwdPrompt
            The string displayed to prompt for a password.  The
            default is "Password:  ".




Page 13 (printed 8/30/91)
XDM(1) X Version 11 (Release 4) XDM(1) xlogin.Login.promptFont The font used to display both prompts. xlogin.Login.promptColor The color used to display both prompts.
       xlogin.Login.fail
            A message which is displayed when the authentication
            fails.  The default is "Login Failed, please try
            again".

       xlogin.Login.failFont
            The font used to display the failure message.

       xlogin.Login.failColor
            The color used to display the failure message.

       xlogin.Login.failTimeout
            The time (in seconds) that the fail message is
            displayed.  The default is 30 seconds.

       xlogin.Login.translations
            This specifies the translations used for the login
            widget.  Refer to the X Toolkit documentation for a
            complete discussion on translations.  The default
            translation table is:

                 Ctrl<Key>H:    delete-previous-character() \n\
                 Ctrl<Key>D:    delete-character() \n\
                 Ctrl<Key>B:    move-backward-character() \n\
                 Ctrl<Key>F:    move-forward-character() \n\
                 Ctrl<Key>A:    move-to-begining() \n\
                 Ctrl<Key>E:    move-to-end() \n\
                 Ctrl<Key>K:    erase-to-end-of-line() \n\
                 Ctrl<Key>U:    erase-line() \n\
                 Ctrl<Key>X:    erase-line() \n\
                 Ctrl<Key>C:    restart-session() \n\
                 Ctrl<Key>\\:   abort-session() \n\
                 <Key>BackSpace:delete-previous-character() \n\
                 <Key>Delete:   delete-previous-character() \n\


  Page 14                                         (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



                 <Key>Return:   finish-field() \n\
                 <Key>:         insert-char() \


       The actions which are supported by the widget are:

       delete-previous-character
            Erases the character before the cursor.

       delete-character
            Erases the character after the cursor.

       move-backward-character
            Moves the cursor backward.

       move-forward-character
            Moves the cursor forward.

       move-to-begining
            (Apologies about the spelling error.)  Moves the cursor
            to the beginning of the editable text.

       move-to-end
            Moves the cursor to the end of the editable text.

       erase-to-end-of-line
            Erases all text after the cursor.

       erase-line
            Erases the entire text.

       finish-field
            If the cursor is in the name field, proceeds to the
            password field; if the cursor is in the password field,
            check the current name/password pair.  If the
            name/password pair are valid, xdm starts the session.
            Otherwise the failure message is displayed and the user
            is prompted to try again.




Page 15 (printed 8/30/91)
XDM(1) X Version 11 (Release 4) XDM(1) abort-session Terminates and restarts the server. abort-display Terminates the server, disabling it. This is a rash action and is not accessible in the default configuration. It can be used to stop xdm when shutting the system down, or when using xdmshell.
       restart-session
            Resets the X server and starts a new session.  This can
            be used when the resources have been changed and you
            want to test them, or when the screen has been
            overwritten with system messages.

       insert-char
            Inserts the character typed.

       set-session-argument
            Specifies a single word argument which is passed to the
            session at startup.  See the sections on Xsession and
            Typical usage.

       allow-all-access
            Disables access control in the server, this can be used
            when the .Xauthority file cannot be created by xdm.  Be
            very careful using this, it might be better to
            disconnect the machine from the network before doing
            this.

  The Xstartup file
       This file is typically a shell script.  It is run as "root"
       and should be very careful about security.  This is the
       place to put commands which make fake entries in /etc/utmp,
       mount users' home directories from file servers, display the
       message of the day, or abort the session if logins are not
       allowed.  Various environment variables are set for the use
       of this script:

            DISPLAY        is set to the associated display name


  Page 16                                         (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



            HOME           is set to the home directory of the user
            USER           is set to the user name
            PATH           is set to the value of DisplayManager.DISPLAY.systemPath
            SHELL          is set to the value of DisplayManager.DISPLAY.systemShell
            XAUTHORITY     may be set to an authority file


       No arguments of any kind are passed to the script.  Xdm
       waits until this script exits before starting the user
       session.  If the exit value of this script is non-zero, xdm
       discontinues the session immediately and starts another
       authentication cycle.

  The Xsession program
       This is the command which is run as the user's session.  It
       is run with the permissions of the authorized user, and has
       several environment variables specified:

            DISPLAY        is set to the associated display name
            HOME           is set to the home directory of the user
            USER           is set to the user name
            PATH           is set to the value of DisplayManager.DISPLAY.userPath
            SHELL          is set to the user's default shell (from /etc/passwd)
            XAUTHORITY     may be set to a non-standard authority file


       At most installations, Xsession should look in $HOME for a
       file .xsession which would contain commands that each user
       would like to use as a session.  This would replace the
       system default session.  Xsession should also implement the
       system default session if no user-specified session exists.
       See the section Typical Usage below.

       An argument may be passed to this program from the
       authentication widget using the `set-session-argument'
       action.  This can be used to select different styles of
       session.  One very good use of this feature is to allow the
       user to escape from the ordinary session when it fails.
       This would allow users to repair their own .xsession if it
       fails, without requiring administrative intervention.  The


  Page 17                                         (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



       section on typical usage demonstrates this feature.

  The Xreset file
       Symmetrical with Xstartup, this script is run after the user
       session has terminated.  Run as root, it should probably
       contain commands that undo the effects of commands in
       Xstartup, removing fake entries from /etc/utmp or unmounting
       directories from file servers.  The collection of
       environment variables that were passed to Xstartup are also
       given to Xreset.
  Typical Usage
       Actually, xdm is designed to operate in such a wide variety
       of environments that "typical" is probably a misnomer.
       However, this section will focus on making xdm a superior
       solution to traditional means of starting X from /etc/ttys
       or manually.

       First off, the xdm configuration file should be set up.  A
       good thing to do is to make a directory (/usr/lib/X11/xdm
       comes immediately to mind) which will contain all of the
       relevant files.  Here is a reasonable configuration file,
       which could be named xdm-config :


            DisplayManager.servers:            /usr/lib/X11/xdm/Xservers
            DisplayManager.errorLogFile:       /usr/lib/X11/xdm/xdm-errors
            DisplayManager.pidFile:            /usr/lib/X11/xdm/xdm-pid
            DisplayManager*resources:          /usr/lib/X11/xdm/Xresources
            DisplayManager*session:            /usr/lib/X11/xdm/Xsession
            DisplayManager._0.authorize:       true
            DisplayManager*authorize:          false


       As you can see, this file simply contains references to
       other files.  Note that some of the resources are specified
       with ``*'' separating the components.  These resources can
       be made unique for each different display, by replacing the
       ``*'' with the display-name, but normally this is not very
       useful.  See the Resources section for a complete


  Page 18                                         (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



       discussion.

       The first file /usr/lib/X11/xdm/Xservers contains the list
       of displays to manage.  Most workstations have only one
       display, numbered 0, so the file will look like this:

            :0 Local local /usr/bin/X11/X :0


       This will keep /usr/bin/X11/X running on this display and
       manage a continuous cycle of sessions.
       The file /usr/lib/X11/xdm/xdm-errors will contain error
       messages from xdm and anything output to stderr by Xstartup,
       Xsession or Xreset.  When you have trouble getting xdm
       working, check this file to see if xdm has any clues to the
       trouble.

       The next configuration entry, /usr/lib/X11/xdm/Xresources,
       is loaded onto the display as a resource database using xrdb
       (1).  As the authentication widget reads this database
       before starting up, it usually contains parameters for that
       widget:

            xlogin*login.translations: #override\
                 <Key>F1: set-session-argument(failsafe) finish-field()\n\
                 <Key>Return: set-session-argument() finish-field()
            xlogin*borderWidth: 3
            #ifdef COLOR
            xlogin*greetColor: #f63
            xlogin*failColor: red
            xlogin*Foreground: black
            xlogin*Background: #fdc
            #else
            xlogin*Foreground: black
            xlogin*Background: white
            #endif





Page 19 (printed 8/30/91)
XDM(1) X Version 11 (Release 4) XDM(1) The various colors specified here look reasonable on several of the displays we have, but may look awful on other monitors. As X does not currently have any standard color naming scheme, you might need to tune these entries to avoid disgusting results. Please note the translations entry; it specifies a few new translations for the widget which allow users to escape from the default session (and avoid troubles that may occur in it). Note that if #override is not specified, the default translations are removed and replaced by the new value, not a very useful result as some of the default translations are quite useful (like "<Key>: insert- char ()" which responds to normal typing).
       The Xstartup file used here simply prevents login while the
       file /etc/nologin exists.  As there is no provision for
       displaying any messages here (there isn't any core X client
       which displays files), the user will probably be baffled by
       this behavior.  I don't offer this as a complete example,
       but simply a demonstration of the available functionality.

       Here is a sample Xstartup script:

            #!/bin/sh
            #
            # Xstartup
            #
            # This program is run as root after the user is verified
            #
            if [ -f /etc/nologin ]; then
                 exit 1
            fi
            exit 0

       The most interesting script is Xsession.  This version
       recognizes the special "failsafe" mode, specified in the
       translations in the Xresources file above, to provide an
       escape from the ordinary session:

            #!/bin/sh
            #


  Page 20                                         (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



            # Xsession
            #
            # This is the program that is run as the client
            # for the display manager.  This example is
            # quite friendly as it attempts to run a per-user
            # .xsession file instead of forcing a particular
            # session layout
            #

            case $# in
            1)
                 case $1 in
                 failsafe)
                      exec xterm -geometry 80x24-0-0 -ls
                      ;;
                 esac
            esac

            startup=$HOME/.xsession
            resources=$HOME/.Xresources

            if [ -f $startup ]; then
                 exec $startup
                 exec /bin/sh $startup
            else
                 if [ -f $resources ]; then
                      xrdb -load $resources
                 fi
                 twm &
                 exec xterm -geometry 80x24+10+10 -ls
            fi


       No Xreset script is necessary, so none is provided.


  SOME OTHER POSSIBILITIES
       You can also use xdm to run a single session at a time,
       using the 4.3 init options or other suitable daemon by
       specifying the server on the command line:


  Page 21                                         (printed 8/30/91)



















  XDM(1)              X Version 11 (Release 4)               XDM(1)



            xdm -server ":0 SUN-3/60CG4 local /usr/bin/X :0"


       Or, you might have a file server and a collection of X
       terminals.  The configuration for this could look identical
       to the sample above, except the Xservers file might look
       like:

            extol:0 VISUAL-19 foreign
            exalt:0 NCD-19 foreign
            explode:0 NCR-TOWERVIEW3000 foreign


       This would direct xdm to manage sessions on all three of
       these terminals.  See the section "Controlling Xdm" above
       for a description of using signals to enable and disable
       these terminals in a manner reminiscent of init(8).

       One thing that xdm isn't very good at doing is coexisting
       with other window systems.  To use multiple window systems
       on the same hardware, you'll probably be more interested in
       xinit .

  SEE ALSO
       X(1), xinit(1) and XDMCP

  BUGS
  COPYRIGHT
       Copyright 1988, Massachusetts Institute of Technology.
       See X(1) for a full statement of rights and permissions.

  AUTHOR
       Keith Packard, MIT X Consortium









Page 22 (printed 8/30/91)

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026