2010-10-27 9 views
6

Ich möchte mehr darüber wissen, was die GUI auf * NIX-Systemen funktioniert, aber nicht ganz sicher, wo die Forschung beginnen soll. Aus meiner Sicht ist der X-Server das, was alle Visuals möglich macht, und darüber hinaus gibt es die verschiedenen UI-Umgebungen wie KDE, Gnome und andere.Wie funktioniert die * NIX GUI?

Aber ich habe immer gedacht, dass das Laufen unter bestimmten UI-Umgebungen beschränkt auf Programme, die diese Umgebung verwenden, bis ich erkannte, dass ich KDE-Dienstprogramme und Software unter Gnome und umgekehrt verwenden kann, die die beibehalten Aussehen ihrer natürlichen Umgebung.

Was wäre ein guter Ort, um über dieses Thema zu lernen?

Antwort

6

Im Wesentlichen sind die GUI-Bits einzelne Bibliotheken, die das Chrom (Zeug um Ihr Programmfenster) enthalten und normalerweise eine Menge anderer Dinge wie Desktop-Symbolleisten usw. enthalten. GNOME und KDE sind Beispiele für Desktop-Umgebungen.

Sie enthalten jeweils einen Fenstermanager, der den Programmen genau mitteilt, wo sie zeichnen und wie sie das Chrom zeichnen sollen.

Unter ihnen haben Sie das X-Framework, das die API bereitstellt, die die Fenstermanager verwenden, um auf Ihrem Bildschirm zu malen. Also hängt X von Ihren Grafiktreibern ab, die Ihnen sagen, wie Sie mit Ihrer Hardware interagieren.

Über Ihren Fenstermanagern haben Sie Ihre tatsächlichen Programme. Jeder von ihnen ruft den Fenstermanager auf, um allgemeine Dinge wie "Gib mir ein 50x50-Fenster mit einer Schließen-Schaltfläche" zu tun.

Die tatsächlichen Widgets, die von einem Programm gezeichnet werden, verwenden im Allgemeinen ein Grafik-Toolkit wie das in GNOME enthaltene. KDE enthält das Qt-Toolkit.

Es gibt eine gute Auswahl an wm ist hier http://xwinman.org/

+0

Ein bisschen Ungenauigkeit auf der X-Ebene, aber ansonsten korrekt. –

+1

Bitte reparieren Sie es dann. Sie haben den Vertreter, es zu tun :) –

7

Ich fühle Paul Antwort vielleicht ein bisschen Jargon-schwer sein, hier ist also mein Versuch.

Es gibt Lasten von Anzeigegeräten (VGA-Monitore, Composite-Video, HDMI, etc.) und diese werden in der Regel direkt in Hardware behandelt, z. in einem dedizierten Grafikprozessor (GPU).

vielmehr unsere Anwendungen sprechen direkt auf diese Hardware als mit, verwenden wir Treiber (die in unserem Betriebssystemkern leben). Verschiedene Hardware benötigt verschiedene Treiber, aber alle Fahrer können Anweisungen, um die gleiche Schnittstelle gegeben zum Beispiel OpenGL:

App --OpenGL--> Driver --> Hardware --VGA--> Screen 

Natürlich, wie die meisten Standards es gibt tatsächlich eine ganze Reihe von verschiedenen Motiven! OpenGL wird von den meisten Treibern der meisten Betriebssysteme unterstützt. seine "OpenGL ES" Sub-Set funktioniert gut auf Mobiltelefonen und es gibt "Software-Treiber", die Bilder basierend auf OpenGL-Anweisungen erstellen können (und alle Treiber können Bilder zeichnen, obwohl dies viel langsamer ist, als echte OpenGL-Unterstützung). Ein großer Konkurrent zu OpenGL ist DirectX, aber das funktioniert nur unter Windows und XBox.

zu OpenGL Rendering ist in Ordnung für so etwas wie ein Vollbild-3D-Spiel, aber die * NICHTS Grafiksystem (bekannt als „X“) bietet zwei wichtige Funktionen obendrein: mehrere Anwendungen auf dem gleichen Bildschirm zeichnen und Zeichnen über ein Netzwerk.Um dies zu tun, ein Server Prozess zieht auf den Bildschirm und Anwendungen („Kunden“) auf diesen Server mit dem „X11-Protokoll“ („11“ ist nur die Versionsnummer) sprechen:

App A ----------OpenGL-------+ 
          | 
App B --+     | 
     |     | 
     +--X11--> X server --+----> Driver --> Hardware --> Screen 
     | 
App C --+ 
     | 
    ...network ... 
     | 
App D --+ 

X neigt dazu, direkten Zugriff auf die Treiber zu haben, da es länger als OpenGL ist, aber das ist nicht so wichtig.

