Wechsel von Windows zu Linux: Grundlegendes - X Window System, X Server, Xorg, Xfree86

10

Ich bin ein Windows-Entwickler (Win32api), der von Windows zu Linux wechselt. Während der Installation von Linux gibt es viel zu wissen über X11, X Window System, X Server, Xorg, Xfree86 und was nicht.

Wie kommt es, dass wir uns solcher Dinge in Windows nicht bewusst sind? Wiki-Artikel über diese macht mir Angst. Kann jemand diese Dinge erklären? Wie sie arbeiten? Warum ist es unter Linux so kompliziert und nicht unter Windows?

Gute Referenzen sind ebenfalls willkommen.

PS: Ich liebe es, Interna zu kennen, zögern Sie nicht, in die Tiefe zu gehen.

Krallen
quelle
1
Nachdem Sie die Antworten gelesen haben, lesen Sie diesen Artikel "Gedanken und Streifzüge über das X-Protokoll". Julien.danjou.info/blog/…
Klauen
1
Links wie geändert julien.danjou.info/blog/2010/…
fstamour

Antworten:

13

Windows bietet Ihnen eine einzelne Implementierung eines einzelnen Desktops zusätzlich zu einer einzelnen Implementierung einer einzelnen API / eines einzelnen Frameworks, die alle von Microsoft durchgeführt werden.

Auf Unix-Systemen erhalten Sie eine API / ein Framework (X11 / X Window System), für die mehrere Implementierungen existieren (Xorg, Xfree86), auf denen Sie verschiedene API / Frameworks auf "höherer Ebene" (GTK +, Qt, ...) erhalten. ) weil raw X11 so primitiv ist, auf dem Sie verschiedene Desktops (Gnome, KDE, ...) erhalten, die alle von verschiedenen Personen erstellt wurden.

Darüber hinaus wurde das X11-System von Grund auf unter Berücksichtigung von Remote-GUIs entwickelt - dh einer lokalen Maschine, die die GUI einer remote ausgeführten Anwendung anzeigt -, die die Konzepte eines "X-Servers" und eines "X-Clients" einführt.

Dann gibt es eine Nomenklatur, die sich für Neulinge falsch anfühlt: Auf Ihrem lokalen Computer wird der "X Server" ausgeführt, der den Dienst "GUI anzeigen" bereitstellt, während der Remotecomputer der "X Client" ist, der die Dienste nutzt auf Ihrem Computer, um die GUI anzuzeigen.

Nun, das ist der schnelle Überblick. Sobald Sie das geklärt haben, sollte es viel einfacher werden, Artikel / Forenbeiträge zu diesem Thema zu verstehen.

Bearbeiten: Um die beiden ersten Kommentare des OP zu beantworten.

Ja, "X11" ist lediglich ein Protokoll, und Xorg / XFree86 sind zwei Implementierungen. Im Grunde geht es bei X11 nur um das Zeichnen von Linien und Punkten, was nicht besonders nützlich ist, wenn Sie eine grafische Benutzeroberfläche erstellen möchten.

Zusätzlich zum X11-Protokoll haben die Leute viele Dinge implementiert, und es ist ziemlich schwierig, einen 1: 1-Vergleich mit Windows durchzuführen, da Microsoft sich nie die Mühe gemacht hat, die Dinge wirklich getrennt zu halten. Außerdem bin ich kein Entwickler vom Typ GUI, dh meine tatsächliche Erfahrung mit beiden Systemen ist minimal.

Unten bietet ein "Fenstermanager" ein Fenster (Behandeln von Rahmen, Schließen / Minimieren / Maximieren von Schaltflächen, Ändern der Größe usw.) und bietet dem Widget-Toolset die "Immobilien" innerhalb des Fensters an. Es gibt viele Fenstermanager, von denen einige andere Systeme nachahmen (Windows, MacOS, AmigaOS usw.), und sie sind größtenteils für das verbleibende System transparent austauschbar.

Das "Widget-Toolset" bietet Ihnen Schaltflächen, Schieberegler, Textfelder usw., auf denen Sie Ihre GUI erstellen können. Dies ist es, was Sie (als Anwendungsentwickler) tatsächlich sehen, was die API betrifft, und was den größten Teil des "Look & Feel" Ihrer Anwendung bestimmt.

Ein "Desktop" erstellt eine Reihe von Anwendungen auf einer bestimmten Kombination aus Widget-Toolset und Fenstermanager, um ein einheitliches Erscheinungsbild zu erzielen. Sie müssen sich nicht damit beschäftigen, es sei denn, Sie möchten den Desktop selbst entwickeln.

Der Desktop "Gnome" verwendet das Widget-Toolset "GTK +" über dem Fenstermanager "Metacity".

Der Desktop "KDE" verwendet das Widget-Toolset "Qt" über dem Fenstermanager "KWin".

