Quick viewing(Text Mode)

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 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 – 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

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 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. beim Schließen eines Fensters DestroyNotify-Event an alle Nachfahren und Expose-Event an alle zuvor verdeckten Fenster)

● Events werden in eine Warteschlange eingereiht

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.2 Funktionsweise

Event – Typen und Event – Masken

● es werden über 30 Event-Typen unterschieden

● Event-Masken verhindern unnötige Belastung des Systems

● dem X-Server wird explizit mitgeteilt, welche Events an den Client geschickt werden sollen (sollte vor dem Anzeigen eines Fensters durchgeführt werden)

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.2 Funktionsweise

Abarbeiten von Events

● Events, die durch Benutzereingaben ausgelöst wurden, werden entweder vom aktiven Fenster behandelt oder an den nächsten Vorfahren weitergegben, bis eines der Fenster das Event behandelt oder explizit verwirft

● die Abarbeitung erfolgt dann in einer Event-Schleife

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.2 Funktionsweise

Fehlerbehandlung

● Fehler, die auf dem X-Server durch Funktionsaufrufe auftreten, werden genau wie Events an den Client geschickt

● Fehler-Events werden von der Xlib nicht in eine Warteschlange eingefügt, sondern sofort durch die Fehler-Event-Routine bearbeitet

● Die Xlib bietet eine voreingestellte Fehler-Event-Routine, die Fehler auf stderr ausgibt

● Anwendungen können eigene Fehler-Event-Routinen definieren

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.2 Funktionsweise

Graphik mit X

● Funktionen zum Zeichnen von

– Punkten

– Linien

– Segmenten

– Kreisen, Bögen

– Vierecken

– Polygonen

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.2 Funktionsweise

Kommunikation zwischen Anwendungen

● bisher: Kommunikation zwischen Windowmanager und anderen Clients

● jetzt: Kommunikation zwischen Clients, die nicht direkt verwandt sind

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.2 Funktionsweise

Text mit X

● für jede Schriftgröße ist ein eigener Font notwendig

● verfügbare Fonts können aufgelistet und einzeln geladen werden

● Höhe und Breite müssen selbst berechnet werden, Text wird nicht automatisch umgebrochen oder ausgerichtet

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.2 Funktionsweise

● Acht separtate Cut-Puffer:

– nehmen beliebige Bytefolgen auf

– können von allen Clients gelesen und beschrieben werden

– Daten werden auf dem X-Server gespeichert

● Zu jedem Fenster können Properties gespeichert werden:

– sind über einen Namen identifizierbar

– haben einen festen Datentyp

– können von allen Clients gelesen und gesetzt werden

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.2 Funktionsweise

● Der Selection-Mechanismus ist eine Erweiterung des Cut-Puffers:

– nur ein Client kann zu einem Zeitpunkt Besitzer der Selection sein

– Daten bleiben bei einer Anwendung (und liegen nicht auf dem X-Server)

– zur Übertragung werden die Daten in ein Property des anfordernden Clients geschrieben

– dieser wird dann zum Besitzer der Selection gemacht

– für größere Datenobjekte (Bilder etc.) geeignet

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.3 Nachteile

● Durch ihre Größe ist die Xlib für kleine Plattformen ungeeignet.

● Xlib-Requests, die eine Antwort erwarten, laufen synchron ab. Dadurch werden die Clients solange blockiert, bis eine Antwort eingegangen ist, egal ob die Antwort tatsächlich sofort benötigt wird oder nicht.

● Die API macht es schwierig, Nebenläufigkeit fehlerfrei zu nutzen.

● Anfragen der Clients werden optimiert und daher nicht unmittelbar in Serveranfragen umgewandelt. Es ist kaum möglich, direkt auf das X-Protokoll zuzugreifen

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.3 Nachteile

● Durch ihre Größe ist die Xlib für kleine Plattformen ungeeignet.

● Xlib-Requests, die eine Antwort erwarten, laufen synchron ab. Dadurch werden die Clients solange blockiert, bis eine Antwort eingegangen ist, egal ob die Antwort tatsächlich sofort benötigt wird oder nicht.

● Die API macht es schwierig, Nebenläufigkeit fehlerfrei zu nutzen.

● Anfragen der Clients werden optimiert und daher nicht unmittelbar in Serveranfragen umgewandelt. Es ist kaum möglich, direkt auf das X-Protokoll zuzugreifen

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

4.4 XCB (X C Binding)

● soll die Xlib ersetzen

● Umstieg wird durch die Bibliothek Xlib/XCB erleichtert, die XCB als Transportschicht nutzt, aber sowohl XCB- als auch Xlib-Funktionsaufrufe (nebeneinander) zulässt

● Vorteile:

– kompakter trotz gleichen Funktionsumfangs

– ermöglicht direkten Zugriff auf das X-Protokoll durch XML - Beschreibungen

– bessere Unterstützung für nebenläufige und asynchrone Anfragen

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes

5. Toolkits

5. Toolkits

● Toolkits sind GUI-Bibliotheken

● Entwicklung von grafischen Oberflächen auf einer höheren Ebene als der Xlib

● Die wichtigsten Toolkits unter X Window sind , , Xt und GTK+

1. Qt

2. Xt

3. Motif

4. GTK+

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

Qt

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Tookits

Qt

● C Klassenbibliothek und Toolkit für grafische Oberflächen

