Conhecendo o X Window System

Iniciado por gabriel0085, 05 de Novembro de 2007, 14:22

tópico anterior - próximo tópico

gabriel0085

Autor: Alinson Santos Xavier

Fonte: http://gelsol.lia.ufc.br/wiki/Artigos/XWindowSystem?from=Artigos.07





X Window System



Índice

    * Introdução
          o X Window System
          o História
    * Arquitetura
          o Modelo Cliente-Servidor
          o Core Protocol
          o Janelas
          o Pixmap
          o Recursos, Identificadores e Átomos
          o Propriedades
          o Mapeamentos
          o Grabs
    * Extensões
    * Autorização
    * Comunicação Inter-Cliente
    * Programação
    * Conclusão
    * Referências




Introdução


X Window System

O X Window System é o protocolo utilizado pela grande maioria dos sistemas operacionais Unix-like para se trabalhar com interfaces gráficas. O X fornece a fundação básica para que os programadores possam criar GUIs, desenhar e movimentar janelas, e interagir com dispositivos de entrada, como o mouse e o teclado.

Por utilizar um protocolo em rede, o X permite que o usuário use os recursos de uma máquina remota como se eles estivessem instalados localmente.

História

No início da década de 80, diversos sistemas operacionais começaram a abandonar suas interfaces convencionais, e implementar interfaces gráficas, que,além de serem mais amigáveis aos usuários, também aproveitavam melhor as capacidades de multiprocessamento dos computadores.

O X Window System, sucessor do W Window System, se originou em 1984, como uma colaboração entre o projeto Athena e o laboratório de ciências da computação do MIT. O objetivo era criar uma interface gráfica portável para conectar os mais diversos computadores do laboratório do MIT. A única alternativa da época, o Andrew Project, não pode ser utilizada por questões de licença.

Com o passar dos anos, o X Window se desenvolveu rapidamente. Em Maio de 1984, o protocolo tradicional foi substituí por um protocolo assíncrono, o que melhorou de forma significante a performance. Em 1985, foi adicionado o suporte a cores, e em 1986, foi portado para diversas plataformas, incluindo os computadores da Sun, as máquinas Apollo, e até o IBM PC/AT.

Embora a décima versão do sistema utilizasse uma boa arquitetura e possuisse diversas funcionalidades, logo ficou claro que um novo sistema, ainda mais portável, poderia ser utilizado. Porém, o MIT não possuia recursos para reescrever completamente o sistema. Então, com o auxílio da DEC, o X11 desenvolvido, e, em 1987, distribuído livremente, assim como as últimas duas versões anteriores do protocolo. O desenvolvimento foi aberto, e diversas idéias foram discutidas nas listas de discussão da recém-criada Internet, tornando o X Window um dos primeiros projetos livres de grande porte.

Com o sucesso do X11, foi decidido que, para manter o projeto aberto, era necessário que passasse a ser desenvolvido por organização neutra. Até hoje,diversas organizações foram criadas: inicialmente, o X Consortium, depois Open Group, e finnalmente, a X.Org Foundation, que, diferente de todos os grupos anteriores, não era conduzida por empresas, e sim pela própria comunidade.

No final de 2005, com a versão X11R7, a arquitetura monolítica do X Window foi trocada por um sistema totalmente modular, e com a criação de recursos como o XGL, o X Window voltou a ser um dos projetos mais ativos e inovadores do mundo do Software Livre.




Arquitetura


Modelo Cliente-Servidor

O X Window utiliza uma arquitetura baseada no modelo cliente-servidor. O servidor, ao contrário do que se imagina inicialmente, é executado na máquina local do usuário, é responsável por se comunicar com o hardware e com os periféricos da máquina. Os clientes são, na verdade, as aplicativos, que podem estar sendo executadas remotamente.

Core Protocol

A comunicação entre os clientes e o servidor é realizada através de trocas de pacotes. Ao todo, existem quatro tipos de pacote: Request Requisições que o cliente faz ao servidor. Por exemplo, desenhar uma reta.