Beachten Sie, dass sich insbesondere diese beiden, GTK + und Qt, weit über einfache "Widget-Toolsets" hinaus zu "Anwendungsentwicklungs-Frameworks" entwickelt haben. Wenn Sie GUI-Apps für Linux entwickeln möchten, müssen Sie effektiv auswählen, welche der beiden Sie verwenden möchten. Es gibt mehr Auswahlmöglichkeiten, wenn Sie eine "leichtere" App möchten (ohne die großen Bibliotheksabhängigkeiten zu benötigen), aber auf den meisten Systemen sind GTK + - und Qt-Bibliotheken ohnehin bereits installiert.

Es ist durchaus möglich, Qt-Apps auf einem Gnome-Desktop oder GTK + -Apps auf einem KDE-Desktop zu verwenden (das war nicht immer so), sodass Sie sich keine Gedanken über die Kompatibilität machen müssen. Bei der Wahl zwischen zwei Apps mit vergleichbarer Funktionalität bevorzugen die Benutzer normalerweise die App mit den "nativen" Widgets des Desktops ihrer Wahl, aber darüber würde ich mir keine Sorgen machen.

Weitere wichtige Punkte bei der Auswahl des "Widget-Toolset": Lizenzbedingungen, Unterstützung für die Sprache Ihrer Wahl, plattformübergreifende Kompatibilität.


Post Scriptum : Als ich einige Jahre später zurückkam, habe ich selbst einige Erfahrungen mit der GUI-Programmierung gesammelt und festgestellt, dass in der obigen Erklärung eines fehlt, wenn Sie nach einem Rat suchen, wie Sie vorgehen sollen: wxWidgets . Dies ist ein Framework, das auf dem aufbaut, was Sie nativ verwenden, und eine transparent tragbare GUI-Entwicklung ermöglicht, ohne die Leistung zu beeinträchtigen oder Lizenzzeichenfolgen zuzuordnen. C ++ API. Es ist der Weg, den ich für meine GUI-Anforderungen gewählt habe, und ich war der Meinung, dass er der Vollständigkeit halber erwähnt werden sollte .

DevSolar
quelle
+1 und beachten Sie, dass Sie sich, wenn Sie ein Framework auswählen (zum Beispiel Qt), nicht so sehr um all das X-Zeug kümmern müssen (einige jedoch).
Peter Jaric
+1 & So GUI-Teil der Windows-API entspricht Qt & GTK +. Was entspricht dann dem X Window System in Windows? Warum und wie gibt es KDE & Gnome?
Krallen
@ DevSolar: Sie sind auf dem richtigen Weg. Bitte seien Sie etwas aussagekräftiger. X11 ist nur Spezifikationen wie POSIX? und xorg & xfree86 sind die beiden Implementierungen? Wenn es GTK + & Qt gibt, was brauchte Gnome & KDE? Bitte vergleichen Sie jeden Schritt / jede Ebene mit Windows. Das ist für mich leicht zu verstehen.
Krallen
At the bottom, a "window manager"Fenstermanager baut auf X Window System auf? Wenn ja, wäre Windows-System unten rechts? Sie verwechseln mich mit Fenstermanager und Fenstersystem.
Krallen
"X11" / "X Window (System)", implementiert von "Xorg" / "XFree86", befinden sich ganz unten und bieten Punkte und Linien. Ein "Fenstermanager" ("Metacity" / "Kwin") bietet Fenster (Rahmen, Ziehen, Ändern der Größe, Schließen usw.).
DevSolar
3

Ich verstehe nicht, warum es Ihnen so schwer fällt, die Erklärung von http://en.wikipedia.org/wiki/X_Window_System zu verstehen, aber trotzdem:

Das X Window System besteht normalerweise aus 2 Teilen:

  • Ein Server (genannt XServer)
  • Clients (genannt .. XClients :))

Der Server stellt eine Verbindung zur Hardware (Grafikkarte, Eingabegeräte) her und ermöglicht den Clients, diese Ressourcen zu verwenden. Die Clients stellen eine Verbindung zum xserver her und verwenden die bereitgestellten Ressourcen.

Es gibt Server für Unix (Xorg, die Mac-Leute haben ihre eigenen usw.) und für Windows (Hummingbird, Cygwins Port von Xorg usw.).

Sie können Clients auf einem Betriebssystem mit Servern verbinden, die auf einem anderen Betriebssystem ausgeführt werden.

Die Kommunikation zwischen dem Server und den Clients erfolgt entweder über die Xlib-API oder (moderner) über die xcb-API .

Um eine einfache Anwendung zu erstellen, gehen Sie normalerweise wie folgt vor:

  • Stellen Sie eine Verbindung zum xserver her
  • Fordern Sie den xserver auf, ein Fenster zu erstellen (das Ihnen ein "Handle" gibt).
  • Weisen Sie den xserver an, das Fenster aufzurufen
  • Prozessereignisse (Maus, Tastatur, Belichtung, Bewegung usw.)
  • Zeichne Sachen ins Fenster (Text, Grafik usw.)
  • Beenden Sie die App, indem Sie den xserver anweisen, alle Ressourcen freizugeben

und fertig.

Akira
quelle