X-Server Architektur
Transcription
X-Server Architektur
X-Server Architektur BAKKALAUREATSARBEIT (Seminar aus Betriebssysteme) zur Erlangung des akademischen Grades Bakkalaureus der technischen Wissenschaften in der Studienrichtung INFORMATIK Eingereicht von: Harald Roithmayr, 0155035 Lukas Leblhuber, 0156290 Angefertigt am: Institut für Informationsverarbeitung und Mikroprozessortechnik - FIM Betreuung: o.Prof. Dr. Jörg R. Mühlbacher Dipl. Ing. Andreas Putzinger Linz, Juni 2005 Seminararbeit aus Betriebssysteme X-Server Architektur Eidesstattliche Erklärung Wir erklären an Eides statt, dass wir die vorliegende Bakkalaureatsarbeit selbstständig und ohne fremde Hilfe verfasst, andere als die angegebenen Quellen und Hilfsmittel nicht benutzt bzw. die wörtlich oder sinngemäß entnommenen Stellen als solche kenntlich gemacht haben. Des weiteren versichern wir, dass wir diese Bakkalaureatsarbeit weder im In- noch im Ausland in irgendeiner Form als Prüfungsarbeit vorgelegt haben. Harald Roithmayr Lukas Leblhuber Seite 1 Seminararbeit aus Betriebssysteme X-Server Architektur Inhaltsverzeichnis Eidesstattliche Erklärung ........................................................................................................ 1 Inhaltsverzeichnis ..................................................................................................................... 2 1 Abstract ............................................................................................................................. 4 2 X-Protokoll........................................................................................................................ 5 3 4 5 6 7 8 2.1 Einführung.................................................................................................................. 5 2.2 Client-Server-Prinzip ................................................................................................. 5 2.3 Grafikprotokoll........................................................................................................... 6 2.4 Eingabeprotokoll ........................................................................................................ 6 2.5 Performance ............................................................................................................... 6 Xlib................................................................................................................................... 10 3.1 Einführung................................................................................................................ 10 3.2 Display Funktionen .................................................................................................. 13 3.3 Fenster Manipulation ............................................................................................... 14 3.4 Grafikfunktionen....................................................................................................... 15 XFree86 ........................................................................................................................... 16 4.1 Einführung................................................................................................................ 16 4.2 Lizenzstreitigkeiten und Abspaltung von XFree86................................................... 16 4.3 Architektur................................................................................................................ 17 Integration eines Windowmanager............................................................................... 20 5.1 Was ist ein Windowmanager? .................................................................................. 20 5.2 Bekannte Windowmanager....................................................................................... 20 5.3 Installation und Konfiguration ................................................................................. 21 Ausgabefenster auf anderen Rechner senden.............................................................. 23 6.1 Einleitung ................................................................................................................. 23 6.2 Voraussetzungen....................................................................................................... 23 6.3 Praktische Durchführung ......................................................................................... 23 Remote Desktop.............................................................................................................. 26 7.1 Remote Framebuffer Protokoll................................................................................. 26 7.2 Virtual Network Computing ..................................................................................... 27 7.3 KDE Desktop-Sharing .............................................................................................. 28 Mehrere X-Server auf einem Rechner......................................................................... 29 Seite 2 Seminararbeit aus Betriebssysteme X-Server Architektur 8.1 Motivation................................................................................................................. 29 8.2 Starten mehrerer X-Server ....................................................................................... 30 9 Résumé ............................................................................................................................. 32 10 Quellen............................................................................................................................. 33 Seite 3 Seminararbeit aus Betriebssysteme X-Server Architektur 1 Abstract Dieses Paper befasst sich mit dem X-Server, seiner Architektur und seinem praktischen Betrieb. Es beinhaltet unter anderem Beschreibungen des X-Protokolls und der Bibliotheken, die vom X-Server verwendet werden. Weiters wird die Open-Source-Version des X-Servers, XFree86 vorgestellt und ein Einblick in seine Konfiguration gegeben. Die grundlegenden Technologien werden praktisch besprochen und angewandt, außerdem erhält der Leser Einblick in moderne Techniken der vernetzen Kommunikation. Zuletzt werden noch Anwendungsszenarien für mehrere X-Server aufgezeigt und Methoden um weitere X-Server und Window Manager zu starten. Seite 4 Seminararbeit aus Betriebssysteme X-Server Architektur 2 X-Protokoll 2.1 Einführung Das X-Server Protokoll wurde Anfang der 80er Jahre entwickelt, um eine auch für Netzwerkanwendungen brauchbare, graphische Benutzeroberfläche für UniX Betriebssysteme zu definieren. Ein Großteil der Entwicklung wurde am Massachusetts Institute of Technology (MIT) unter dem Projektnamen Athena durchgeführt. Die Verantwortlichen für dieses Projekt waren vor allem Robert W. Scheifler und Jim Gettys. Unterstützt wurde die Entwicklung von einigen namhaften Konzernen wie DEC und IBM, die sowohl als Sponsor auftraten, als auch eigene Entwicklungen in das Projekt mit einfließen ließen. Mit diesen beiden Firmen wurde – in enger Zusammenarbeit mit dem MIT – das Xt-Toolkit entwickelt. Ab dem Release 2 der Version 11 des X-Window-Systems (X11R2) wurde die Entwicklung dem XConsortium übertragen. Schon ab den ersten Entwürfen des Protokolls wurde darauf Wert gelegt, einen portablen Standard zu scha ffen, der es erleichtern sollte, graphische Benutzeroberflächen für Programme zu schaffen. Dies sollte vor allem durch die Verwendung von Bibliotheken und generischem Code ermöglicht werden. Eine plattformübergreifende Verfügbarkeit sollte die Entwicklungs- und besonders die Portierungszeit erheblich verkürzen. Weiters wurde eine normierte Schnittstelle für die Softwareentwicklung für einen Wettbewerbsvorteil sorgen. 2.2 Client-Server-Prinzip Im Gegensatz zu graphischen Oberflächen anderer Hersteller wie Microsoft oder IBM, die nur dazu dienen, grafische Applikationen auf einem lokalen Rechner anzuzeigen, ist es mit dem X-Server möglich, die Datenverarbeitung auf einem Rechner von der Steuerung und Anzeige auf einem anderen Rechner zu trennen. Daraus ergibt sich der Vorteil, dass die Bedienung identisch ist, egal ob lokal oder remote berechnet wird. Im X-Protokoll scheint die Einteilung in Client und Server umgekehrt, da der Server lokal und der Client remote betrieben wird. Die Logik dahinter wird klar, wenn man das Ganze so betrachtet, dass der X-Server Darstellungsfunktionalität zur Verfügung stellt und auf Seite 5 Seminararbeit aus Betriebssysteme X-Server Architektur eingehende Verbindungen von Nutzern wartet, die sich ein- und ausloggen können. Das XProtokoll stellt die plattformunabhängige Schnittstelle zwischen unserem Server und dem Client dar. Für die Übertragung der Daten zwischen Client und Server werden bekannte Netzwerkprotokolle wie IP oder X.25 verwendet. Die Sicherung der Datenübertragung wird auch von den Netzwerkprotokollen wie TCP gewährleistet. Somit muss sich das X-Protokoll selbst nicht darum kümmern, wie die Daten von einem Rechner zum anderen gelangen. Deshalb bleibt auch der eigentliche Informationsaustausch für die Anwendung verborgen und es muss nicht unterschieden werden, ob sich der Server auf dem gleichen Rechner oder auf einem anderen Gerät befindet. 2.3 Grafikprotokoll Das X-Protokoll besitzt neben der Kommunikation zwischen Client und Server auch noch die Methoden zur Grafikdarstellung. Über die Bibliotheken des X-Protokolls werden Funktionen und Parameter, die zur Darstellung benötigt werden, zu semantischen Objekten zusammengefasst und an den Server geschickt. Dieser versucht die Objekte in graphische Grundfunktionen zu zerlegen und auszuführen. 2.4 Eingabeprotokoll Weiters besitzt das X-Protokoll die Möglichkeit auf Benutzereingaben zu reagieren. Diese Eingaben, egal ob über Tastatur oder Maus, werden in einer Warteschlange zusammengefasst und an die Applikation gesendet. Wie die Eingaben abgearbeitet werden, wird dem jeweiligen Programm überlassen. Sie können in ihrer Eingangsreihenfolge behandelt werden, oder es können beispielsweise die Mauseingaben vorgezogen werden. Dies ist dadurch möglich, dass aus der Liste der Eingaben eine Teilmenge mit einer bestimmten Eigenschaft selektiert werden kann. 2.5 Performance Bei der Entwicklung des X-Protokolls wurde auf eine hohe Leistungsfähigkeit des Systems geachtet. Eine wichtige Methode, um die Effizienz zu erhöhen, ist das Buffering. Auf beiden Seiten des Systems, werden die Befehlfolgen gepuffert. Dies wirkt sich positiv auf die Performance aus, da alle Daten über Netzwerkprotokolle übertragen werden. Wenn eine große Seite 6 Seminararbeit aus Betriebssysteme X-Server Architektur Menge an Daten verschickt werden muss, ist es für das System nicht förderlich, wenn jeder Befehl einzeln verschickt wird, da an jedes Datenpaket, das übertragen werden muss, ein Header für das entsprechende Netzwerkprotokoll angehängt wird. Dieser Header besteht unter anderem aus der Ziel- und Senderadresse, sowie weiteren für den Netzwerkverkehr wichtigen Daten. Das Buffern wirkt sich vor allem positiv bei größeren Strecken aus, die über mehrere Netzwerkknoten gehen, weil es ja sein kann, dass bei jedem Knoten eine Prüfung des Paketes durchgeführt wird. Durch die Zusammenfassung mehrerer Befehle müssen weniger Daten über das Netzwerk gesendet werden. Dadurch verringert sich der Traffic, der durch die XServer Kommunikation entsteht. Ein weiterer Performancevorteil wird dadurch bewirkt, dass sich die Grafikbefehle nicht nur auf Grundbefehle wie Linie und Punkt beziehen, sondern komplexere Objekte wie Rechtecke erzeugt werden können. Um ein Rechteck durch Linien Darzustellen müssen vier Linien mit jeweils zwei Punkten angegeben werden. Mit einer Funktion zum Zeichnen eines Rechtecks müssen nur 2 Punkte angegeben werden (links-oben/rechts-unten), und das Rechteck kann genau bestimmt werden. Somit muss nur ein Viertel der Datenmenge übertragen werden, die für vier Linien benötigt werden würde. Da die meisten Grafikkarten auch noch Funktionen besitzen, die ein Rechteck schneller zeichnen als die einzelnen Linien, entsteht auf der Seite des Servers einen weiterer Performancegewinn. 2.5.1 Der Server Der X-Server stellt die Anzeige- und Steuerungsfunktionalität dar, sozusagen das Terminal. Er läuft immer auf der lokalen Maschine und ist zweigeteilt in einen geräteunabhängigen Teil, der Darstellungsdaten von Anwendungen entgegennimmt und verarbeitet und einen geräteunabhängigen Teil, der die eigentliche Darstellung der Graphiken der Anwendungen übernimmt. Die Kommunikation zwischen den beiden Schichten erfolgt über „Events, die zwischen den einzelnen Schichten ausgetauscht werden, also Nachrichtenpakete, die von einer Schicht an die nächste gesendet und dort weiterverarbeitet werden.“ [Linux Magazin] Seite 7 Seminararbeit aus Betriebssysteme X-Server Architektur Geräteunabhängige Schicht: Der DIX (DeviceIndependentXserver-Layer) stellt im Wesentlichen die Implementierung des X-Protokolls dar. Diese Schicht ist in allen X-Servern gleich, um größtmögliche Kompatibilität und die strikte Trennung von Client- und Serverprogrammierung zu gewährleisten. Geräteabhängige Schicht: “DDX (DeviceDependentXserver-Layer) ist der Sammelbegriff für alle geräteabhängigen Teile des X-Servers. Es ist über mehrere Verzeichnisse unterhalb des Server-Verzeichnisses xc/programs/Xserver/ verteilt und enthält sowohl einige Bibliotheken zur Vereinfachung der Hardwareprogrammierung als auch die schließlich damit realisierten Routinen.“ [Linux Magazin] Eingehende X-Events vom DIX werden in Hardwareroutinen umgesetzt um Darstellungen auf dem Bildschirm vorzunehmen. Hardwareaktivität, wie Maus- und Tastaturkommandos werden in plattformübergreifend Form gebracht und ans DIX weitergegeben. Extensions: Erweiterungen (Extensions) wie die Phigs Extension to X - PEX und die XInput Extension erweitern den X-Server mit zusätzlicher Funktionalität, wie eigenen Extension-spezifischen Requests, Events und Errors. Dabei wird auch das X-Protokoll erweitert, so dass auch auf der Client-Seite des X-Window Systems zusätzliche Bibliotheken erforderlich sind, um das erweiterte Protokoll auswerten und generieren zu können. Im Falle der erwähnten Extensions sind das die libPEX5 und libXi. Extensions sind intern oft, ähnlich wie der X-Server, in einen DIX/OS/DDX- Teil aufgeteilt und als größtenteils eigenständiger Teil in den Server integriert.“ [Anheyer] [x.org] Seite 8 Seminararbeit aus Betriebssysteme 2.5.2 X-Server Architektur Der Client Jede Anwendung, die auf die X-Bibliothek (Xlib s.u.) zurückgreift und zur Darstellung mit einem X-Server kommuniziert, wird X-Client genannt. Ein solches Programm sollte in „etwa wie folgt aussehen: § Initialisierung: o Verbindung zum Server aufbauen o Fenster öffnen o Ressourcen (z.B. Zeichenmodus, Schrift, …) definieren § Hauptschleife: o Events abfragen o Events bedienen o eigentlicher Programm Code § Ende: o eigener Code o Fenster schließen o Ressourcen freigeben o Verbindung zum Server schließen“ [Lueders] Seite 9 Seminararbeit aus Betriebssysteme X-Server Architektur 3 Xlib 3.1 Einführung Unter XLib versteht man eine Sammlung von Bibliotheken, die benötigt werden, um grafische Anwendungen für den X-Server zu erstellen und die Kommunikation zwischen Server und Client zu ermöglichen. Diese Kommunikation findet auf einem lokalen System über UnixDomain-Sockets (/tmp/.X11-unix/X0) und zwischen verschiedenen Rechnern über TCP/IP oder DECnet statt. Sie wird immer mittels Paketen realisiert, wobei zwischen vier Arten von Paketen unterschieden wird: [Bräuner] 3.1.1 Request Der Client schickt Zeichenbefehle an den Server immer mit einem Request Paket. Um die Geschwindigkeit des Systems zu erhöhen, wartet der Client nicht auf die Antwort, die in Form eines Reply Pakets vom Server kommt, ausgeno mmen es wird von der momentan ausgeführten Operation ausdrücklich gefordert. Bei diesem System verlässt man sich darauf, dass die darunter liegende Netzwerkschicht (in den meisten Fällen Layer 4 des ISO/OSI-Schichtenmodell) das korrekte Senden eines Paketes überwacht und es bei einem Fehler noch einmal gesendet wird. Die Größe eines Request Pakets muss immer ein Vielfaches von 4 Byte betragen. [Scheifler Gettys] Seite 10 Seminararbeit aus Betriebssysteme 3.1.2 X-Server Architektur Reply Die vom Client erwarteten Aktionen werden am Server ausgeführt. Sobald dies geschieht, schickt der Server ein Reply-Paket an den Client zurück. Es wird jedoch nicht auf jeden Request ein Reply geschickt, sondern nur auf solche, die Informationen vom Server anfordern. So wird zum Beispiel einen Request zum Zeichnen einer Linie kein Reply gesendet. Auf ein Request aber, das die aktuelle Fenstergröße erfragt, wird sehr wohl mit einem Reply geantwortet. Die Größe eines Antwortpakets muss wie das Request Paket selbst wieder ein Vielfaches von 4 Bytes betragen und zusätzlich noch eine Mindestgröße von 32 Bytes aufweisen. 3.1.3 Events Events teilen dem Client mit, ob sich am Zustand des Bildschirms (z.B. ein verdecktes Fenster wurde freigelegt), der Tastatur oder der Maus etwas geändert hat. Der Client kann dann mit Hilfe von Xlib-Funktionen auf diese Events reagieren. Diese Ereignisse werden vom XServer selber registriert und Events werden somit nur vom Server an den Client geschickt. Der Client verarbeitet die Benutzereingabe und führt die daraus resultierende Aktion aus. Danach schickt er die Daten für die geänderte Bildschirmausgabe an den Server, der diese dann auf den Monitor überträgt. Abhängig vo m Programm kann es vorkommen, dass ein Event für den Client keine wichtigen Informationen enthält. Wenn dem Server bekannt ist, welche Events der Client nicht benötigt, werden diese gleich vom Server wieder verworfen, was gerade bei einer Client-ServerVerbindung, die über ein Netzwerk hergestellt wurde, einen Performancegewinn bringt. Die Entscheidung, welches Event der Server an den Client schickt und welches verworfen wird, wird natürlich nicht willkürlich vom Server getroffen, sondern ist in dem ServerAttribut event mask genau festgelegt. Weiters befindet sich in der event mask noch eine Liste mit Events, die immer wieder das gleiche Request vom Client erze ugen. Um in diesem Fall nicht erst ein Event an den Client schicken zu müssen und zu warten, bis dieser eine passende Request Sequenz erzeugt und gesendet hat, kann der Server für diese Events selbst das Request erzeugen und sofort in die Warteschlange einreihen. Alle Event Pakete haben eine fixe Größe von 32 Bytes, um die Struktur der Warteschlange und das Eventhandling zu vereinfachen. Seite 11 Seminararbeit aus Betriebssysteme 3.1.4 X-Server Architektur Error Wenn eine Operation nicht durchführbar ist, so antwortet der X-Server dem Client mit einer Error Message. Gründe für einen Fehler liegen meist darin, dass entweder der Server nicht genug Speicher zur Verfügung stellen kann, um den Request richtig zu bearbeiten, oder falsche bzw. fehlende Parameter im Request. Der Server überprüft bei der Ankunft eines neuen Request, ob alle Parameter vorhanden sind, indem er die Länge des ganzen übertragenen Befehls kontrolliert. Diese Prüfung wird nur vom Server durchgeführt, da der Client keinen Zugriff auf die nötigen Daten hat, um die Befehlslänge zu kontrollieren. Obwohl eine Error Message auf den ersten Blick ein Event ist, wird diese anders behandelt. Events kommen beim Client in eine Warteschlange und werden nacheinander vom Client abgearbeitet. Eine Error Message entspricht eigentlich einem Event mit höchster Priorität. Sie überspringt die ganze Warteschlange und wird sofort von einem Fehlerbehandlungsprozess bearbeitet. Ein an den Client gesendeter Error kann verschiedene Aufgaben erfüllen. Zum einen kann er einfach nur als Mitteilung über einen aufgetretenen Fehler dienen, zum anderen stellt er auch eine Reparaturroutine dar. Im zweiten Fall können jedoch erhebliche Probleme auftreten, es kann nämlich vorkommen, dass ein Fehler in einem Request nicht sofort entdeckt wird, wenn dieser zum Beispiel dadurch ausgelöst wird, dass zu wenig Speicher zur Verfügung steht. Es ist anzunehmen, dass bis zum Entdecken des Fehlers schon weitere Requests vom Client an den Server gesendet wurden und der Server diese auch abgearbeitet hat, nachdem eine Error Message erzeugt wurde. Im X-Server System gibt es keine Möglichkeit, bereits abgearbeitete Requests wieder rückgängig zu machen. Um weitere Fehler zu vermeiden, ist es dem Client nicht erlaubt, auf Errors, die eine Fehlerbehandlungsroutine enthalten, direkt mit einem neuen Request zu antworten. Die Standardvorgehensweise des Client besteht in diesem Fall darin, eine Fehlermeldung an den Server zu senden und den Clientprozess, der den Fehler verursacht hat, zu beenden. Die gleiche Vorgehensweise wird auch dann verwendet, wenn die Verbindung zwischen Client und Server unterbrochen wird. Da eine Error Message eine spezielle Art eines Events darstellt, hat diese auch wie ein Event eine fixe Größe von 32 Bytes, obwohl nur die Ersten 11 Bytes benötigt werden. [Scheifler Gettys] Seite 12 Seminararbeit aus Betriebssysteme X-Server Architektur Beispiel für eine Error Message (Bad Window): # of Bytes Type Values Description 1 0 error (always zero for errors) 1 3 code (Bad Window) 2 unsigned integer sequence number 4 unsigned integer bad resource id 2 unsigned integer minor opcode 1 unsigned integer major opcode 21 unused [X-Protocol] 3.2 Display Funktionen Unter einem Display versteht man eine Verbindung, die eine Client-Applikation zur Workstation aufbaut. Über das Display können Ressourcen auf der Workstation belegt werden. Bei diesen Ressourcen handelt es sich um Fenster, Farben, Zeichensätze, Muster (Pixmaps), etc. 3.2.1 Erzeugen einer Verbindung zum Display Die Verbindung zum X-Server ist die erste Aufgabe, die der X-Client nach dem Start (meist direkt mir dem Start des Betriebssystems verbunden) ausführen muss. Nachdem diese Verbindung erfolgreich erstellt wurde, kommt es zu einer Authentifizierungsphase, in der der Server prüft, ob es dem Client gestattet ist, sich an diesem Server anzumelden. Sobald die Anmeldung erfolgt ist, wird die Verbindung zum Display aufgebaut. Dies geschieht über den Xlib-Befehl XOpenDiaplay(). Dabei wird der Bibliothek ein Zeiger auf einen Identifikationsstring übergeben, in dem die Informationen über das zu öffnende Display stehen. An dieser Stelle kann auch ein Zeiger übergeben werden der auf null zeigt. In diesem Fall wird vom X-Server ein Standarddisplay mit den Werten, die in der Environment-Variable $DISPLAY zu finden sind, erstellt. Seite 13 Seminararbeit aus Betriebssysteme 3.2.2 X-Server Architektur Schließen der Verbindung Um ein Display zu schließen sind drei Schritte notwendig. Zuerst muss mit dem Befehl XFreeGC(dp,gc) der angeforderte Graphics Context wieder freigegeben werden. Danach wird mit XDestroyWindow(dp,win) das erzeugte Fenster geschlossen und zum Schluss mit XCloseDisplay(dp) die Displayverbindung geschlossen. 3.3 Fenster Manipulation 3.3.1 Fenster erzeugen Um ein neues Fenster zu erzeugen, muss zuerst die oben beschriebene Displayverbindung hergestellt werden. Danach müssen die einzelnen Parameter des Fensters festgelegt werden und das Fenster erzeugt werden. Display *mydpy; Window mywin; … myscreen = DefaultScreen(mydpy); bg = WhitePixel(mydpy, myscreen); fg = BlackPixel(mydpy, myscreen); myhint.x = 200; myhint.y = 100; myhint.width = 256; myhint.height = 256; myhint.flags = PPosition | PSize; mywin = XCreateSimpleWindow(mydpy, DefaultRootWindow(mydpy), myhint.x, myhint.y, myhint.width, myhint.height,5, fg, bg); Es wird ein Display mydpy erzeugt. Weiters muss ein Screen definiert werden, in dem das Fenster geöffnet werden soll. Nachdem Farbe und Position bestimmt wurden, kann das Fenster an der gewünschten stelle mit XCreateSimpleWindow() erzeugt werden. Seite 14 Seminararbeit aus Betriebssysteme 3.3.2 X-Server Architektur Fenster schließen Um das Fenster wieder zu schließen, muss der schon erwähnte XDestroyWindow(dp,win) Befehl verwendet werden Die Parameter stehen dabei für das Display, in dem das Fenster erzeugt wurde (dp) und das Fenster selbst (win). 3.3.3 Weitere Befehle Weitere wichtige Befehle, um ein Fenster zu manipulieren sind folgende: § XMoveWindow(pd,win,x,y) dient dazu, das Fenster an die Stelle mit den Koordinaten x und y zu setzen. § Mit dem Befehl XResizeWindow(dp,win,width,height) wird die Größe des Fensters verändert. 3.4 Grafikfunktionen Um freie Objekte mit Xlib zu erstellen, gibt es eine Vielfalt von Befehlen, die von einem einfachen Punkt zu komplexen Polygonen reichen. 3.4.1 XDrawPoint Mit XDrawPoint(dp,d,gc,x,y) wird ein einzelner Punkt an die Stelle x y im Display dp gezeichnet. Die Variable gc beschreibt den Graphics Content und mit d wird eine drawable Variable übergeben. 3.4.2 XDrawLine Die Funktion XDrawLine(dp,d,gc,points,npoints,mode) dient dazu, eine Linie aus einem Array von Punkten points zu erstellen. Die Variable npoints gibt die Anzahl der Punkte im Array an. 3.4.3 XDraw Mit XDraw(dp,d,gc,vlist,vcount) kann ein Polygon oder eine Kurve dargestellt werden, die durch eine Liste von Vertex-Elementen bestimmt wird. Seite 15 Seminararbeit aus Betriebssysteme X-Server Architektur 4 XFree86 4.1 Einführung Unter XFree86 versteht man eine OpenSource-Version des X-Window-Systems, die auf verschiedenen Betriebssystemen wie Unix, Linux, Open BSD, Windows NT (z.B. innerhalb der Cygwin Umgebung) läuft. Das XFree86 Projekt wurde 1991 von David Wexelblat, Glenn Lai, David Dawes und Jim Tsillas ins Leben gerufen, um die Fehler im Quellcode von X11 X386 zu beheben. Anfangs wurde es noch als X386 1.2e bezeichnet, als jedoch X386 nur noch kommerziell vertrieben wurde, wurde das Projekt in XFree86 umbenannt und als Open Source verbreitet. 4.2 Lizenzstreitigkeiten und Abspaltung von XFree86 Ab der Version 4.4 von XFree86 wurde die Lizenz durch eine Werbungsklausel erweitert, wie sie schon aus diversen FreeBSD Distributionen bekannt war. Durch diese Klausel kam es zu Streitigkeiten unter den Entwicklern, da manche von ihnen behaupteten, dass XFree86 keine freie Software mehr sei. Dies führte zum Ausschluss aus diversen Linux- und FreeBSDDistributionen. Benutzer von OpenBSD blieb bei der letzten Version, die unter der alten Lizenz veröffentlicht wurde (V4.4 Release Candidate 2) und entwickelten diese selbstständig fort. Im Jahr 2003 wurde Keith Packard – ein anerkannter X-Window-Entwickler – unter dem Vorwurf der Verschwörung, aus dem XFree86 Kernteam ausge schlossen. Er war unter den Verdacht geraten, XFree86 spalten zu wollen. Da es sich um ein Open Source Projekt handelte, arbeitete Packard weiter an XFree86 und versuchte Entwickler aus dem Projekt für seine neue Version abzuwerben. Als diese Vorgänge jedoch bekannt wurden, musste sich Packard vollkommen vom XFree86 Projekt zurückziehen. Keith Packard begann danach mit freedesktop.org an einem völlig neuen Projekt namens Xserver zu arbeiten, welches heute von diversen Quellen schon als nächste X-Server Generation bezeichnet wird. Seite 16 Seminararbeit aus Betriebssysteme X-Server Architektur Das XFree86 Kernteam existierte, nachdem Packard gegangen war, noch bis zum 30 Dezember 2003. An diesem Tag wurde von den Entwicklern, die dem Kernteam angehörten, beschlossen, sich wegen der stark gesunkenen Innovationskraft am nächsten Tag aufzulösen. Sofort schlossen sich einige Entwickler mit der alten X.org Foundation zusammen und schufen ein Open Source Projekt, um auch zukünftig eine freie Version eines X-Servers gewährleisten zu können. X.org schloss sich wiederum mit freedesktop.org zusammen und entwickelte einen X-Server auf Basis von XFree86 Version 4.4 RC2. Im darauf folgenden Jahr, beschlossen große Linux Distributionen wie Gentoo, Slackware oder Suse sich von XFree86 abzuwenden und auf den neuen X-Server von freedesktop.org und X.org zu setzen. Dies brachte dem neuen Server einen gewaltigen Schub an neuen Entwicklern. Neben diesem X-Server Projekt gibt es noch eine zweite, auch auf XFree86 aufbauende Implementierung namens Xouvert, die aber fast keine Anhänger findet. 4.3 Architektur Die Kommunikation mit I/O-Geräten erfolgt mit Ausnahme der Grafikkarte über den Betriebssystemkernel. Um die Grafikkarte anzusprechen wird der Kernel übergangen, was über eigene von XFree86 erstellte Treiber geschieht. Bis zur Version 4 von XFree86 hatte der X-Server ein monolithisches Design, was zu sehr großen und unhandlichen Server-Binaries führte. Es ergab sich das Problem, dass bei der Entwicklung neuer Treiber ein völlig neuer X-Server erstellt werden musste, obwohl sich nur ein kleiner Teil des Codes änderte. [Steinmetz] Ab der Version 4 von XFree86 wurde das Design geändert und eine modularisierte Struktur erzeugt. Es entsteht eine strikte Trennung zwischen dem eigentlichen X-Server und Modulen, die bei Bedarf geladen werden können. Durch diese Trennung muss nur noch der „kleine“ XServer an das bestehende System angepasst werden, was zu einer einfacheren Konfiguration führt. Auch die Entwicklung von Treibern wird durch diese neue Architektur beschleunigt und es ist sogar für kommerzielle Anbieter möglich Treiber oder Zusatzmodule zu erzeugen, ohne den Sourcecode ihrer Module freigeben zu müssen. Das Laden der einzelnen Module ist sowohl während des Programmstarts, als auch während der Laufzeit möglich, obwohl zweite Möglichkeit eher selten eingesetzt wird. Seite 17 Seminararbeit aus Betriebssysteme 4.3.1 X-Server Architektur Beispiel für das Laden von Modulen beim Programmstart: Um ein Modul zu laden, werden von einem Parser aus der Datei die ausführbaren Codefragmente gelesen und in den Speicherbereich des X-Servers geladen um ihn für den Server verfügbar zu machen. Innerhalb des Moduls werden symbolische Adressen verwendet, welche noch entsprechend aufgelöst werden müssen und dann in die Symboltabellen des Loaders gespeichert werden. [Steinmetz] Die Konfiguration erfolgt meist über die Datei /usr/X11R6/lib/X11/XF86Config oder über diverse graphische Tools wie SaX. Um XFree86 ohne die Verwendung eines graphischen Tools zu konfigurieren, ist es ratsam, sich zuerst die Datei XF86Config.eg anzusehen, die eine Beispielkonfiguration enthält. 4.3.2 Aufbau der XF86Config Datei: Die Datei ist in Abschnitte gegliedert, die immer mit folgenden Zeilen umgeben sind: Section “section-name“ … EndSection In einer Section befinden sich logisch zusammengehörende Parameter, wie die benötigten Dateien, Einstellungen für Monitor, Maus, Keyboard oder die Auflösung. Beispiel für die Section Files: Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/misc" FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled" Seite 18 Seminararbeit aus Betriebssysteme FontPath X-Server Architektur "/usr/X11R6/lib/X11/fonts/75dpi" EndSection Diese Section beschreibt, wo sich die RGB-Farbtabelle von X11 befindet und auf welche Schriftarten zugegriffen werden soll. Die Parameter für die einzelnen Hardwarekomponenten werden meist in den Bedienungsanleitungen angegeben und können relativ leicht übernommen werden. Die einzige Ausnahme bildet die Grafikkarte. Der X-Server selbst stellt Methoden zur Verfügung, um die richtigen Daten über die Grafikkarte zu ermitteln. Mit dem Befehl X –showconfig können die benötigten Werte angezeigt werden. Beispiel für die Ausgabe von X –showconfig bei einer S3 Graphikkarte XFree86 Version 3.3.2 / X Window System (protocol Version 11, revision 0, vendor release 6000) Operating System: Linux Configured drivers: S3: accelerated server for S3 graphics adaptors (Patchlevel 0) mmio_928, s3_generic Die Bezeichnung der Graphikkarte, die in der XF86Config-Datei eingetragen werden muss, ist entweder mmio_928 oder s3_generic. Um nun herausfinden zu können, um welchen Kartentyp es sich wirklich handelt, muss in der XF86_S3-Manual-Seite kontrolliert werden, welche Karte welchen Chipsatz verwendet. Weiters müssen noch weitere Parameter wie die Taktfrequenz und der Arbeitsspeicher ermittelt und eingetragen werden. Nachdem die Konfigurationsdatei fertig erstellt wurde, kann der X-Server mit dem befehl startx gestartet werden. [Kofler] Seite 19 Seminararbeit aus Betriebssysteme X-Server Architektur 5 Integration eines Windowmanager 5.1 Was ist ein Windowmanager? Durch die Client-Server Architektur von X werden alle Programme, die eine grafische Benutzeroberfläche besitzen, als Clients auf dem X-Server ausgeführt. Genau wie alle anderen grafischen Programme, ist auch der Windowmanager eine einfache Client Anwendung. Es ist sogar möglich, Programme ohne den Windowmanager laufen zu lassen, was jedoch den Nachteil hat, dass Änderungen der Fenstergröße oder das Schließen eines Fensters nicht mehr komfortabel über einen Button erledigt werden können. Neben einem gewissen Komfort, was die Bedienung der Programme angeht, wird auch das so genannte Look&Feel des Arbeitsplatzes durch den Windowmanager gesteuert. So kann zum Beispiel der Rahmen eines Fensters aus normalen Rechecken durch einen Rahmen im 3D Stil ersetzt werden, und es können Schatten und dergleichen hinzugefügt werden. Diese Vorgänge werden vom Windowmanager unabhängig von den anderen Applikationen durchgeführt. Neuere Windowmanager wie Enlightenment verwenden sogar OpenGL-Funktionen um „echte“ dreidimensionale Objekte darzustellen. Historisch gesehen bauen alle Windowmanager auf die Programme wm und twm auf. Vor allem der noch heute gängige fvwm ist ein direkter Nachfolger dieser Programme. 5.2 Bekannte Windowmanager 5.2.1 Gnome Mit der Entwicklung des GNU Network Object Model Environment wurde 1997 begonnen, um einen hundertprozentig freien Windowmanager zu schaffen. KDE wurde von vielen Entwicklern als nicht freie Software angesehen, da es mit dem kommerziellen Tool Qt erstellt wird. 1999 wurde Version 1.0 von Gnome veröffentlicht und im August 2000 wurde die Gnome Foundation gegründet, der bekannte Firmen wie IBM, Sun und HP angehören, um Gnome zu stärken. Seite 20 Seminararbeit aus Betriebssysteme 5.2.2 X-Server Architektur KDE Das K Desktop Environment ist neben Gnome einer der bekanntesten frei verfügbaren Windowmanager. KDE kann unter Linux, Unix, BSD, und sogar unter Windows betrieben werden. Das Projekt wurde 1996 ins Leben gerufen und 1998 wurde KDE 1.0 der Weltöffentlichkeit vorgestellt. 5.3 Installation und Konfiguration Die Installation eines Windowmanager hängt vom jeweiligen Betriebssystem ab. Für verschiedene Linux Distributionen wie RedHat, Suse oder Mandrake erfolgt die Installation (für viele Windowmanager) automatisch über RPM-Installationsdateien. Will man einen Windowmanager aber zum Beispiel unter Windows installieren, wird ein Programm wie Cygwin benötigt, welches eine Unix- API und einen X-Server für Windows Rechner bereitstellt. Um den Windowmanager gleichzeitig mit dem X-Server zu starten, muss ein Verweis in die Datei .xinitrc eingetragen werden, welche sich im Verzeichnis /home/username/ befindet. Wenn noch keine eigene .xinitrc-Datei definiert wurde, befindet sich die default-Datei in /usr/lib/X11/xinit/xinit. Will man Änderungen vornehmen, ist zu empfehlen, die Datei nicht direkt zu verändern, sondern eine Kopie im home Verzeichnis anzulegen. Dabei darf aber nicht vergessen werden, dass die Datei im home Pfad des Benutzers versteckt werden muss, also mit einem Punkt am Anfang versehen wird. Die Datei .xinitrc wird immer mit dem Befehl startx aufgerufen und beinhaltet die Starteinstellungen für den Windowmanager. Es wird immer zuerst die Datei im Verzeichnis des Benutzers gesucht und erst dann auf die default-Datei zurückgegriffen. In diese Datei können neben Einstellungen wie Hintergrundfarbe und Schriftart auch beliebige Aufrufe für Programme, die mit dem X-Server gestartet werden, eingetragen werden. Ebenso wird in diese Programmaufrufe der Befehl zum Starten des Windowmanagers eingetragen, da dieser wie schon in den vorherigen Kapiteln beschrieben wie jedes andere Programm vom X-Server verwendet wird. Seite 21 Seminararbeit aus Betriebssysteme X-Server Architektur Zur Veranschaulichung: # start some nice programs clock & # gimme time xeyes & # Watch my Mouse xearth & # what already that late??? xsetroot -solid Grey40 # give me a grey background xterm -sb -sl 500 -j -ls -fn 10x20 & # my favorite terminal mwm # my Windowmanager [Kammann] Der Windowmanager muss nicht das letzte aufgerufene Programm sein. Es ist nur wichtig, dass sich das letzte Programm, das aufgerufen wird, nicht in einen eigenen von der Shell “losgelösten” Hintergrundprozess verwandelt, da sonst der X-Server sofort wieder geschlossen würde. Dies wäre zum Beispiel bei Programmen der Fall, die im Hintergrund ausgeführt werden. Die Shell kann immer nur eine einzige Anweisung ausführen und beginnt die nächste Anweisung erst, sobald die vorherige abgeschlossen wurde. Um es nun zu ermöglichen, weitere Programme beim Start des X-Servers auszuführen und nicht die Shell zu blockieren, müssen diese Programme im Hintergrund laufen. Dies wird bewerkstelligt, indem der Programmaufruf mit dem Parameter & versehen wird. Würden in dem oben angeführten Beispiel die einzelnen Programmaufrufe nicht mit diesem Parameter ausgeführt, müsste erst der Prozess clock beendet werden, bevor der Prozess xeyes gestartet würde. Seite 22 Seminararbeit aus Betriebssysteme X-Server Architektur 6 Ausgabefenster auf anderen Rechner senden 6.1 Einleitung XFree86 und kommerzielle Implementierungen unterstützen gemäß den Prinzipien des XProtokolls das Darstellen eines Programmfensters auf einem anderen Rechner, der es dann auch steuern kann. Dabei bietet im ein X-Server im Netz seine Darstellungs- und Steuerungsfunktionalität an, und ein Client, also ein Programm, das die Xlib unterstützt, verbindet sich auf den X-Server und stellt darauf seinen Output dar und nimmt die Steuerungsdaten entgegen. Daher wird streng genommen kein Ausgabefenster auf einen anderen Rechner gesendet, sondern eines von einem Berechnungsrechner empfangen. 6.2 Voraussetzungen Auf der Server-Seite wird nicht zwingend ein Linuxrechner benötigt, weil mittlerweile auch z.B. für Windows etliche Implementierungen des X-Protokolls zur Verfügung stehen (Cygwin, X-Deep32, etc.). Auf der Client-Seite läuft einfach ein Programm, das die Xlib unterstützt. Theoretisch ist es egal, auf welchem Betriebssystem diese Applikation läuft, in der Praxis wird das aber mit ziemlicher Sicherheit ein Unix-System sein. Wie schon erwähnt verbindet sich jeder X-Client beim Start mit dem X-Server, der ihm in der Systemvariable $DISPLAY zugewiesen wird, standardmäßig ist das der lokale. Hier ist anzumerken, dass sich Änderungen der Variable nur auf zukünftige, nicht bestehende Verbindungen auswirken. Man stößt aber auf Grenzen, wenn man Versucht, einen ganzen Desktop mit mehreren Programmfenstern remote darzustellen; das wird vom X-Protokoll nicht direkt unterstützt, man muss auf zusätzliche Software zurückgreifen. 6.3 Praktische Durchführung 6.3.1 Vorbereitung des Servers Wie schon erwähnt muss der Rechner, der die Darstellung und Steuerung übernimmt, nicht zwangsläufig ein Linux-/Unix-System sein. Mittlerweile kann auch ein Windows-Rechner verwendet werden, da es ausgereifte X-Server gibt. In jedem Fall muss man den Rechner, der Seite 23 Seminararbeit aus Betriebssysteme X-Server Architektur eine Verbindung zum Server aufbauen soll, autorisieren. Unter Linux geschieht das mittels des Befehls xhost. Zur Veranschaulichung: gibt Informationen zur derzeitigen Berechtigungslage xhost aus xhost + berechtigt alle Computer, sich zu verbinden xhost - nimmt allen Computern die Berechtigung, sich zu verbinden xhost + 192.168.0.1 fügt den Rechner mit der IP 192.168.0.1 der Berechtigungsliste hinzu xhost - 192.168.55.177 löscht den Rechner mit der IP 192.168.55.177 aus der Berechtigungsliste 6.3.2 Vorbereitung des Clients: Unter Linux ist es nötig, die Ausgabe auf den anderen Rechner, auf dem der X-Server läuft, umzuleiten. Das geschieht, indem man die Systemvariable $DISPLAY dementsprechend setzt. Bei manchen Programmen muss die Variable nicht geändert werden, es reicht auch ein Aufruf nach dem Schema: xcalc –display 192.168.0.1:0.0 um hier z.B. das Programm xcalc auf den X-Server auf 192.168.0.1 zu lenken. Man startet eine neue Shell und gibt den Befehl DISPLAY=192.168.0.1:1.0 ein. Das bewirkt, dass alle ab jetzt in der Shell gestarteten Programme sich auf das Display 1 auf Screen 0 auf dem X-Server verbinden, der auf dem Rechner mit der IP 192.168.0.1 läuft. Startet man jetzt ein Programm auf die gewohnte Weise, kann man es vom Server aus bedienen. Wird die Shell nun beendet, gehen die Einstellungen verloren, sie sind nur innerhalb der Sitzung gültig. Sehr komfortabel ist es, eine SSH-Verbindung auf einen Rechner aufzubauen, um dort mit dem Befehl xterm –display 192.168.0.1:0.0 eine Shell zu starten, die wieder auf dem lokalen X-Server angezeigt wird. Auf dem lokalen X-Server sieht man dann die xtermSitzung, die gerade per SSH gestartet wurde. Alle in dieser xterm-Shell gestarteten Anwendungen stellen sich nun auf dem lokalen X-Server dar. Seite 24 Seminararbeit aus Betriebssysteme X-Server Architektur Schritt 1: Man startet eine neue Instanz eines X-Servers und berechtigt den gewünschten Client, Verbindungen aufzubauen. Schritt 2: Mittels einer SSH-Shell verbindet man sich auf dem Remote-Host. Dort wird eine xterm-Shell gestartet, die sich wieder auf den lokalen X-Server verbindet. Seite 25 Seminararbeit aus Betriebssysteme X-Server Architektur Schritt 3: Starten eines beliebigen Windowmanagers und etwaiger Anwendungen. 7 Remote Desktop 7.1 Remote Framebuffer Protokoll Das RFB ist ein einfaches Protokoll, das die Übertragung der Maus- und Tastaturereignisse eines steuernden Clients und die Übertragung des Displayinhalts des gesteuerten Servers zum Client definiert. Es baut auf TCP/IP auf und ist mehrbenutzerfähig. Grundsätzlich basiert es auf folgenden Prinzipien: 7.1.1 Handshaking Sobald die Verbindung zwischen Client und Server hergestellt wurde, tauschen sie die RFBProtokollversion aus, um sich auf einen für beide Seiten verständlichen Dialekt zu einigen. Dann erfolgt die Authentifizierungsprozedur zur Anmeldung mit Passwort und die eigentliche, zustandslose Verbindung beginnt. 7.1.2 Adaptive Updates Nur, wenn es der Client verlangt und einen UpdateRequest absetzt, schickt der Server ein Framebuffer-Update. Dieses enthält die Ausschnitte, die sich seit dem letzen Update geändert Seite 26 Seminararbeit aus Betriebssysteme X-Server Architektur haben. Dadurch richtet sich die Updategeschwindigkeit nach den Aktivitäten am Desktop, nach der zur Verfügung stehenden Bandbreite des Netzes und der Geschwindigkeit des Client. 7.1.3 Rechteckige Updates Der Displayinhalt wird nicht im Stück versendet. Es werden Rechtecke ausgeschnitten, deren Inhalt und Position übertragen werden, um an der richtigen Stelle beim Client eingefügt zu werden. Diese Framebuffer können nun einzeln unabhängig von einander komprimiert werden. Es ist auch möglich, nur die neue Position eines rechteckigen Ausschnittes zu übertragen, falls dieser dem Client schon bekannt ist, was zum Beispiel beim Drag&Drop – also dem Ziehen von Objekten am Bildschirm – vorkommt. Wie mit den Pixeldaten des Framebuffers verfahren wird, stellt das RFB-Protokoll aber frei. 7.2 Virtual Network Computing Das ursprünglich von den AT&T Laboratories Cambridge entwickelte VNC implementiert das RFB-Protokoll als VNC-Server und -Client. Es existieren frei verfügbare Versionen für die unterschiedlichsten Plattformen wie Unix, Windows, MacOs und andere. Hier hebt sich die Unix-Variante Xvnc besonders hervor, da sie gegenüber ihren Programmen als X-Server auftritt, der die Darstellung auf einem virtuellen Bildschirm übernimmt, und als ein eigener VNC-Server, der mit dem steuernden VNC-Client korrespondiert. Daher wird nicht das Bild übertragen, das am Display angezeigt wird, sondern das eines virtuellen Desktops, der zusätzlich zum angezeigten im Hintergrund läuft. Seite 27 Seminararbeit aus Betriebssysteme X-Server Architektur In der Praxis: Will man Xvnc benutzen, um remote auf den Rechner zuzugreifen, ist es zuerst notwendig, dem Server ein Display zuzuweisen. Dies geschieht, indem man das Wrapper-Script vncserver aufruft, gegebenenfalls mit den entsprechenden Parametern, wie der Bildschirmauflösung oder der Farbtiefe. Nach der Eingabe von vncserver –geometry 800x600 –depth 34 :1 läuft der Server auf Display 1. Möchte man sich nun von einem Client aus verbinden, ruft man seinen VNC-Viewer mit der IP-Adresse des Servers auf, gefolgt von einem Doppelpunkt und der Displaynummer, in unserem Fall 1. Wieder ist es nötig, nun manuell einen Windowmanager zu starten, um komfortabel arbeiten zu können, falls dieser nicht schon läuft. Das virtuelle Display wird mit dem Befehl vncserver –kill :1 wieder geschlossen. 7.3 KDE Desktop-Sharing Auch KDE Desktop-Sharing ist ein VNC-Server für Linux, der es ermöglicht, den Bildschirminhalt auf anderen Rechnern darzustellen. Der große Vorteil des ab Version 3.1 im Lieferumfang von KDE enthaltenen Werkzeugs ist der, dass im Gegensatz zu seinem Pendant Xvnc die laufende X-Session gesteuert wird und daher auch die Anzeige am Bildschirm der am VNC-Client entspricht. Darüber hinaus ist Desktop-Sharing komplett in die Oberfläche von KDE integriert und bietet dadurch größtmöglichen Komfort bei der Konfiguration und im Einsatz. Aktivierung unter KDE: Man erreicht das Konfigurationswerkzeug des KDE Desktop-Sharing am besten im Kontrollzentrum unter „Arbeitsplatz freigeben“. Der Zugriff ist schnell freigeschaltet, wenn man uneingeladene Verbindungen zulässt und ein Passwort setzt. Blockiert die Firewall die eingehende Verbindung nicht, so kann sich nun ein Client über das Netzwerk anmelden. Der Aufruf lautet vncviewer –shared 192.168.155.33:0. Um schon bestehende Verbindungen zum nicht zu trennen, fügt man das Attribut shared hinzu. Seite 28 Seminararbeit aus Betriebssysteme X-Server Architektur Rückgekoppelte VNC-Verbindung 8 Mehrere X-Server auf einem Rechner 8.1 Motivation Bei dem Thema mehrere X-Server auf einem System laufen zu lassen stellt sich zuerst die Frage nach der Motivation. Warum sollte man auf einem System mehrere X-Server laufen lassen? Eine Begründung für mehrere X-Server ist die gleichzeitige Verwendung verschiedener Windowmanager. Die kann notwendig sein, wenn bestimmte Programme einen bestimmten Windowmanager benötigen um korrekt dargestellt zu werden. Eine andere Motivation besteht darin, Ausgaben auf Verschiedene Monitore aufzuteilen. KDE nutzt die Möglichkeit mehrere X-Server zu starten um es verschiedenen Benutzern zu ermöglichen, gleichzeitig KDE zu verwenden, ohne sich gegenseitig auf irgendeine Weise zu behindern. Sobald man unter KDE den Benutzer wechselt, erscheint automatisch ein Hinweis, dass die aktuelle Sitzung nicht geschlossen wird und zusätzlich eine neue Sitzung mit einem neuen X-Server gestartet wird. Seite 29 Seminararbeit aus Betriebssysteme X-Server Architektur 8.2 Starten mehrerer X-Server Es gibt verschiedene Möglichkeiten, einen neuen X-Server zu starten. Um einen neuen XServer für einen bereits angemeldeten Benutzer zu starten, kann direkt im Windowmanager ein Konsolenfenster geöffnet werden und mit dem Befehl startx -- :1 ein zweiter XServer gestartet werden. Für diesen neuen Server wird automatisch der default Windowma nager gestartet. Um einen anderen WM zu verwenden kann muss dieser als Parameter angegeben werden. Zur Veranschaulichung: § startx startet den ersten Windowmanager (wird meist schon beim Systemstart ausgeführt) § startx -- :1 startet den zweiten Windowmanager § startx twm -- :1 startet den Windowmanager TWM Es können jedoch nicht alle Windowmanager parallel zu einem anderen gestartet werden. So überprüft zum Beispiel Gnome, ob schon ein Windowmanager läuft. Falls Gnome als zweiter Windowmanager gestartet werden sollte, liefert er eine Fehlermeldung und lässt sich nicht ausführen. Wie schon in den vorigen Kapiteln beschrieben, ist der Windowmanager ein Programm, das auf dem X-Server läuft und nicht unbedingt benötigt wird. Der Windowmanager bietet lediglich einige Hilfen um Programmfenster graphisch verändern zu können. Neben dem X-Server, auf dem ein Windowmanager läuft, kann also auch ein zweiter Server ohne WM gestartet werden. Dies ist mit dem Befehl xinit möglich, welcher die gleichen Parameter benötigt, wie der Befehl startx. Zur Veranschaulichung: § xinit startet einen X-Server und legt ihn auf Display 0, wenn noch kein X-Server läuft. Sonst wird eine Fehlermeldung ausgegeben. § xinit -- :1 öffnet einen neuen X-Server mit einem Terminal Window Seite 30 Seminararbeit aus Betriebssysteme X-Server Architektur Die graphische Ausgabe des X-Servers besteht lediglich aus einem grauen Hintergrund in dem ein Terminalfenster geöffnet wird. Über dieses Terminal kann dann genau ein Programm gestartet werden. Wenn ein Programm gestartet wird, fällt sofort auf, dass dieses über keinen einen Rahmen verfügt und dadurch auch nicht verschoben oder in der Größe verändert werden kann. Sobald ein neuer X-Server gestartet wurde, wird automatisch auf die Konsole gewechselt, in welcher der neue Server läuft. Der erste X-Server befindet sich immer auf der Konsole 7, die in den meisten Linux Distributionen mit Strg+Alt+F7 angesprochen werden kann. Die weiteren X-Server werden dann in den nächst höheren Konsolen geöffnet. Neben der Möglichkeit einen neuen X-Server für den bereits angemeldeten Benutzer zu erzeugen, kann auch ein weiterer Benutzer am System angemeldet und für diesen ein neuer XServer gestartet werden. Dazu muss man zuerst in eine Konsole wechseln und sich dort einloggen. Ein neuer Benutzer kann das auf den Konsolen 1 bis 6 tun. Wenn sich ein neuer Benutzer anmeldet und schon für einen anderen Benutzer ein X-Server läuft, muss der neue Server auch mit den oben genannten Parametern gestartet werden. Zur Veranschaulichung: § User 1 meldet sich am System an und startet einen X-Server mit startx. § User 2 meldet sich am System an und versucht einen X-Server mit startx zu starten. Ausgabe: § Fatal Error: Server is already Runnig for display 0 § User 2 muss den neuen X-Server mit dem Befehl startx -- :1 starten. Seite 31 Seminararbeit aus Betriebssysteme X-Server Architektur 9 Résumé Zusammenfassend kann gesagt werden, dass sich die X-Window-Technologie sicherlich besonders dadurch auszeichnet, dass das Konzept der Modulkapselung und der Trennung der Schichten wirklich konsequent durchgezogen wurde. Die sich dadurch ergebende Flexibilität und Portabilität bleibt bis heute beispiellos. Zukünftig kann sicherlich mit einer Ausdehnung des X-Konzepts auf immer mehr unterschiedliche Plattformen gerechnet werden. Diese Entwicklung zeichnet sich jetzt schon mit Produkten wie X-Deep32 oder Omni-X ab. Seite 32 Seminararbeit aus Betriebssysteme X-Server Architektur 10 Quellen [Linux Guide] http://linuxguide.automatedshops.com/LinuxGuide/ [x.org] http://www.x.org [XFree86] http://www.xfree86.org [XFreeHowTo] http://www.linuxhaven.de/dlhp/ HOWTO/DE-XFree86-HOWTO.html [Kammann] Rechenzentrum Universität Hamburg http://www.informatik.uni-hamburg.de/RZ/software/X [Kofler] Michael Kofler „Linux Installation, Konfiguration und Anwendung“ 7. Auflage [X-Protocol] O’Reilly - The Definitive Guides to the X-Windows System X-Protocol Reference Manual 2nd Edition [XWin] O’Reilly - The Definitive Guides to the X-Windows System X-Window System User’s Guide [Scheifler Gettys] R. Scheifler, J. Gettys – X-Window System 2nd Edition [Linux Magazine] https://www.linux- magazin.de/ Artikel/ausgabe/1997/08/Xfree/xfree.html [Anheyer] Diplomarbeit http://www.tay-tec.de/diplom/node8.html [Lueders] Xgraphics, Martin Lueders http://theorie.physik.uni- wuerzburg.de/~lueders/ Xgraphics/deutsch/node3.html [Steinmetz] Seminararbeit – Architektur und Modularisierung von X-Servern Bettina Steinmetz http://www.fh-wedel.de/~si/seminare/ws01/Ausarbeitung/4.xfree/ ArchitekturModularisierung.htm [Bräuner] NX - Turbolader für Linux- und Windows-Terminalserver Vortrag auf dem Business- & Behördenkongress des LinuxTag 2004 Horst Bräuner, Kurt Pfeifle Seite 33