Até o momento, estivemos tratando o ambiente gráfico do
Linux como se fosse apenas o servidor X, mas na realidade o ambiente gráfico como conhecemos se divide em mais duas camadas, o Controlador de Janelas e o Ambiente Desktop.
Atualmente, estamos acostumados com um padrão gráfico, ou melhor, um paradigma gráfico, que foi desenvolvido pela Xerox e que obteve muito sucesso, sendo copiado pela maioria, senão por todos os ambientes Desktops encontrados, o WIMP - Window, Icon, Menu, Pointing device (Janela, Ícone, Menu, Dispositivo de apontador).
No Linux:
- o Servidor X cuida apenas do Dispositivo de apontador, do WIMP ( além do vídeo, teclado e mouse).
- o Gerenciador de Janelas cuida de toda a lógica referente a janela, como: arrastar, redimensionar, minimizar, não deixar redimensionar bordas fixas etc.
- o Ambiente Desktop, por sua vez abstrai, através de ícones e Menus.
Para ilustrarmos o funcionamento das três camadas, vamos imaginar a execução de um programa através de dois cliques dado no ícone.
O Servidor X captura os cliques e passa adiante, para quem for responsável, isso não o importa para ele. Neste caso o responsável foi o Ambiente Desktop que abstraiu a execução da aplicação em um ícone, ele então, entende o clique realiza a execução da aplicação, porém a solicitação de execução da aplicação poderia ser feita por uma linha de comando no shell. Ao criar a janela, o gerenciador de janelas passa a gerenciá-la. Nem a aplicação, nem o Servidor X querem saber quem vai tratar o gerenciamento da janela, nem se alguém vai tratar. A aplicação estará preocupada com o que ela se destina a fazer, já o Servidor X está preocupado em desenhar na tela, onde pedirem.
Logo, quando a janela é arrastada, o Gerenciador de Janelas solicita ao Servidor X que redesenhe a janela em várias posições diferentes, apagando sempre o desenho anterior, dando a sensação de movimento. Porém, o Gerenciador de Janelas poderia pedir que ao X que desenhasse apenas quando chegasse ao destino, ou poderia não ter gerenciador de janela, fazendo com que a janela não pudesse ser movida.
Um gerenciador de janelas, normalmente, não oferece abstração para ícones e menus, eles esperam que o Ambiente Desktop faça esse trabalho, porém nada impede que sejam criados Gerenciadores de Janelas como o Fluxbox e Enlightenment, que foram feitos para não necessitarem de nenhum componente superior.
As imagens abaixo mostram a Ambiente Desktop GNOME, que veremos mais tarde, exibindo uma janela do Iceweasel.
Na primeira imagem o Gerenciador de Janelas metacity está em execução. Note que a janela apresenta a barra de título, os botões de controle, bordas etc. Todas estas funcionalidades existem pois o metacity está controlando-as.
Na segunda imagem temos o mesmo ambiente, porém o processo do metacity foi destruído, logo, não há mais um Gerenciador de Janelas sendo executado. Note que todas as funcionalidades referentes ao Gerenciador de Janelas deixou de existir.
Em ambos os casos, o Servidor X, neste caso o Xorg, e o ambiente Desktop, o GNOME, estão em execução.
Como foi mostrado, o Ambiente Desktop é algo bastante abstrato. Ele é formado por um conjunto de bibliotecas, serviços muito bem integrados e disponibilizado de forma agradável para utilização dos usuários. Porém, isso tem um custo. O desempenho da máquina é diminuindo de forma sensível. Isso faz com que usuários mais hardcore prefiram usar Gerenciadores de Janelas como, os já citados, Fluxbox e Enlightenment.
Os GNOME, KDE, XFCE, XPde, WindowMaker e IceWM são exemplos de Ambiente Desktop bastante usado no Linux. O XFCE, por exemplo, embora seja bem modesto, também é muito leve, contudo, traz muito mais funcionalidade que qualquer Gerenciador de Janelas, isso o torna uma opção bastante interessante para usuários de máquinas mais modestas.
Recentemente a Novell liberou o servidor XGL que usa a aceleração 3D da placa de vídeo para fazer efeitos maravilhosos. Graças a essa independência dos pacotes, esses efeitos podem ser vistos em qualquer Desktop (GNOME, KDE, XFCE, XPde, WindowMaker, IceWM etc) e qualquer Gerenciador de Janelas (metacity, fluxbox, enlightenment etc), pois o XGL é um Servidor X (que segue o padrão X11), logo ele é transparente as camadas superiores. Além do XGL, existe também o AIGLX da X.Org.
Percebam a modularização, essa independência das camadas do "Linux" (aqui entre aspas pois me refiro ao Linux de uma forma mais abrangente ainda do que vinha tratando) é um dos motivos que levam cada dia mais o "Linux" ganhar não usuários, mas amantes.