● ursprünglich als Widgetset für X-Window-Systeme entwickelt (Alternativ zu Motif)

● für zur Windows API Microsoft Foundation Classes (MFC)

● Qt-Toolkit plattformunabhängig → Framework für Unix/, Windows und neuerdings auch MacOS X

● Umfang der Qt-Bibliothek stark weiterentwickelt, aktuellste Version Qt 3.3.3 von Trolltech

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

Warum Qt?

● Plattformunabhängig → kann unverändert auf verschiedenen Plattformen kompiliert werden (Java auch, jedoch QT schneller ausgeführt)

● Bruchteil an Quellcode → Methoden, Sorgfälltige API

● schnelles Erlernen → Quelltexte offen und damit verbunden Einblick in konzeptuellen Aufbau

● mittlerweile weit verbreitet besonders in Programmierung von Linux- Anwendungen

● Arbeitserleichterung und Hilfe durch hervorragende Online-Dokumentation

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

Qt – Beispielprogramm

● Erzeugung eines Fensters mit einem HelloButton und eines ExitButtons

● Einbindung der notwendigen Bibs

● Funktionseinbindung

● WindowWidget – Adden von ButtonWidget

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

5. Toolkits

Xt

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

Xt - X Toolkit

nutzt low-level Xlib library, mit Oo und freundlicher API

● Verwendet in C oder C++

● Keine Funktionen für graphische Objekte (buttons, Menüs, etc.) = widgets → Keine spezifischen widgets → andere Libs wie Xaw & Motif

● Xt gibt Funktionen wie z.B. Erstellung und Nutzung von widget types

● meisten modernen toolkits wie FLTK, GTK, und Qt kein Gebrauch von Xt library(eher Xlib direkt)

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

GTK+

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

GTK+

● Gimp Toolkit → Abkürzung GTK+

● Entwicklung von Peter Mattis, Spencer Kimball und Josh MacDonald → um abseits von Motif GUI für GIMP zu erstellen

● Heute → Verwendung von Vielzahl von Anwendungen, sowie in GNOME oder , neben Qt eines der erfolgreichsten Grafik Toolkits

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

GTK+

● sehr brauchbare, funktionsreiche Werkzeugsammlung zum Erstellen grafischer Benutzeroberflächen

● freie Komponentenbibliothek unter der LGPL

● die API bietet Cross-Plattform-Kompatibilität

● in C geschrieben & mit Bindungen C++, Python & C # usw.

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

GTK+ Beispielprogramm

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

Motif oder MOTIF

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 5. Toolkits

Motif (oder MOTIF)

● Programmbibliothek für Entwicklung für u.a. grafische GUIs

● Seit Version 2.1 Unicode Nutzung in etlichen mehrsprachigen Umgebungen

● erkennbar an quadratischen, dreidimensionalen Effekten z.B. Menüs, Knöpfe, Regler

● heutzutage angesichts von GTK+ und Qt weniger an Bedeutung

● Motif wurde von der Open Software Foundation geschaffen (OSF/Motif)

● gehört nun zur Open Group - Motif wird noch weiterentwickelt (Version 2.3 analog zu XPM auch Unterstützung von JPEG- und PNG-Bilddateien)

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 6. Verschiedenes

6. Verschiedenes

Cygwin

/X Portierung X Window System → Microsoft Windows Systemen ( Windows NT, Windows 2000, Windows XP, Windows Vista, Windows Server 2003 und seit Version 1.7 auch unter Windows 7 und Windows Server 2008)

● Cygwin/X läuft auf allen Kunden- und Geschäftssystemen von Windows

● Cygwin/X bestehend aus : X Server, X libraries und nahezu allen Standard X clients (wie , xhost, xdpyinfo, xclock, and xeyes)

● Bietet eine UNIX-ähnliche API zu Xlib and X clients

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 6. Verschiedenes

Dargestellt:

- 2 offene Cygwin Bash Konsolen unter WinXP (eine führt eine Midnight- Commander Session aus) - X11-Server in rootless-mode - remote GUI-app (xclock) (tunneled over SSH via putty)

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 6. Verschiedenes

Dargestellt:

- 2 offene Cygwin Bash Konsolen unter WinXP (eine führt eine Midnight- Commander Session aus) - X11-Server in rootless-mode - remote GUI-app (xclock) (tunneled over SSH via putty)

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 6. Verschiedenes

X über SSH (X – Forwarding)

● Programm 'ssh' mit Option '-X'

● zeigt grafische Programme, die über SSH auf einem entfernten Rechner gestartet werden, auf dem eigenen lokalen Display an

● das Client-Programm muss dazu den X11-Standard einhalten

● der lokale Rechner muss einen X-Server bereitstellen

● unabhängig von den verwendeten Betriebssystemen

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 6. Verschiedenes

X über SSH (X – Forwarding)

● Programm 'ssh' mit Option '-X'

● zeigt grafische Programme, die über SSH auf einem entfernten Rechner gestartet werden, auf dem eigenen lokalen Display an

● das Client-Programm muss dazu den X11-Standard einhalten

● der lokale Rechner muss einen X-Server bereitstellen

● unabhängig von den verwendeten Betriebssystemen

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes 6. Verschiedenes

X-Server X-Client

ssh-Tunnel

sshd ssh -X (proxy X-Server)

Terminal Shell lokaler Rechner lokaler Rechner

Einführung → Geschichte → Architektur → X-lib Programmierung → Toolkits → Verschiedenes