O X11 é um processo cuja responsabilidade é escutar dispositivos de entrada e gravar na tela. (Como isso lida com isso é outra questão, um pouco mais complicado.) Os processos falam com o X11 por meio de soquetes Unix ou TCP, dependendo da configuração (se são soquetes Unix, os arquivos de soquete estão geralmente em /tmp/.X11-unix
). Qualquer processo que lide com o X está falando com o X11 sobre um desses soquetes; não há intermediário na comunicação em si (a menos que você esteja usando uma configuração não padrão, como o encaminhamento de SSH ou xpra).
O gerenciador de janelas é um programa separado, que também fala com o X11 usando o protocolo X em um soquete. Ele usa um conjunto separado de APIs que o X fornece, permitindo que ele emita diretivas para outros aplicativos naquela instância X11 em particular; pode também emitir pedidos de desenho e de entrada, por ex. para desenhar decorações de janelas (como os habituais botões maximizar / minimizar / fechar e barras de título) ou para responder a atalhos globais (em sistemas modernos, normalmente o Ctrl-Alt-Del é tratado aqui). Observe que o gerenciador de janelas, de fato, apenas emite diretivas para os outros programas X, não ordens diretas; programas são capazes de ignorá-los, se eles tomarem algumas medidas especiais. (A situação é um pouco mais complicada com um gerenciador de janelas de composição, já que também manipula a renderização gráfica real para o servidor X como um intermediário para os aplicativos.) Todas as comunicações que ocorrem aqui estão ocorrendo em soquetes usando o protocolo X.
Um ambiente de desktop é um conjunto de programas que fazem várias coisas. Normalmente, o gerenciador de janelas está incluído nisso; ele também pode incluir alguns conjuntos de configuradores gráficos e programas utilitários, um gerenciador de arquivos integrado à área de trabalho, uma bandeja do sistema para exibir atualizações de status diversas e assim por diante. A maior parte disso não é particularmente misteriosa, apenas mais programas X que são renderizados no servidor X. Onde eles têm que se comunicar entre si, eles usam seus próprios protocolos, geralmente usando sockets de algum tipo como back-end. Recentemente, a tendência tem sido longe de aplicativos que escrevem seus próprios protocolos e em direção ao uso de metaprotocolo de alto nível, como dbus
.