Mudando do Windows para o Linux: Entendendo - Sistema X Window, X Server, Xorg, Xfree86


10

Sou desenvolvedor do Windows (Win32api), movendo-se do Windows para o Linux. Ao instalar o linux, há muitas coisas a saber sobre o X11, o X Window System, o X Server, o Xorg, o Xfree86 e outras coisas.

Como é que não estamos cientes dessas coisas no Windows? Artigo da Wiki sobre isso me assusta. Alguém pode explicar essas coisas? Como eles trabalham? Por que é tão complicado no linux e não no windows?

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

PS: Adoro conhecer os internos, não hesite em aprofundar.


1
Depois de ler as respostas, leia este artigo "Pensamentos e divagações sobre o protocolo X" julien.danjou.info/blog/…
garras

Respostas:


13

O Windows oferece uma única implementação de uma única área de trabalho, além de uma única implementação de uma única API / estrutura, tudo feito pela Microsoft.

Nos sistemas Unix, você obtém uma API / estrutura (X11 / X Window System) para a qual existem várias implementações (Xorg, Xfree86), além das quais você obtém várias API / estruturas de "nível superior" (GTK +, Qt, ... ) porque o X11 bruto é muito primitivo, além de 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 - isto é, uma máquina lokal que exibe a GUI de um aplicativo em execução remota - que introduz os conceitos de "X Server" e "X Client".

Depois, há uma nomenclatura que "parece" o caminho errado 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 na sua máquina para exibir a GUI.

Bem, essa é a visão geral rápida; Depois que você resolver isso, entender todos os artigos / postagens do fórum sobre o assunto deve ficar muito mais fácil.

Editar: para responder aos dois primeiros comentários do OP.

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

Além 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 qualquer um dos sistemas é mínima.

Na parte inferior, um "gerenciador de janelas" fornece uma janela (manipulando bordas, botões de fechar / minimizar / maximizar, redimensionar etc.) e oferece o "imóvel" dentro da janela para o conjunto de ferramentas do widget. Existem muitos gerenciadores de janelas, alguns simulando outros sistemas (Windows, MacOS, AmigaOS, o que for), e eles são na sua maioria intercambiáveis ​​e transparentes com o sistema restante.

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

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

A área de trabalho "Gnome" usa o conjunto de ferramentas do widget "GTK +" na parte superior do gerenciador de janelas "Metacity".

A área de trabalho "KDE" usa o conjunto de ferramentas do widget "Qt" na parte superior do gerenciador de janelas "KWin".

Observe que especialmente os dois, GTK + e Qt, evoluíram muito além dos simples "conjuntos de ferramentas de widget" em "estruturas de desenvolvimento de aplicativos". Se você deseja desenvolver aplicativos da GUI para Linux, efetivamente precisa escolher qual desses dois deseja usar. Existem mais opções, se você quiser um aplicativo mais "leve" (sem precisar das grandes dependências da biblioteca), mas hoje a maioria dos sistemas possui bibliotecas GTK + e Qt já instaladas de qualquer maneira.

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

Outros pontos de referência mais importantes na escolha do "conjunto de ferramentas do widget": termos de licenciamento, suporte para o seu idioma preferido, compatibilidade entre plataformas.


Post Scriptum : Voltando vários anos depois, adquiri minha própria experiência de programação em GUI e percebo que uma coisa está faltando na explicação acima, se você está procurando um conselho "para onde ir": wxWidgets . Essa é uma estrutura que se baseia em tudo o que você está usando de forma nativa e permite o desenvolvimento transparente de uma GUI portátil , sem sacrificar o desempenho ou sem anexar nenhuma sequência de licença. API C ++. É o caminho que escolhi para as minhas necessidades de GUI e achei que deveria ser mencionado por completo.


+1 e observe que, se você conseguir escolher uma estrutura (por exemplo, Qt), não precisará se preocupar tanto com todas as coisas do X (embora algumas).
Peter Jaric 25/05

+1 e parte da GUI da API do Windows é equivalente a Qt e GTK +. Então, o que é equivalente ao X Window System no Windows? por que e como existem o KDE e o Gnome?
garras

@ DevSolar: você está no caminho certo. por favor, seja um pouco mais descritivo. X11 é apenas especificações como POSIX? e xorg e xfree86 são suas duas implementações? Se houver GTK + & Qt, qual era a necessidade do Gnome e do KDE? Por favor, compare cada etapa / nível com o Windows. Isso é fácil de entender para mim.
garras

At the bottom, a "window manager"O gerenciador de janelas é desenvolvido no X Window System? se assim for, o sistema windows estaria no canto inferior direito? Você está me fazendo confundir com o gerenciador de janelas e o sistema de janelas.
garras

"X11" / "X Window (System)", implementado por "Xorg" / "XFree86", estão na parte inferior e oferecem pontos e linhas. Um "gerenciador de janelas" ("Metacity" / "Kwin") oferece janelas (estrutura, arrastar, redimensionar, fechar etc.).
DevSolar

3

Não entendo por que você acha tão difícil entender a explicação fornecida por http://en.wikipedia.org/wiki/X_Window_System, mas de qualquer maneira:

O sistema X Window normalmente consiste em 2 partes:

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

O servidor se conecta ao hardware (placa gráfica, 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 (Xorg, o pessoal do Mac tem seus próprios etc) e para Windows (Hummingbird, porto de Cyorg do Cygwin etc).

Você pode conectar clientes em um sistema operacional a servidores executando em outro sistema operacional.

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

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

  • conectar ao xserver
  • solicite ao xserver para criar uma janela (que fornecerá um "identificador")
  • diga ao xserver para abrir a janela
  • eventos de processo (mouse, teclado, exposição, movimento etc.)
  • desenhar coisas para a janela (texto, gráficos etc.)
  • saia do aplicativo dizendo ao xserver para liberar todos os recursos

E feito.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.