XDMCP is the "X Display Manager (xdm) Control Protocol".

Introduction

On a Unix (Linux etc]) box, the X Server is normally started by an "X Display Manager" (such as xdm or gdm). This program allows users to log in graphically, and then start a consistent set of applications (eg a panel, a clock etc) when they have logged in.

However, apart from just allowing the used to log in locally, it can also manage remote X terminals (or other computers running an X server) using XDMCP. There are essentially 3 different modes that XDMCP can run in, which change how it decides what machines to let you log into.

XDMCP Query

This is the simplest mode. When you set up an XDMCP Query session, your specify a machine to query, and your local XDM asks that remote machine to log you in. The remote machine is expected to provide you with a login box, and give you access to applications on it (as long as you can log in to it of course).

XDMCP Broadcast

In Broadcast mode, your XDM sends out a broadcast to the local network basically saying "Any machine who's willing to manage a remote X session, please let me know". It will then give you a list of all these machines, and let you select one of them. Once you've done this, it then sends a Query message (as above) to that machine.

XDMCP Indirect

This is somewhat of a hybrid. A message is sent to a specified remote machine. However, instead of then logging into that remote machine, you're asking that remote machine to then do a broadcast (as above) and give you the list of machines which respond. Once you then select a machine, you then Query it (as above) and log in. This effectively allows you to do a broadcast on a network which isn't local to you.

Uses

XDMCP is widely used in environments where there are multiple Unix servers that can "manage a display" - ie allow a user to log in. This is especially the case when using semi-dumb X terminals, as in this case there is no concept of logging on locally to the machine itself - they have to be managed by a remote machine.

XDMCP uses Port 177/tcp.