Das X-Window-System

Das X-Window-System

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.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    70 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us