Reply Resposta enviada ao cliente após uma requisição.

Event Notificação que o servidor envia aos clientes quando algum evento ocorre. Por exemplo, quando o mouse se move ou alguma tecla pressionada.

Error Mensagem enviada pelo servidor para indicar que a requisição inválida.

Os eventos podem ser observados através do programa xev. As demais mensagens, por serem de mais baixo níveis, mas podem ser capturadas utilizando o programa wireshark.

Janelas

Uma das requisições que um cliente pode fazer é criar uma nova janela. Cada janela, além de possuir um conjunto de propriedades, também pode possuir diversas subjanelas, o que forma uma árvore hierárquica. A janela é criada pelo próprio servidor X, e ocupa a tela inteira.

A aplicação cliente é livre para fazer o que quiser com a área no interior da janela. A borda decorativa e a barra de título são desenhadas por um cliente especial conhecido como Window manager. Os dados sobre as janelas podem ser obtidas através do comando xwininfo.

Pixmap

Outro recurso ao qual os clientes têm acesso são os pixmaps. Assim como as janelas, os pixmaps são áreas que o cliente pode utilizar para desenhar livremente, mas, diferente das janelas, os pixmaps não são exibidos automaticamente na tela do servidor. Com isso, os clientes podem implementar técnicas como double-buffering, por exemplo.

Recursos, Identificadores e Átomos

Para se referir a um determinado recurso armazenado no servidor (como janelas, pixmaps, etc), o cliente precisa usar o seu identificador. Cada identificador é um inteiro de 32 bits, escolhido pelo cliente durante a criação do recurso. Cada identificador é unico no servidor. De forma semelhante, cada string é referenciada por um átomo. O protocolo foi criado desta forma pois, além de ser complicado trabalhar com um pacote de tamanho variável, também há um ganho de performance em se transmitir apenas um inteiro, e não uma string completa, a cada requisição.

Propriedades

Cada cliente pode definir uma série de propriedades para as suas janelas. Estas propriedades são armazenadas no servidor, e, portanto, podem ser acessadas por outros clientes. Embora as propriedades sejam irrelevantes para o servidor X, elas são essenciais para a comunicação inter-cliente e para o window manager.

As propriedades de uma janela podem ser consultadas pelo programa xprop, e incluem dados como nome da janela, ícone, e o estado (minimizado,maximizado, etc).

Mapeamentos

No X Window System, cada tecla do teclado é identificada por um inteiro no intervalo de 8 a 255 conhecido como keycode. Além disso, podem existir até oito modificadores, que correspondem a teclas como Shift, Control, etc.

Sempre que uma tecla é pressionada, o servidor envia um evento para o cliente, indicando o número da tecla, e os modificadores. Cabe ao cliente interpretar o que aquela combinação significa (Enter, PageUp, etc). Porém, o servidor possui uma tabela padrão, que pode ser consultada pelos clientes, através do programa xmodmap. Os clientes são livres para seguir esta tabela oficial, ou utilizar uma diferente.

Grabs

O cliente também pode requisitar uma operação conhecida como grab. Se o grab for aceito, todos os eventos criados pelo mouse ou pelo teclado são enviados exclusivamente para um dos clientes. O grab pode ser feito sobre os eventos de uma janela, ou pode ser feito sobre o servidor inteiro.




Extensões

Embora o núcleo do protocolo X Window System seja bem simples, ele foi projetado para aceitar extensões que oferecem funcionalidade adicionais. Algumas extensões mais conhecidas são:

Composite Faz com que as janelas sejam desenhadas fora da tela, em uma região da memória, permitindo que as imagens sejam processadas antes de serem enviadas ao monitor. Com isso, os Composite managers podem adicionar recursos como sombras e transparências.

GLX Permite que os aplicativos utilizem OpenGL dentro de uma janela do X Window.

Xinerama Permite que o window manager utilize dois ou mais monitores para exibir uma área de trabalho expandida.

