O X Window System usa uma arquitetura cliente-servidor. O servidor X é executado na máquina que possui o monitor (monitores + dispositivos de entrada), enquanto os clientes X podem ser executados em qualquer outra máquina e se conectam ao servidor X usando o protocolo X (não diretamente, mas usando uma biblioteca, como Xlib, ou o mais moderno XCB orientado a eventos sem bloqueio. O protocolo X é projetado para ser extensível e possui muitas extensões (veja xdpyinfo(1)
).
O servidor X faz apenas operações de baixo nível, como criar e destruir janelas, fazer operações de desenho (hoje em dia a maioria dos desenhos é feita no cliente e enviada como uma imagem para o servidor), enviando eventos para janelas, ... veja como um servidor X faz pouco executando X :1 &
(use qualquer número que não seja usado por outro servidor X) ou Xephyr :1 &
(o Xephyr executa um servidor X embutido no seu servidor X atual) e executando xterm -display :1 &
e alternando para o novo servidor X (talvez seja necessário configurar a autorização X usando xauth(1)
).
Como você pode ver, o servidor X faz muito pouco, ele não desenha barras de título, não minimiza janelas / iconificações, não gerencia o posicionamento de janelas ... Naturalmente, você pode controlar o posicionamento da janela manualmente executando um comando como xterm -geometry -0-0
, mas você normalmente terá um cliente X especial fazendo as coisas acima. Este cliente é chamado de gerenciador de janelas . Só pode haver um gerenciador de janelas ativo por vez. Se você ainda tiver aberto o servidor X dos comandos anteriores, tente executar um gerenciador de janelas, como twm
, metacity
, kwin
, compiz
, larswm
, pawm
, ...
Como dissemos, o X faz apenas operações de baixo nível, e não fornece conceitos de nível superior como botões, menus, barras de ferramentas ... Estes são fornecidos por bibliotecas chamadas toolkits , por exemplo: Xaw , GTK, Qt, FLTK, ...
Os ambientes de área de trabalho são conjuntos de programas projetados para fornecer uma experiência de usuário unificada. Portanto, os ambientes de área de trabalho geralmente fornecem painéis, lançadores de aplicativos, bandejas do sistema, painéis de controle e infra-estrutura de configuração (onde salvar configurações). Alguns ambientes de desktop conhecidos são o KDE (construído usando o kit de ferramentas Qt), o Gnome (usando GTK), o Enlightenment (usando suas próprias bibliotecas de toolkit), ...
Alguns efeitos modernos da área de trabalho são melhor feitos usando hardware 3D. Então, um novo componente aparece, o gerenciador de compostos . Uma extensão X, a extensão XComposite, envia o conteúdo da janela para o gerenciador de composição. O gerenciador de compostos converte esses conteúdos em texturas e usa hardware 3D via OpenGL para compor-os de várias maneiras (mesclagem alfa, projeções 3d, ...).
Não faz muito tempo, o servidor X conversou diretamente com os dispositivos de hardware. Uma parte significativa do tratamento desse dispositivo foi transferida para o kernel do SO: DRI (permitindo acesso a hardware 3D por clientes de renderização direta X e ), evdev (interface unificada para manipulação de dispositivo de entrada), KMS configuração do modo gráfico para o kernel), GEM / TTM (gerenciamento de memória de textura).
Assim, com a complexidade do manuseio do dispositivo agora principalmente fora do X, ficou mais fácil experimentar sistemas simplificados de janelas. O Wayland é um sistema de janelas baseado no conceito do gerenciador de composição, ou seja, o sistema de janelas é o gerenciador de composição. O Wayland faz uso do manuseio do dispositivo que saiu do X e renderiza usando o OpenGL.
Quanto ao Unity, é um ambiente de desktop projetado para ter uma interface de usuário adequada para netbooks.