O sistema X Window usa uma arquitetura cliente-servidor. O servidor X é executado na máquina que possui a tela (monitores + dispositivos de entrada), enquanto os clientes X podem ser executados em qualquer outra máquina e se conectar ao servidor X usando o protocolo X (não diretamente, mas usando uma biblioteca, como Xlib, ou o mais moderno XCB controlado por eventos, sem bloqueio). O protocolo X foi projetado para ser extensível e possui muitas extensões (consulte xdpyinfo(1)
).
O servidor X realiza apenas operações de baixo nível, como criar e destruir janelas, executar operações de desenho (atualmente a maioria dos desenhos é feita no cliente e enviada como uma imagem para o servidor), enviando eventos para as janelas, ... Você pode ver quão pouco um servidor X executa executando X :1 &
(use qualquer número ainda não usado por outro servidor X) ou Xephyr :1 &
(o Xephyr executa um servidor X incorporado no seu servidor X atual) e depois execute xterm -display :1 &
e alterne para o novo servidor X (pode ser necessário configurar a autorização X usando xauth(1)
).
Como você pode ver, o servidor X faz muito pouco, não desenha barras de título, não minimiza / iconifica a janela, não gerencia o posicionamento da janela ... É claro, você pode controlar o posicionamento da janela manualmente executando um comando como xterm -geometry -0-0
, mas normalmente você vai ter um cliente especial X fazendo as coisas acima. Esse cliente é chamado de gerenciador de janelas . Só pode haver um gerenciador de janelas ativo por vez. Se você ainda tiver aberto o servidor X nua dos comandos anteriores, você pode tentar executar um gerenciador de janelas sobre ele, como twm
, metacity
, kwin
, compiz
, larswm
, pawm
, ...
Como dissemos, o X realiza 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 kits de ferramentas , por exemplo: Xaw, GTK, Qt, FLTK, ...
Os ambientes de área de trabalho são coleções de programas projetados para fornecer uma experiência unificada ao usuário. Portanto, os ambientes de área de trabalho geralmente fornecem painéis, ativadores de aplicativos, bandejas do sistema, painéis de controle, infraestrutura de configuração (onde salvar as configurações). Alguns ambientes de área de trabalho bem conhecidos são o KDE (construído usando o kit de ferramentas Qt), o Gnome (usando o GTK), o Enlightenment (usando suas próprias bibliotecas de kits de ferramentas), ...
Alguns efeitos modernos da área de trabalho são melhores usando hardware 3D. Portanto, um novo componente aparece, o gerente composto . Uma extensão X, a extensão XComposite, envia o conteúdo da janela para o gerenciador composto. O gerenciador de compostos converte esses conteúdos em texturas e usa o hardware 3D via OpenGL para compor de várias maneiras (mistura alfa, projeções 3D, ...).
Há pouco tempo, o servidor X conversava diretamente com dispositivos de hardware. Uma parte significativa desse manuseio de dispositivo foi movida para o kernel do SO: DRI (permitindo acesso ao hardware 3D pelo X e clientes de renderização direta), evdev (interface unificada para o manuseio do dispositivo de entrada), KMS (configuração do modo de gráficos em movimento para o kernel) , GEM / TTM (gerenciamento de memória de textura).
Portanto, com a complexidade do manuseio de dispositivos agora principalmente fora do X, ficou mais fácil experimentar sistemas de janelas simplificados. Wayland é um sistema de janelas baseado no conceito de gerenciador composto, ou seja, o sistema de janelas é o gerenciador composto. Wayland utiliza o manuseio do dispositivo que saiu do X e é renderizado usando o OpenGL.
Quanto ao Unity, é um ambiente de desktop projetado para ter uma interface de usuário adequada para netbooks.