X Windows Vortrag
aktueller Entwurf
* im odp Format
ehemaliger Entwurf
Vorschlag von Bernd vom 30.9.2010
GESCHICHTLICHE GRUNDLAGE und ENTWICKLUNG
GESCHICHTLICHE GRUNDLAGE
- Motivation: rechenstarke Maschinen / rechenschwache Terminals
Lösungsansatz: Client- / Server-Architektur
wichtig zu erwähnen, da anders als gewohnt: - Server: rechenschwach
- Client: rechenstark
Idee
Idee: Eingabe: Server → Rechenlast: Client→ Ausgabe: Server
- Analogie: Texterminal
- Protokoll tritt an Stelle einer API
X11 Standard spezifiziert nur das Protokoll keine API
- Beispiel-Implementierungen
- Xlib
- xcb
Anwendungsfall (Beispiel)
Kommunikation Client - Server
X11 Architektur sieht nur Kommunikation Client - Server vor
Kommunikation Client - Client nur über den Server
X11 Protokoll
- Ziel: Minimierung der transportierten Datenmenge
- klassisch: Fonts Serverseitig / aktuell: Clientseitig
-> RESOURCENVERWALTUNG - SERVERSEITIG
- Identifikation über ID (XID)
- Resourcen:
- Window
- Pixmap
- GC
- Font
- ... (komplette Liste müsste man wohl Mal in Ruhe erstellen, soweit zu denen, die mir gerade einfallen)
- Keymap
- klassische Keymaps - ersetzt durch XKB Erweiterung
- Colormap
- Anachronismus: Colormap (denke an CGA 4 Farben, etc.; aktuelle Grafikkarten 24-bit)
- ENTWICKLUNG
- ERWEITERUNGEN
- Motivation: Schritthalten mit aktueller technischer Entwicklung
Umsetzung: spezielle Requests - QueryExtension / ListExtensions
- major-opcode - dynamisch zugeteilt
- minor-opcode - fest verabredet
- AKTUELL
< TODO > Hier hin müsste eine Zusammenstellung aller in aktuellen Implemenierungen enthaltener Erweiterungen, incl. kurzer Erwähnung ihres Bestimmungszwecks; Da habe ich bisher allerdings noch überhaupt keine Übersicht
- BEISPIELE
< TODO > hier müssten nun einige Erweiterungen genannt werden, die wir für wichtig erachten.
- ERWEITERUNGEN
KOMMUNIKATION: WINDOWMANAGER-CLIENT / CLIENT-CLIENT
< TODO > Hier sehe ich zur Zeit leider noch gar keine klare Struktur ein paar Ansätze, bzw. Punkte, die hier wohl unbedingt hin gehören habe ich weiter unten recht unsortiert aufgelistet.
- Probleme: Parallelbetrieb mehrerer Clients
- Client- / Server-Architektur
- Folge: klassische IPC Mechanismen nicht einsetzbar
- Kommunikation über:
- RESOURCEN
- Properties
- Selections
- wichtig: ist glaube ich mittlerweile komplett überholt - müsste man sich aber noch einmal schlau machen, welcher Standard hier verantwortlich zeichnet
- EVENTS
ClientMessage
- RESOURCEN
- Standards:
- ICCCM
- EWMH
< TODO > plus jede Menge anderer, die ebenfalls interessant sein könnten - auch hier fehlt mir derzeit leider der rechte Überblick.
TECHNISCHE UMSETZUNG UNTER GNU/LINUX
- Aufgabenverteilung: Xorg - libGL.so (mesa) - Kernel (agpgart / drm)
- Auflistung für den Fall freier (frei wie in Freiheit, nicht wie in Bier!) Treiber
- proprietäre Anbieter können natürlich zurechtstricken, was sie wollen
- 2D Treiber - Xorg: Beschleunigungsarchitekturen
- nachladbares Modul: /usr/lib/xorg/modules/drivers/*
- XAA - veraltet! Beschleunigung nur für Anfragen über core-Protokoll nicht! für XRENDER Anfragen.
- EXA
- UXA - EXA Implementierung von intel
- 3d Treiber - libL.so - bereitgestellt durch mesa
- nachladbares Modul: /usr/lib/dri/*
- Kernelkomponenten - agpgart (Verwaltung: Adress Resolution Table) drm ((noch) keine Ahnung!)
- Zukunft
- Wayland Display Server
Kommentar: Dr. Oliver Diedrich "Das Ende von X11?" http://www.heise.de/open/artikel/Die-Woche-Das-Ende-von-X11-1134463.html
- Fasst knapp zusammen, was an X (heute) schlecht ist und was Wayland vielleicht einmal besser macht
< TODO >
Quellen
Bücher
- Niall Mansfield: "The Joy of X: The Architecture of the X Window System", UIT Cambridge (Reprint from 1993)
- Bernd hat das Buch (zur Zeit bei Martin)
das Buch (in Auzügen) bei Google Books: http://books.google.de/books?id=30P1jkdfHe4C&printsec=frontcover&dq=The%2BJoy%2Bof%2BX
Weblinks
X Window System
umfangreiche Informationen finden sich auf der Dokumentationsseite der x.org Foundation:
http://www.x.org/releases/X11R7.5/doc/index.htmlnicht alle Dokumente, die die x.org Foundation über ftp zur Verfügung stellt scheinen dort verlinkt zu sein:
ftp://ftp.x.org/pub/X11R6.7.0/PDF/über ICCCM hinaus reichende "Quasi-Standards" finden sich auf den Seiten des freedesktop.org Projekts:
http://www.freedesktop.org/wiki/Specificationseinen Teil der unter oben genannten Quellen zu findenden Information bitet Christophe Tronche im HTML Format an:
http://www.tronche.com/gui/x/eine sehr umfangreiches Archiv gehaltener Vorträge bietet Keith Packard an:
http://keithp.com/
Toolkit Anbindung
Zum selbst Experimentieren dürfte es auch interessant sein, wie sich X11 unter Verwendung gängiger Toolkits nutzen lässt.
- GTK kapselt X11 im GDK Layer.
Eine Liste der Möglichkeiten, die GDK hierfür bietet findet sich unter:
http://library.gnome.org/devel/gdk/stable/gdk-X-Window-System-Interaction.html- Codebeispiel hierzu
1 #include <gtk/gtk.h>
2
3 #include <gdk/gdkx.h>
4 #include <X11/X.h>
5
6
7 Display *dpy;
8
9 gboolean expose (GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
10 {
11 GdkWindow *gdk_window;
12 Window xid;
13
14 Window root;
15 int x, y;
16 unsigned int width, height, border_width, depth;
17
18 g_object_get (widget, "window", &gdk_window, NULL);
19 xid = GDK_WINDOW_XID (gdk_window);
20
21 XGetGeometry (dpy, xid, &root, &x, &y, &width, &height, &border_width, &depth);
22 XClearArea (dpy, xid, 0, 0, width, height, False);
23
24 XRectangle rectangles[] = {
25 width/4, height/4,
26 width/2, height/2
27 };
28
29 XDrawRectangles (dpy, xid, DefaultGC (dpy, 0), rectangles, 1);
30
31 return TRUE;
32 }
33
34 int main (int argc, char *argv[])
35 {
36 GtkWidget *window;
37
38 dpy = XOpenDisplay (NULL);
39
40 gtk_init (&argc, &argv);
41
42 window = g_object_new (GTK_TYPE_WINDOW,
43 "title", "Titel",
44 "double-buffered", FALSE,
45 NULL);
46 g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
47 g_signal_connect (window, "expose-event", G_CALLBACK (expose), NULL);
48
49 gtk_widget_show_all (window);
50 gtk_main ();
51 return 0;
52 }
