Mover do windows para o linux: Entendendo - Sistema X Window, X Server, Xorg, Xfree86

8

Sou um desenvolvedor de janelas (Win32api) que se move do Windows para o Linux. Durante a instalação do linux existem muitas coisas a saber sobre o X11, o X Window System, o X Server, o Xorg, o Xfree86 e quais não.

Por que não percebemos essas coisas no Windows? Artigo Wiki sobre isso me assusta. Alguém pode explicar essas coisas? Como eles trabalham? Por que é tão complicado em linux & não no windows?

Quaisquer boas referências também são apreciadas.

PS: Eu adoro conhecer os internos, não hesite em entrar em profundidade.

    
por claws 25.05.2010 / 12:42

2 respostas

13

O Windows oferece a você uma única implementação de um único desktop sobre uma única implementação de uma única API / framework, tudo feito pela Microsoft.

Em sistemas Unix, você obtém uma API / framework (X11 / X Window System) para a qual existem múltiplas implementações (Xorg, Xfree86), sobre as quais você obtém vários frameworks / APIs de "nível superior" (GTK +, Qt, ...) porque o X11 bruto é tão primitivo, em cima do qual você obtém vários desktops (Gnome, KDE, ...), todos feitos por pessoas diferentes.

Além disso, o sistema X11 foi projetado desde o início com GUIs remotas em mente - ou seja, uma máquina lokal exibindo a interface gráfica de um aplicativo em execução remota - que introduz os conceitos de "X Server" e "X Client" .

Em seguida, há uma nomenclatura que "parece" a maneira errada para os recém-chegados: Sua máquina local está executando o "X Server" fornecendo o serviço "exibir uma GUI", enquanto a máquina remota é o "X Client" fazendo uso dos serviços em sua máquina para exibir a GUI.

Bem, essa é a visão geral rápida; uma vez que você tenha resolvido isso, entender quaisquer artigos / posts do fórum sobre o assunto deve se tornar muito mais fácil.

Edit: Para responder aos dois primeiros comentários do OP.

Sim, "X11" é meramente um protocolo, e Xorg / XFree86 são duas implementações. Em seu nível básico, o X11 é apenas sobre desenhar linhas e pontos, o que não é muito útil se você quiser fazer uma GUI.

No topo do protocolo X11, as pessoas implementaram muitas coisas, e é muito difícil fazer uma comparação 1: 1 com o Windows, porque a Microsoft nunca se preocupou em manter as coisas separadas. Também não sou um desenvolvedor do tipo GUI, ou seja, minha experiência real com o sistema qualquer é mínima.

Na parte inferior, um "gerenciador de janelas" fornece uma janela (manipulando bordas, botões fechar / minimizar / maximizar, redimensionando etc.) e oferece o "espaço real" dentro da janela para o conjunto de ferramentas do widget. Existem muitos gerenciadores de janelas, alguns imitando outros sistemas (Windows, MacOS, AmigaOS, etc.), e eles são na maior parte intercambiáveis e transparentes para o sistema restante.

O "conjunto de ferramentas do widget" oferece botões, controles deslizantes, campos de texto etc. nos quais você pode construir sua GUI. Isso é o que você (como desenvolvedor de aplicativos) realmente consegue "ver", API e o que decide a maior parte da "aparência" do seu aplicativo.

Uma "área de trabalho" cria vários aplicativos sobre uma certa combinação de conjunto de ferramentas / gerenciador de janelas, a fim de fornecer uma aparência consistente & sentir. Você não precisa se preocupar com isso, a menos que realmente queira desenvolver a própria área de trabalho.

O desktop "Gnome" usa o conjunto de ferramentas do widget "GTK +" no topo do gerenciador de janelas "Metacity".

A área de trabalho "KDE" usa o conjunto de ferramentas do widget "Qt" no topo do gerenciador de janelas "KWin".

Note que especialmente esses dois, GTK + e Qt, evoluíram muito além de simples "conjuntos de ferramentas de widgets" em "estruturas de desenvolvimento de aplicativos". Se você deseja desenvolver aplicativos GUI para o Linux, efetivamente você tem que escolher qual desses dois você deseja usar. Há mais opções, se você quiser um aplicativo mais "leve" (não precisando das grandes dependências da biblioteca), mas hoje a maioria dos sistemas já tem bibliotecas GTK + e Qt instaladas.

É perfeitamente possível usar aplicativos Qt em uma área de trabalho Gnome ou aplicativos GTK + em uma área de trabalho KDE (nem sempre foi assim), então você não precisa se preocupar com compatibilidade. Dada a escolha entre dois aplicativos de funcionalidade comparável, as pessoas geralmente preferem o aplicativo usando os widgets "nativos" de sua área de trabalho, mas não me preocupo com isso.

Outros pontos importantes na escolha do "conjunto de ferramentas de widgets": termos de licenciamento, suporte para o idioma de sua escolha e compatibilidade entre plataformas.

Post Scriptum : voltando vários anos depois, eu peguei uma experiência de programação gráfica própria e percebi que uma coisa está faltando na explicação acima se você está procurando por um " qual caminho seguir "conselhos: wxWidgets . Esse é um framework que cria no topo do que você está usando nativamente, e permite o desenvolvimento de transparentemente portátil , sem sacrificar o desempenho ou ter quaisquer cadeias de licença associadas. API C ++. É o caminho que escolhi para minhas necessidades de GUI, e senti que deveria ser mencionado para ser completo.

    
por 25.05.2010 / 13:10
3

Eu não entendo porque você acha tão difícil entender a explicação fornecida por link mas de qualquer forma:

O X Window System normalmente consiste em 2 partes:

  • Um servidor (chamado XServer)
  • Clientes (chamados .. XClients:))

O servidor se conecta ao hardware (cartão gráfico, dispositivos de entrada) e permite que os clientes usem esses recursos. Os clientes se conectam ao xserver e usam os recursos fornecidos.

Existem servidores para Unix (o Xorg, o pessoal do Mac tem seus próprios etc) e para o Windows (Hummingbird, a porta do Xorg do Cygwin, etc).

Você pode conectar clientes em um sistema operacional a servidores em execução em outro sistema operacional.

A comunicação entre o servidor e os clientes é feita através da API Xlib ou (mais moderna) do xcb-API .

Para criar um aplicativo simples, você normalmente faz isso:

  • conecte-se ao xserver
  • solicita ao xserver para criar uma janela (que lhe dará um "identificador")
  • diga ao xserver para abrir a janela
  • eventos de processo (mouse, teclado, exposição, movimento etc)
  • desenhar coisas na janela (texto, graficos etc)
  • encerre o aplicativo dizendo ao xserver para liberar todos os recursos

e .. feito.

    
por 25.05.2010 / 13:16