# X display manager (tipo de programa)

No X Window System, um X display manager, ou gerenciador de exibição X, é executado como um programa que permite o início de uma sessão em um servidor X a partir do mesmo ou de outro computador.
Um gerenciador de exibição apresenta ao usuário uma tela de login que solicita um nome de usuário e senha. Uma sessão começa quando o usuário entra com sucesso com uma combinação válida de nome de usuário e senha.
Quando o gerenciador de exibição é executado no computador do usuário, ele inicia o servidor X antes de apresentar ao usuário a tela de login, repetindo, opcionalmente, quando o usuário faz o logoff. Nesta condição, o gerenciador de exibição realiza no X Window System a funcionalidade do init, getty, e login em terminais de modo de caracteres. Quando o gerenciador de exibição é executado em um computador remoto, ele age como um servidor de telnet, solicitando nome de usuário e senha, e inicia uma sessão remota.
O X11 Release 3 introduziu os gerenciadores de exibição em outubro de 1988 com o objetivo de dar suporte aos terminais X standalone, no qual só depois entraram no mercado. Vários gerenciadores de exibição continuaram em uso rotineiro para fornecer uma tela gráfica de autenticação em estações de trabalho standalone executando o X. O X11R4 introduziu o X Display Manager Control Protocol (XDMCP) em dezembro de 1989 para corrigir problemas na implementação X11R3.

## Gerenciador de exibição local e remoto

Um gerenciador de exibição pode ser executado no mesmo computador onde o usuário está sentado ou em um computador remoto. No primeiro caso, o gerenciador de exibição inicia um ou mais servidores X, mostrando a tela de login no início e (opcionalmente) a cada vez que o usuário faz logoff. No segundo caso, o gerenciador de exibição trabalha de acordo com o protocolo XDMCP.
O protocolo XDMCP ordena que o servidor X inicie de forma autônoma e conecta-se ao gerenciador de exibição. No paradigma X Window System, o servidor é executado no computador fornecendo a tela (exibição) e os dispositivos de entrada. Um servidor pode se conectar, utilizando o protocolo XDMCP, a um gerenciador de exibição sendo executado em outro computador, convidando-o a iniciar a sessão. Neste caso, o servidor X atua como um cliente telnet gráfico enquanto o gerenciador de exibição funciona como um servidor de telnet: usuários iniciam programas do computador que está executando o gerenciador de exibição, enquanto a sua entrada e saída ocorrem no computador onde o servidor (e o usuário) se senta.
Um administrador pode configurar um servidor X em execução no computador ou terminal do usuário, seja para se conectar a um gerenciador de exibição específico, ou para exibir uma lista de hosts adequados executando potenciais gerenciadores de exibição. Um programa XDMCP Chooser (escolhedor XDMCP) permite ao usuário selecionar um host dentre aqueles que o terminal pode se conectar:
* uma lista predefinida de hosts e seus respectivos endereços de rede;
* uma lista de hosts (na sub-rede local TCP/IP) que o servidor XDMCP (parte do servidor X?), por sua vez obtém por uma rede de difusão.
O servidor XDMCP, muitas vezes, irá se apresentar nesta lista. Quando o usuário seleciona um host da lista, o servidor X em execução na máquina local irá se conectar ao X display manager do computador remoto selecionado.

## X Display Manager Control Protocol

O X Display Manager Control Protocol (XDMCP), em português Protocolo de Controle de Gerenciamento de Exibição X, usa a porta UDP 177. Um servidor X solicita que um gerenciador de exibição (display manager) inicie uma sessão por meio do envio de um pacote Query. Se o gerenciador de exibição permite o acesso para este servidor X, ele responde enviando de volta um pacote Willing para o servidor X. (O servidor X também pode enviar pacotes BroadcastQuery ou IndirectQuery para iniciar uma sessão - este mecanismo para requisitar uma sessão assemelha-se ao uso do DHCP para solicitar um endereço IP.)
O gerenciador de exibição deve se autenticar no servidor. Para fazer isso, o servidor X envia um pacote Request para o gerenciador de exibição, que retorna um pacote Accept. Se o pacote Accept contiver a resposta esperada pelo servidor X, o gerenciador de exibição será autenticado. Produzir a resposta correta pode exigir que o gerenciador de exibição tenha acesso a uma chave secreta, por exemplo. Se a autenticação for bem-sucedida, o servidor X enviará um pacote Manage para informar o gerenciador de exibição. Em seguida, o gerenciador de exibição exibe sua tela de login conectando-se ao servidor X como um cliente X regular.
Durante a sessão, o servidor pode enviar pacotes KeepAlive para o gerenciador de exibição em intervalos. Se o gerenciador de exibição não responder com um pacote Alive dentro de um determinado período de tempo, o servidor X presumirá que o gerenciador de exibição parou de ser executado e poderá encerrar a conexão.
Um problema com o XDMCP é que, da mesma forma que o telnet, a autenticação ocorre sem criptografia. Se for possível realizar um snooping, isso deixa o sistema vulnerável a ataques. É mais seguro usar um túnel ssh para o tráfego do sistema X.