Shape Permite a criação de janelas em formatos arbitrários, não-retangulares, e também a criação de janelas não-convexas.




Autorização

Como o X Window é um protocolo que funciona sobre redes, é essencial restringir que aplicações podem se conectar a um servidor. Existem três formas de controlar a lista de acessos:

Host As máquinas com acesso ao servidor são enumeradas explicitamente, através do programa xhost

Cookie O servidor cria um cookie ao ser iniciado, e somente os clientes que informarem que string está armazenada no cookie podem se conectar. Geralmente este cookie é o arquivo .Xauthority.

Usuário Ao se conectar, o cliente precisa especificar por qual usuário ele está sendo controlado. Geralmente isto é implementado através do protocolo Kerberos.




Comunicação Inter-Cliente

Em algumas situações, um cliente precisa se comunicar com outro cliente para realizar uma determinada função. Por exemplo, quando se faz drag-and-drop de uma página da web para um editor de textos.

Embora o X Window permita que dois clientes se comuniquem, ele não detalha o protocolo de comunicação entre os clientes. Assim, foram desenvolvidos protocolos separados para especificar esta comunicação.

Como o protocolo original, '''Inter-Client Communication Convention Ma- nual''' (ICCM), se mostrou ser muito complexo e confuso, foi criado o fra- mework Inter-Client Exchange protocol (ICE) que, ao invés de especificar o protocolo diretamente, apenas fornece uma base para se criar o protocolo completo. Deste framework surgiu o protocolo DCOP, que é utilizado pelo KDE, atualmente.




Programação

Embora o X Window possua uma biblioteca oficial para programar aplicações gráficas, a Xlib, poucos a utilizam diretamente, pois ela é de muito baixo nível, e não possui sequer suporte a botões, caixas de texto, ou outros itens comuns em aplicações gráficas. Ao invés disso, geralmente são utilizados widget toolkits. Estes toolkits, construídos sobre a Xlib, fornecem todos os itens necessários para programação de alto nível. Entre os toolkits mais populares, estão:

GTK+ Toolkit criado originalmente para implementar o programa de edição de imagens Gimp. Utilizado no desktop GNOME.

Qt Toolkit criado pela empresa Trolltech e posteriormente transformado em software livre. Utilizado no desktop KDE.




Conclusão

Apesar de a arquitetura do X já ter sido projetada há mais de dez anos e o protocolo já começar a apresentar os sinais de sua idade em alguns aspectos,o X Window System é um dos projetos mais bem sucedidos da história do Software Livre, tanto pela sua portabilidade, quanto pelas suas funcionalidades. Embora não seja parte integrante do kernel , ele é uma peça essencial do sistema sistema operacional GNU/Linux.




Referências

    * Wikipedia. X Window System.
          o Disponível em: http://en.wikipedia.org/wiki/X Window.
          o Data de acesso: 7 de Setembro de 2007.
    * Daniel Manrique. X Window System Architecture Overview.
          o Disponível em: http://tldp.org/HOWTO/XWindow-Overview-HOWTO/.
          o Data de acesso: 7 de Setembro de 2007.




Autor: Alinson Santos Xavier

O Artigo é distribuido sob a licença Creative Commons Attribution, Share Alike.

AquaMan

Valeu pelo tópico, gabriel0085!

Depois de lê-lo, acabei por tirar muitas dúvidas que eu tinha sobre o mundo Linux, mas não tinha procurado ainda pelas respostas. Agora entendo o que se comunica com o que e algumas outras definições.

Eu que já trabalhei com a criação de software básico no meu início, quando era estagiário (e bota tempo nisso...), sempre gostei de saber como são desenvolvidos estes aspectos de mais baixo nível. Já aprontei algumas coisas interessantes nesta época, mas hoje são apenas curiosidades pra mim. Muito bom saber disso aí.

Aquele abraço!

(AMD Athlon 64 3.5Ghz/1Gb RAM/80Gb+250Gb/Geforce FX 6200 128Mb/Palm T5)