Das X-Window-System
Total Page:16
File Type:pdf, Size:1020Kb
X – Window Programmierung Medieninformatik – Hochschule Rhein-Main Systemprogrammierung 2010 Christine Bauers Jan Nowag Kathleen Oehring X – Window Programmierung Gliederung 1. Einführung X Window System 2. Geschichte 3. Archtikektur 4. X – Lib Programmierung 5. Toolkits 6. Verschiednes 1. Einführung in das X – Window - System 1. Einführung X – Window System ● Netzwerkprotokoll ● Client – Server – strukturiert ● Standartbaukasten zur Erstellung graphischer Benutzeroberflächen ● Windowmanager ● Netzwerktransparent Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 2. Geschichte 2. Geschichte ● 1984 – Entwicklung von u.a. MIT ● 1987 – Version X11 ● 1988 – Gründung des nicht – kommerzielle X – Konsortiums The Open Group ● 1994 – TheOpenGroup uebernahem die Entwicklung Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 2. Geschichte ● 1994 – Xfree86 erlangt immer größeren wird Standart der X – Implementierung ● 2003 – Xfree löst sich auf X.Org Foundation ● 2004 – Die X – Org Foundation wird gegründet ● 2005 – Die Weiterentwicklung von X.Org, X.Org -Server, ist die meistverbreitete X - Implementierung Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3. Architektur 3.1 Client 3.2 Server 3.3 X – Protokoll 3.4 Windowmanager 3.5 Kommunikationsmodell 3.1 Client ● Anwendungsprogramme ● Benutzt graphische Ein – und Ausgabe des Servers ● Kann auf selben Rechener laufen wie Server ● Beispiele: xclock, xcalc, xcalendar ● Spezieller Client: WindowManager Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.1 Client xcalc xeyes xcalendar Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.2 Server ● Läuft auf Rechner am Arbeitsplatz ● Stellt graphische Dienste zur Verfügung ● Enthält Grafikkarten – Maus und Tastaturtreiber ● Steuert Ein – und Ausgabegeräte Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.3 X - Protokoll ● Sorgt für Kommunikation zwischen Client und Server ● Geräteunabhänig ● Basiert auf TCP/IP oder UNIX – Domain - Sockets ● 4 Arten zur Kommunikation – Request – Reply – Event – Error Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.3 X - Protokoll Request ● Vom Benutzer ausgelöst ● Von X – Lib erzeugt ● Informationen für den Server z.B. Anweisung wie ein Fenster verschoben wurde ● Round – Trip – Request (erwartet Antwort – z.B. Veränderung der Fenstergröße) ● One – Way – Request (erwartet keine Antwort – z.B Linie zeichnen) Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.3 X - Protokoll Reply ● Serverseitige Antwort ● Nur bei Round – Trip - Request Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.3 X - Protokoll Events ● Vom Benutzer ausgelöste Aktionen (Mausbewegung, Tastendruck) ● Server kontrolliert sämtliche Eingabegeräte ● Server schickt registrierte Events an Anwendugsprogramm ● Events werden im Client in eine Warteschlange gelegt Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.3 X - Protokoll Error ● Ähnlich zu Events ● Xlib stellt Funktionen zur Fehlerbehebung bereit ● Unterscheidung zwischen behebbaren und fatalen Fehlern Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.3 X - Protokoll Pufferung ● Anfragen werden gesammelt ● Gesammelte Anfragen werden verschickt, wenn Puffer voll ist ● Ausnahmen – Kein passendes Ereignis in der Warteschlange – Round – Trip – Request – Client entleert Puffer manuell Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.4 Windowmanager ● Spezieller X – Client ● Verwaltung der Fenster am Bildschirm ● Stellt Funktionen wie Minimieren, Vergrößern und Schließen zur Verfügung ● Kwin (KDE) ist bekanntester Windowmanager Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.4 Windowmanager ● Kwin – Bildschirmhintergrund ist kein root – Window, sondern KDE – Desktop selbst ● Aktionen wie Drag & Drop sind dadurch möglich ● Kann in verschiedenen Stilen angepasst werden Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.4 Windowmanager KDE 4.1.3 Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 3.5 Kommunikationsmodell Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4. Xlib – Programmierung 4.1 Xlib 4.2 Funktionsweise 4.3 Nachteile 4.4 XCB 4.1 Xlib • Basis des X Window Systems auf der Client-Seite ● in C geschriebene Programmbibliothek, die Funktionen und Datenstrukturen zur Kommunikation mit dem X-Server bereitstellt ● erfordert vom Programmierer keine Kenntnisse über das X-Protokoll ● bleibt den Entwicklern von grafischen Anwendungen normalerweise verborgen, da diese gegen Toolkits und andere Bibliotheken programmieren, welche auf der Xlib aufbauen ● Referenzimplementierung der X.Org Foundation Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.1 Xlib Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Erzeugen eines einfachen Fensters: 1. Verbindung zum X-Server aufbauen 2. Fenster definieren 3. Informationen für den Windowmanager (optional) 4. Fenster anzeigen 5. Fenster schließen, Verbindung beenden Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Wichtige Begriffe ● Host: Name des Servers im Netzwerk ● Display: X-Server aus Softwaresicht, mehrere X-Server auf einem Rechner erfordern Hardware, die Ein- und Ausgabegeräte für mehrere Benutzer bereitstellt ● Screen: Bildschirm an einem Display, wobei ein Display mehrere Bildschirme haben kann, die dann einem Benutzer zur Verfügung stehen Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Host „eins“ Host „zwei“ Host „drei“ Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Verbindung mit dem Server aufbauen Display *XOpenDisplay(char *display_name) Für POSIX-konforme Systeme gilt: - display_name: hostname:display_number:screen_number (TCP) - display_name: hostname::display_number:screen_number (DECnet) - display_name: display_number:screen_number (UNIX Domain Socket) Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Fenster definieren int XDefaultScreen(Display *display) - Liefert die Nummer des Standardbildschirms zurück - wird bei vielen Funktionsaufrufen benötigt Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Window XRootWindow(Display *display, int screen_number) - jedes zu erzeugende Fenster benötigt einen Vorfahren - bei Client-Fenstern auf oberster Ebene ist das der Windowmanager bzw. der ganze Bildschirm - verschachtelte Fenster sind möglich Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Window XCreateSimpleWindow(Display *display, Window parent, int x, int y, unsigned int width, unsigned int height, unsigned int border_width, unsigned long border_color, unsigned long background) - x und y geben die Position der linken oberen Ecke des Fensters an (wird von den Windowmanagern meistens ignoriert) - border_width gibt die Dicke des Rahmens an (wird auch meistens ignoriert) - Rückgabewert ist die Kennungs-ID des Fensters Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Informationen für den Windowmanager ● dem Windowmanager können Informationen zu Fenstern übergeben werden ● z.B.: Fenstertitel, Icon, minimale oder maximale Größen, Gravitation etc. ● Funktionen zum Setzen einzelner Werte oder ganzer Strukturen Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise void XStoreName(Display *display, Window win, char *window_name) - teilt dem Windowmanager den Namen des Fensters mit Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Fenster anzeigen void XMapWindow(Display *display, Window win) - Zeigt das Fenster win an, vorausgesetzt alle Vorfahren werden auch angezeigt. - Handelt es sich um ein Fenster mit Nachfahren, für welche diese Funktion bereits aufgerufen wurde, dann werden diese jetzt auch angezeigt. Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Fenster schließen void XDestroyWindow(Display *display, Window win) - zerstört das Fenster win und alle Nachfahren - guter Stil, Fenster würden beim Beenden der Verbindung ohnehin zerstört werden Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Verbindung beenden void XCloseDisplay(Display *display) - beendet die Verbindung zum X-Server - alle Fenster und Ressourcen werden zerstört - guter Stil (gibt ggf. noch nicht gemeldete Fehler aus), Verbindung würde beim Beenden des Clients automatisch beendet werden Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 4.2 Funktionsweise Events ● Nachrichten vom X-Server an den Client ● ausgelöst durch Ereignisse: – Benutzereingaben (Maus, Tastatur) – Seiteneffekte von Benutzereingaben (z.B.