Benutzer:Benji/X

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Das X Window System

Hier werden die Bemühungen um die Aufarbeitung des X Window Systems gesammelt. Ziel ist es, umfassende Informationen über das X Window System zu liefern. Vorbild ist, wie so oft, nicht zuletzt auch die englische Wikipedia, die bereits sehr ausführliche Artikel besitzt.

Wie so oft hat die englische Wikipedia eine hervorrangende Artikelstruktur, die ich hier mal hierarchisch zusammenstelle und als Grundlage für die deutschen Artikel nutzen werde:


Hatte ich zwar als Teil des Artikels Xlib geplant (nur kurz angesprochen, im Umfang wie unter The X Protocol), hab aber dann in der englischen Wikipedia diesen fantastischen langen bebilderten Artikel gefunden – das will ich hier auch!

Die englische Wikipedia macht mich mal wieder sprachlos. Natürlich haben sie eine tolle Navigationsleiste, en:Template:XWinSys, aber sie haben auch fantastische Metaartikel wie en:X Window System protocols and architecture.

Xlib ist eine in der Programmiersprache C geschrieben Client-Library für das X-Window-System-Protokoll. Es enthält Funktionen um interaktiv mit einem X-Server zu kommunizieren. Diese Funktionen erlauben Programmierern Programme zu schreiben, ohne dabei den tatsächlichen Ablauf des Protokolls zu kennen. Nur wenige Programme benutzen direkt die Xlib, stattdessen gibt es grafische Toolkits, die Xlib als Backend zur Benutzung des X Window Systems nutzen, unter anderem:

Xlib und andere Bibliotheken im Querschnitt

Xlib lässt sich bis in das Jahr 1985 zurückverfolgen und wird heute in den meisten grafischen Benutzeroberflächen auf Unix-Derivaten verwendet. Die XCB ist der Versuch, die Xlib zu ersetzen.


Das X-Protokoll

[Bearbeiten | Quelltext bearbeiten]
X-Protokoll im TCP/IP-Protokollstapel:
Anwendung X-Protokoll
Transport TCP
Internet IP (IPv4, IPv6)
Netzzugang Ethernet Token
Bus
Token
Ring
FDDI

Das X-Protokoll ist ein klassisches Netzwerkprotokoll, welches selbst dann genutzt wird, wenn Server und Client auf dem gleichen Computer laufen. Es handelt sich um ein verbindungsorientiertes Protokoll, welches über TCP/IP oder Unix Domain Sockets kommuniziert. Es definiert die Art und Weise der Kommunikation zwischen Server und Client. Dabei unterscheidet es zwischen vier verschiedenen Arten von Packeten: Anfragen (request), Antworten (reply), Ereignissen (event) und Fehlern (error).

Eine Anfrage wird von der Xlib auf Basis des Aufrufs einer High-Level-Funktion durch den Programmierer erzeugt und zu dem Server geschickt. Eine Anfrage kann viele (Zusatz-)informationen enthalten, beispielsweise die Anweisung, eine Linie zu zeichnen, die Farbe eines Elements einer Colormap zu ändern oder die momentane Größes eines Fensters zurückzugeben. Die meisten Xlib-Funktionen erzeugen intern Anfragen.

Eine Antwort wird auf eine Anfrage von dem Server zum Client geschickt und entsprechend zunächst von der Xlib entgegengenommen. Nicht alle Anfragen erwarten Antworten – Zeichenanfragen werden beispielsweise nicht beantwortet. Xlib-Funktionen, die eine Anfrage senden und eine Antwort benötigen, werden round-trip request genannt. Diese round-trip requests sind besonders bei schlechten Round-Trip-Times sehr perfomancekritisch.

Ein Ereignis wird vom Server zum Client geschickt um ihn über Dinge zu informieren, die nicht exiplit angefragt wurden – z.B. Mausbewegungen des Benutzers. Sie werden in viel größerem Umfang als Antworten geschickt.

Der Datentyp, mit dem man bei der Xlib-Programmierung im Wesentlichen umgehen muss, ist die Display-Struktur.

Diese Displays müssen nicht zwangsläufig echten Bildschirmen entsprechen. Prinzipiell ist ein Display definiert als ein Ausgabegerät, auf welchem die Grafiken gezeichnet werden. Die Display-Struktur enthält nicht nur Informationen über das Ausgabemedium, sondern auch über die Verbindung zwischen Client und Server. Bei unixoiden Betriebssystemen enthält die Display-Struktur beispielsweise das Dateihandle des Sockets zur Verbindung zum zugehörigen X-Server. Die meisten Xlib-Funktionen erwarten im Argument eine Display-Struktur weil sie durch dieses Socket Funktionen auf dem Server durchführen. X-Windows, Colormaps und ähnliches werden alle auf dem Server gespeichert. Der Client arbeitet nur mit identifiers dieser Objekte. Er kann daher nicht direkt mit den Objekten arbeiten, sondern nur den Server anweisen, mit den Objekten eine entsprechende Operation durchzuführen.

Die Dateitypen Window, Pixmap, Font, Colormap, etc. sind alle nur Identifiers. Diese Identifiers sind 32 Bit breite Integers. Ein Client erstellt daher ein Fenster, in dem er den Server anweist, ein solches zu erstellen. Dabei bekommt er lediglich eine Nummer zurück. Diese Identifikationsnummern sind auf dem gesamten Display eindeutig – auch über unterschiedliche Anwendungen. Auf diese Weise können unterschiedliche Programme auf den gleichen Fenstern arbeiten (Plugins, etc.) – eine Technik, die sich abstraktere Toolkits zu nutze machen.