# X Window System

X Window System, X-Window, X11 ou simplesmente X é um software de sistema e um protocolo que fornece uma base para interfaces gráficas de usuário (com o conceito de janelas) e funcionalidade rica de dispositivos de entrada para redes de computadores. Ele cria uma camada de abstração de hardware onde o software é escrito para usar um conjunto generalizado de comandos, permitindo a independência de dispositivo e reutilização de programas em qualquer computador que implemente o X.
Originalmente chamado simplesmente de X, foi desenvolvido no MIT em 1984. Atualmente está na versão 11, publicada em setembro de 1987, e por isso carrega no nome este número.
X-Window é o toolkit e protocolo padrão para GUI nos sistemas Unix e assemelhados, como o Linux, mas existem versões para outros sistemas operacionais, como o Microsoft Windows e o Mac OS, por exemplo.
Os servidores do sistema X-Window são executados em computadores com displays baseados em mapas de bits (bitmap). O servidor distribui as ações de entrada do usuário (mouse e teclado) e aceita os pedidos de saída através de vários programas clientes através de uma variedade de diferentes canais de comunicação entre processos. Mesmo sabendo que o caso mais comum de uso é de programas clientes rodando na mesma máquina do servidor, os clientes podem rodar de forma transparente em máquinas diferentes (inclusive com arquiteturas e sistemas operacionais diferentes).
O X (como é comumente chamado) funciona segundo o modelo cliente-servidor: o servidor X recebe os pedidos via uma porta, um cliente X conecta-se ao servidor X e envia seus pedidos utilizando o protocolo X através da biblioteca X (Xlib). Este modelo de comunicação permite o uso de janelas de modo transparente através da rede.
O X suporta operações de janelas (overlapping hierarchical subwindows) e operações de texto e gráficos, em displays preto e branco ou coloridos.
O número de programas que utilizam o X é enorme.

## Autorização no X Window

No sistema X Window, os programas rodam como clientes X e desta forma eles se conectam ao servidor de janela X, possivelmente através de uma rede de computadores. Uma vez que a rede pode ser acessível a outros usuários, é necessário um método para proibir o acesso a programas executados por usuários diferentes daquele que está logado.
Há cinco mecanismos de controle de acesso padrões que controlam se uma aplicação cliente pode conectar a um servidor de janelas X. Eles podem ser agrupados em três categorias:
* acesso baseado em hospedeiro
* acesso baseado em cookie
* acesso baseado em usuário
Adicionalmente, assim como em qualquer outra conexão de rede, o tunelamento pode ser usado.

### Acesso baseado em hospedeiro

O método de acesso baseado em hospedeiro (host) consiste na especificação de um conjunto de máquinas que estão autorizadas a se conectar ao servidor de janela X. Este sistema é considerado obsoleto, pois permite que qualquer usuário que tenha acesso a um hospedeiro se conecte à tela. O programa xhost e três requisições do protocolo do núcleo do Sistema X Window são usados ​​para ativar esse mecanismo e para exibir e alterar a lista de hospedeiros autorizados. O uso inadequado de xhost pode inadvertidamente dar a cada host na Internet pleno acesso a um servidor de exibição X.

### Acesso baseado em cookie

Os métodos de autorização baseados em cookies são baseados na escolha de um cookie mágico (um pedaço arbitrário de dados) e a passagem dele para o servidor quando ele é iniciado. Cada cliente que pode provar ter o conhecimento desse cookie é então autorizado para conectar-se ao servidor.
Esses cookies são criados por um programa separado e armazenados no arquivo .Xauthority no diretório home do usuário, por padrão. Como resultado, todos os programas executados pelo cliente no computador local podem acessar esse arquivo e, portanto, o cookie, que é necessário para ser autorizado pelo servidor. Se o usuário deseja iniciar um aplicativo a partir de outro computador da rede, o cookie tem que ser copiado para aquele outro computador. Como o cookie é copiado é uma questão dependente do sistema: por exemplo, em plataformas do tipo Unix, scp pode ser usado para copiar o cookie.
Os dois sistemas que utilizam este método são MIT-MAGIC-COOKIE-1 e XDM-AUTHORIZATION-1. No primeiro método, o cliente simplesmente envia o cookie quando solicitado a se autenticar. No segundo método, uma chave secreta também é armazenada no arquivo .Xauthority. O cliente cria uma sequência concatenando o tempo atual, um identificador dependente de transporte, e o cookie criptografa a string resultante, e envia para o servidor.
A aplicação xauth é um utilitário para acessar o arquivo .Xauthority.

### Acesso baseado em usuário

Os métodos de acesso baseado em usuário funcionam autorizando usuários específicos a se conectarem ao servidor. Quando um cliente estabelece uma conexão com um servidor, ele tem que provar que está sendo controlado por um usuário autorizado.
Os dois métodos baseados em autenticação de usuários são SUN-DES-1 e MIT-KERBEROS-5. O primeiro sistema é baseado em um mecanismo de chamada de procedimento remoto de segurança desenvolvido no SunOS. O segundo mecanismo é baseado na confiabilidade do cliente e servidor em um servidor Kerberos.

### Tunelamento

A conexão entre cliente e servidor sobre uma rede pode ser protegido usando uma ferramenta de tunelamento remoto como SSL ou SSH.

## Programas desenvolvidos na distribuição do núcleo do X pelo Consórcio X

(Lista obtida a partir da página de manual do X (7), que está disponível em inglês na maioria das distribuições Linux pelo pacote "xorg-doc" ou "xorg-docs").
* um emulador de terminais: xterm, aterm;
* um gerenciador de janelas, twm;
* um gerenciador de display, xdm;
* um programa redirecionador para o console, xconsole;
* uma interface de correio, xmh;
* um editor de bitmaps, bitmap;
* ferramentas de listagem/manipulação de recursos, appres, editres;
* programas de controle de acesso, xauth, xhost e iceauth;
* programas de configuração de preferências do usuário, xrdb, xcmsdb, xset, xsetroot, xstdcmap e xmodmap;
* relógios, xclock e oclock;
* um exibidor de fontes, xfd;
* utilitários para mostrar informações sobre fontes, janelas, e displays, xlsfonts, xwininfo, xlsclients, xdpyinfo, xlsatoms e xprop;
* utilitários de manipulação de imagens da tela, xwd, xwud e xmag;
* um utilitário de medição de perfórmance, x11perf;
* um compilador de fontes, bdftopcf;
* um servidor de fontes e utilitários relacionados, xfs, fsinfo, fslsfonts, fstobdf;
* um servidor de display e utilitários relacionados, Xserver, rgb, mkfontdir; *utilitários de execução remota, rstart e xon;
* um gerenciador de área de transferência, xclipboard;
* compilador de descrição de teclado e utilitários relacionados, xkbcomp, xkbprint, xkbbell, xkbevd, xkbvleds e xkbwatch;
* um utilitário para terminar clientes, xkill;
* um proxy otimizado para o protocolo X, lbxproxy;
* um proxy de segurança para firewalls, xfwp;
* um gerenciador de proxy, proxymngr;
* um utilitário para localizar proxys, xfindproxy;
* plugins pra o Netscape Navigator, libxrx.so e libxrxnest.so;
* e um utilitário para redesenhar parte da tela, xrefresh.
Muitos outros utilitários, gerenciadores de janelas, jogos, kits de desenvolvimento, etc, estão incluídos como softwares de usuários contribuintes na distribuição do Consórcio X, ou estão disponíveis em sites de FTP anônimo na Internet.