Das X11-Protokoll funktioniert, indem Anwendungen erstellen Windows, die sie zeichnen dürfen. X kann diese Fenster auf dem Bildschirm anordnen, einschließlich der überlappenden sie. Anwendungen, die OpenGL verwenden, können ihre Befehle direkt an den Treiber "weitergeben", und X wird das Fenster immer noch wie jedes andere (das funktioniert nicht funktioniert über ein Netzwerk, da es die Netzwerkfähigkeiten von X11 umgeht).

Wir haben in der Regel eine Anwendung zum Anordnen, Verbergen/Anzeigen und Schließen von Fenstern für uns, genannt Fenstermanager. Optional kann ein Fenstermanager einige dünne Fenster um die Ränder der anderen herum erstellen, so dass Titelleisten, Größenanpassungen usw. gezeichnet werden können.

Das X11-Protokoll enthält Befehle zum Zeichnen von Formen, zum Rendern von Zeichensätzen usw. sind Anwendungen, die diese direkt, zum Beispiel das xterm Programm und die twm window-Manager verwenden:

xterm --+ 
     | 
     +--X11--> X --> Driver --> ... 
     | 
twm --+ 

Allerdings sind die meisten modernen Anwendungen finden roh X11 zu langweilig; Anstatt Linien und Formen zu zeichnen, ziehen wir lieber ganze Widgets (Knöpfe, Menüs, Icons, etc.). Um dies zu tun, wurden Toolkits erstellt. Die zwei berühmtesten heißen Qt und GTK + (das GIMP Tool Kit, da es ursprünglich für das GIMP erstellt wurde); andere gehören Motif, Lestif, ETK, Tk und FLTK. Wir können das Toolkit bitten, eine Schaltfläche zu zeichnen, und es werden alle notwendigen X11-Befehle gesendet, um eine Schaltfläche zu zeichnen, plus es wird auf die Größe und Position achten, Aktualisieren der Zeichnung, wenn etwas überlagert es dann bewegt sich weg, erzählt unsere Code, wenn die Schaltfläche geklickt wurde, und einige Toolkits können sogar ändern, wie die Widgets mit Themen aussehen. Einige Toolkits sind auch Cross-Plattform, so werden sie senden X11-Befehle auf Linux, verschiedene Befehle auf Windows, OSX usw.

Rhythmbox --> GTK+ --+ 
        | 
GIMP  --> GTK+ --+ 
        | 
Amarok --> Qt --+--X11--> X --> Driver --> ... 
        | 
Skype  --> Qt --+ 
        | 
aMSN  --> Tk --+ 

Einige Toolkits bieten Funktionen auf anderer; zum Beispiel wxWidgets Qt bekommt seine Zeichnung zu tun (auf Linux; Windows- und OSX ist „native“), wird XUL von Firefox verwendet und verwendet GTK + seine Zeichnung zu tun:

Audacity --> wxWidgets --> Qt --+ 
            | 
Firefox --> XUL  --> GTK+ --+--X11--> X --> Driver --> ... 
            | 
GIMP  ----------------> GTK+ --+ 

Ein wichtiger Punkt zu erwähnen ist, dass die Form- und Textzeichenkommentare von X11 werden eigentlich nicht sehr oft verwendet, da sie sehr primitiv sind. Viele Toolkits rendern ihre Widgets als Bilder und erhalten dann X, um diese Bilder zu zeichnen. Das neue Wayland System versucht, X zu ersetzen, indem es die Zeichnungsbefehle wegwirft und Anwendungen und Toolkits OpenGL direkt verwenden lässt, was die Dinge viel schneller machen sollte.

Sie haben verschiedene Desktop-Umgebungen wie GNOME und KDE erwähnt, und ob sie zusammen funktionieren. Dies sind im Grunde große Sammlungen von Anwendungen geschrieben, um gut zusammen zu arbeiten.Es ist einfach so, dass GNOME-Anwendungen alle mit GTK + geschrieben sind, während KDE-Anwendungen alle mit Qt geschrieben sind.

Wenn Sie sich die Pfeile in meinen obigen Diagrammen ansehen, werden Sie feststellen, dass jede Qt-Anwendung separat mit X kommuniziert, jede GTK + -Anwendung mit X separat kommuniziert usw .; eine Qt- und eine GTK + -Anwendung können nicht nur Seite an Seite arbeiten, bei X ist das gleichbedeutend mit zwei Qt-Anwendungen oder zwei GTK + -Anwendungen!

Beim Mischen von Desktops müssen Sie sich nur Gedanken darüber machen, ob zwei Anwendungen um die gleiche Aufgabe konkurrieren, beispielsweise wenn Sie versuchen, zwei Window-Manager oder zwei Desktop-Panels auszuführen. Beachten Sie, dass dies ein nicht ein Problem von Grafiken, Toolkits, etc. ist, da ich die gleichen Probleme bekommen würde, wenn ich zwei Desktops auf dem gleichen Toolkit (zB. Lxpanel und Gnome-Panel beide mit GTK + geschrieben aber sie komme immer noch ineinander!)