Seit Veröffentlichung des "Technology Brief" steht fest, dass die grafische Benutzeroberfläche der angekündigten neuen Amiga-Rechner weitgehend auf dem sogenannten X-Window-System basieren wird. Dieses ist jedoch auch aus Sicht eines Amiga-Anwenders nicht nur für die Zukunft relevant. Denn für die Classic Amigas sind in letzter Zeit einige Programme portiert worden, die auf diesem System basieren. Zu denken wäre da in erster Linie an die sehr mächtige Bildbearbeitungssoftware "GIMP" und das Strategiespiel "FreeCiv". Dieser "Grundlagen"-Artikel soll einen sehr kurzen Überblick über das X-Window-System geben und dann vor allem die Einrichtung eines solchen Systems auf AmigaOS-Basis erläutern. Dabei wird wie im Artikel "Von Null auf Online" des "Grundlagen"-Teils der vierzigsten "AmigaGadget"-Ausgabe bewußt auf Vereinfachung gesetzt und nur die rudimentären Funktionen beschrieben werden, die man kennen muss, um X-Window-basierte Programme nutzen zu können.
Ein komplettes X-Window-System besteht grundsätzlich aus drei Komponenten: dem Server und den Clients sowie dem Protokoll, auf dessen Basis diese miteinander kommunizieren. Der X-Server ist dabei das Programm, das für die Ausgaben und die Entgegennahme von Eingaben des Benutzers verantwortlich ist. Es kümmert sich um die Bildschirmausgabe und nimmt zur Kenntnis, ob eine Taste gedrückt oder die Maus bewegt wurde. Aus diesem Grunde ist der X-Server (bzw. die ihm zur Verfügung stehenden Gerätetreiber) sehr stark von der verwendeten Hardware abhängig, er verwaltet im Rahmen des X-Window-Systems die Eingabegeräte (Tastatur, Maus) und die Ausgabegeräte (Bildschirm).
X-Clients hingegen kommunizieren primär mit dem X-Server. Es handelt sich bei ihnen um die eigentlichen Programme, die Applikationen oder Spiele. Sie teilen dem Server mit, welche (Bildschirm)Ausgaben erforderlich sind. Im Gegenzug übermittelt der X-Server den X-Clients Informationen darüber, ob und wann der Benutzer in das zugehörige Fenster geklickt oder dort eine sonstige Eingabe getätigt hat. Wie diese Eingaben zu verarbeiten sind, und wie auf sie zu reagieren ist, entscheidet einzig und allein der jeweilige X-Client. Die Programmierung der Clients wird dadurch, dass die eigentliche Kommunikation mit der Hardware und dem Betriebssystem vom X-Server erledigt wird, weitgehend rechnerunabhängig. Sauber programmierte X-Clients sind von daher sehr leicht portierbar.
Die Kommunikation zwischen X-Server und X-Clients letztlich erfolgt über das
asynchrone X-Protokoll. Dieses Prinzip macht X netzwerkfähig, so dass Server
und Client nicht auf demselben Rechner laufen müssen. Entscheidend ist einzig,
dass der X-Client Zugriff auf den X-Server hat. Man spricht insoweit von einem
"transparenten" Netzwerk. Skizzenhaft kann man sich den Ablauf in einem
Beispielssystem mit zwei beteiligten Rechner und zwei X-Clients somit wie
folgt vorstellen:
------------------------------------------- Benutzer <=> | X-Server <===X-Protokoll===> X-Client 1 | Rechner A --------------------||--------------------- || || Netzwerk ---------------- // Rechner B | X-Client 2 <====== ----------------Ein ganz besonderer X-Client soll schließlich nicht unerwähnt bleiben. Mit einem sogenannten "Window-Manager" wird das Design der Fenster der anderen Clients maßgeblich beeinflußt. Insbesondere bestimmt der Window-Manager das Aussehen der Fensterrahmen und Titelbalken. Außerdem gibt er dem Benutzer die Möglichkeit, selbst - etwa durch entsprechende Gadgets in der Titelleiste - auf Position und Größe der Fenster der X-Clients einzuwirken.
In sprachlicher Hinsicht ist zu beachten, dass das Window-System korrekterweise X, X-Window-System oder X11 heißt. Man liest hingegen oftmals - u.a. etwa im "Technology Brief" der Firma Amiga (oder in den Fragen des "AmigaGadget"-Interviews mit Holger Kruse ("AmigaGadget"#29)) - die Bezeichnung "X-Windows" oder "X Windows". Diese ist nicht ganz korrekt. Das MIT selbst schreibt dazu:
"It is a window system called X, not a system called X windows."
Für den Amiga existieren verschiedene X11-Implementierungen. Schon älter ist
eine sehr teuere kommerzielle Lösung der Firma GfxBase, für die eine
Demoversion im Aminet unter
/gfx/x11/GfxBaseX11Demo.lhaexistiert, sowie die Freeware-Portierung "DaggeX", deren Version 0.91 es ebenfalls im Aminet, und zwar unter
/gfx/x11/DaggeX-0.91.lhagibt. Da der Programmierer Kari Mattinen den Sourcecode verloren hat, wurde dieses System nicht weiterentwickelt und verblieb daher in einem unfertigen Stadium. Um die damit auf der Hand liegenden Limitationen dieser beiden Implementierungen zu umgehen, hat der "Miami"-Autor Holger Kruse ein eigenes X-Window-System für den Amiga geschrieben. Sein "AmiWin" ist bei einem akzeptablen Preis das wohl leistungsfähigste der genannten Systeme. Eine Demoversion des Shareware-Projektes ist im Aminet unter
/gfx/x11/AmiWin222d.lhavorhanden.
Die nachfolgende Installations-Beschreibung soll sich jedoch auf keine dieser drei Lösungen beziehen. Statt dessen wird ein vierter X11-Port Verwendung finden. Im Rahmen des wesentlich von Fred Fish mitgestalteten "Geek Gadgets"-Projektes hat Hans Verkuil "Xgeek" entwickelt, einen frei kopierbaren X-Server für AmigaOS. Er liegt für X11 R6.3 vor.
Für die Grafikdarstellung reichen sogar OCS oder ECS aus, man sollte in diesem Fall aber natürlich keine Wunder erwarten. Neben den Amiga-Treibern für OCS, ECS und AGA gibt es auch spezielle Treiberversionen für die Picasso II-Grafikkarte und für CyberGraphX. Während der Treiber für die Picasso II im Test nicht mit der Picasso IV zusammenarbeitete, kann der CyberGraphX-Treiber dank der API-Kompatibilität mit gewissen hinnehmbaren Einschränkungen auch zusammen mit dem Picasso'96-System verwendet werden.
Im folgenden wird es erforderlich sein, auf zahlreiche Dateien der
"Geek Gadgets"-Sammlung zurückzugreifen. Diese können via FTP über
ftp.ninemoons.com/pub/geekgadgets/amiga/m68k/snapshots/current/bezogen werden. Da die benötigten Dateien jedoch einen Umfang von mehreren Megabyte haben, empfiehlt sich dieser Weg wohl nur, wenn man Zugriff auf ein System mit Internet-Standleitung hat. Aus diesem Grund wird hier von dem bislang letzten auf CD-ROM veröffentlichten "Geek Gadgets"-Snapshot zurückgegriffen werden. Dieser stammt zwar aus dem Mai 1998 und ist von daher schon etwas älter, die benötigte Funktionalität ist dennoch gegeben. Bezogen werden kann der "Geek Gadgets Snapshot May 98" bei jedem gut sortierten Amiga-Versandhändler. Auf dem "Ninemoons"-FTP-Server ist der Inhalt dieser CD-ROM ebenfalls abrufbar:
ftp.ninemoons.com/pub/geekgadgets/amiga/m68k/snapshots/980523/Einige der nachfolgend genannten Programmpakete wurden in der Zwischenzeit weiterentwickelt und liegen in aktuellerer Form vor. Dennoch sollen hier, um die Vergleichbarkeit mit dem Stand von Mai 1998 sicherzustellen, die alten Versionen Verwendung finden und genannt werden. Prinzipiell sollten die beschriebenen Installationsschritte aber auch mit den aktuellen Programmversionen entsprechend durchgeführt werden können.
Da die "Geek Gadgets"-Dateien nicht im Aminet-typischen LhA-Format, sondern
in dem in der Unix-Welt üblichen tgz-Format archiviert sind, benötigt man
des weiteren entsprechende Dearchivierungssoftware. Zum einen kann man
tgz-Archive mit einer Kombination aus "gzip" und einem De-Tar-Programm (z.B.
"GNUTar" von Andreas R. Kleinert) entpacken. Dies erfolgt in zwei Schritten:
gzip -d ARCHIVNAME.tgz GNUTar -xvf ARCHIVNAME.tarEinfacher - und für die hier beschriebene X-Installation empfohlen - ist jedoch die Verwendung eines speziellen tgz-Dearchivierungsprogrammes. Dieses trägt den Namen "untgz" und wurde von Oliver Wagner auf den Amiga portiert. Die Syntax lautet hier einfach
untgz ARCHIVNAME.tgz ZIEL:Zu finden ist dieses Programm im Aminet unter
util/arc/untgz.lhaoder auf der CD-ROM a des fünften Aminet-Sets.
makedir DH1:GeekGadgetseingeben. Um nun die Installation zu vereinfachen, empfiehlt es sich, einen Assign "GG:" auf dieses Verzeichnis zu legen, zumal dieser Assign später ohnehin standardmäßig in der "User-Startup" eingerichtet werden wird (dazu aber später mehr). Der temporäre Assign wird mit
assign GG: DH1:GeekGadgetsgesetzt. Nun kann das Verzeichnis "DH1:GeekGadgets" direkt mit "GG:" angesprochen werden. Benötigt wird nun von der "Geek Gadgets"-CD-ROM die Datei "GG-misc-bin.tgz", die das eigentliche Grundgerüst der "Geek Gadgets"-Installation zur Verfügung stellt. Angenommen, die CD-ROM liegt im CD-Laufwerk "CD0:", wird das Archiv mit
untgz CD0:bin/GG-misc-bin.tgz GG:entpackt. Nun werden die "ixemul.library", die auf dem Amiga regelmäßig als Basis für Portierungen von Unix-Programmen verwendet wird, und der in der "ixemul.library"-Distribution enthaltenen "ixpipe-handler" benötigt. Das X-Window-System der "Geek Gadgets"-Distribution setzt mindestens die Version 45.1 der Library voraus, auf der CD-ROM ist Version 47.3 enthalten. Mit
untgz CD0:bin/ixemul-47.3-bin.tgz GG:wird das Archiv entpackt. Standardmäßig wird dabei eine Libraryversion für den 68000er installiert, die aber auch mit allen anderen Prozessoren der 68k-Reihe zusammenarbeitet. Will man eine optimierte Version installieren, hält das gerade entpackte Archiv zahlreiche entsprechend angepaßte Library-Compilate bereit. Diese finden sich jetzt unter
GG:Sys/LibsVerfügt man beispielsweise über einen 68060er-Prozessor, so kann die darauf optimierte Library-Version wie folgt installiert werden:
copy GG:Sys/Libs/ixemul-060-fpu.library GG:Sys/Libs/ixemul.library copy GG:Sys/Libs/ixemul-060-fpu.trace GG:Sys/Libs/ixemul.trace copy GG:Sys/Libs/ixnet-060.library GG:Sys/Libs/ixnet.librarySollte es nach einer solchen Anpassung bei nachfolgend beschriebener Installation Probleme geben, so kann man den Ausgangszustand mit
copy GG:Sys/Libs/ixemul-000.library GG:Sys/Libs/ixemul.library copy GG:Sys/Libs/ixemul-000.trace GG:Sys/Libs/ixemul.trace copy GG:Sys/Libs/ixnet-000.library GG:Sys/Libs/ixnet.librarywiederherstellen. Zu beachten ist hierbei allerdings, dass es sich bei "ixnet-000.library" um eine leicht von der ursprünglichen "ixnet.library" abweichende Version handelt.
Der nächste (einfache) Schritt besteht darin, den "fifo-handler" und
die PD-Korn-Shell "pdksh" zu installieren:
untgz CD0:bin/fifolib-38.4-bin.tgz GG: untgz CD0:bin/pdksh-4.9-bin.tgz GG:Das "Geek Gadget"-Grundgerüst steht damit.
untgz CD0:bin/X-11R6.3-100dpi-bin.tgz GG: untgz CD0:bin/X-11R6.3-75dpi-bin.tgz GG: untgz CD0:bin/X-11R6.3-bin.tgz GG: untgz CD0:bin/X-11R6.3-fonts-bin.tgz GG: untgz CD0:bin/X-11R6.3-inc-bin.tgz GG: untgz CD0:bin/X-11R6.3-ixlib-bin.tgz GG: untgz CD0:bin/X-11R6.3-lib-bin.tgz GG: untgz CD0:bin/X-11R6.3-man-bin.tgz GG: untgz CD0:bin/X-11R6.3-xkb-bin.tgz GG:Damit man nicht auch noch die Dokumentationspfade ueber verschiedene Verzeichnisse leiten muss, sollte man nun den Inhalt des Verzeichnisses "GG:X-11R6.3/man" komplett in "man" kopieren:
copy GG:X-11R6.3/man/ ALL GG:man/Danach kann man das Unterzeichhnis "man" in "GG:X-11R6.3" mitsamt allen Dateien löschen (wobei, wie immer beim Löschen von Dateien, höchste Vorsicht und Aufmerksamkeit geboten sind):
delete GG:X-11R6.3/man/ ALLDamit man X später mittels eines einzigen Befehls einfach und unkompliziert starten kann, sollte man nun mit einem ASCII-Texteditor ("DME", "GoldED", etc.) eine Batch-Datei anlegen. Als Name soll hier "GG:GeekX" gewählt werden. Zunächst muss der X-Server selbst gestartet werden. Das geschieht einfach mit dem Befehl "run X". Allerdings verfügt "Xgeek", wie der X-Server hier intern heißt, über diverse Parameter, von denen man einige beachten sollte. So kann man mit "-pri" festlegen, welche Priorität dem X-Server vom System zugewiesen werden soll. Es ist empfehlenswert, eine Priorität zu wählen, die leicht über dem Normalwert liegt, also etwa "-pri 1". Des weiteren ist eine Besonderheit des X-Window-Systems zu beachten. Wenn der letzte X-Client beendet wird, wird der Bildschirm des X-Servers geschlossen und der Server startet sich automatisch neu. Obwohl man der X-Server auch mit einer bestimmten Tastenkombination beenden kann (dazu weiter unten), kann man an diesem Verhalten ansetzen, um eine elegantere Steuerbarkeit des X-Window-Systems zu erzwingen. Ausgangspunkt der Überlegung ist hierbei, dass regelmäßig ein Window-Manager Verwendung findet und dieser dann der letzte X-Client ist, welcher beendet wird. "Xgeek" kennt nun die weitere Option "-terminate", die zur Folge hat, dass bei Beendigung des letzten X-Clients der X-Server nicht automatisch neu gestartet wird. Setzt man diesen Parameter, so zieht das Verlassen des Window-Managers automatisch auch eine Beendigung des X-Systems nach sich. Zu guter letzt sollte man auch noch der Option "-pn" (partial network) Beachtung schenken. Sie ermöglicht nämlich, den X-Server auch ohne laufenden TCP/IP-Stack zu benutzen. Zwar benötigen manche X-Clients einen solchen, so dass man früher oder später nicht umhin kommen wird, einen TCP/IP-Stack zu installieren und vor dem Aufruf der Batch-Datei "GeekX" zu starten. Die Demoversion von "Miami" reicht hierzu völlig aus, da der Stack nur laufen muss, man braucht nicht online zu gehen. Allerdings soll vorerst der Einfachheit halber das TCP/IP-Erfordernis umgangen werden, so dass zunächst einmal die "-pn"-Option genutzt werden muss. Der Aufruf des X-Servers sieht damit wie folgt aus:
run x -pri 1 -terminate -pnDa der Start des Servers ein wenig Zeit in Anspruch nimmt, kann man nicht sofort den ersten X-Client, in der Regel also einen Window-Manager, starten, sondern muss ein wenig abwarten. Zu diesem Behufe gibt es den Befehl "WaitForX", den man einfach im Anschluß an den Aufruf des X-Servers der Batchdatei hinzufügt:
WaitForXSobald der X-Server gestartet ist, wird "WaitForX" beendet und das Skript weiter abgearbeitet. Daher kann nun der Window-Manager gestartet werden. Standardmäßig liegt X11 der "Tab Window Manager", kurz "twm" genannt, bei. Er wird einfach mittels
run twmaufgerufen. Somit sieht die fertige "GeekX"-Batch-Datei wie folgt aus:
run x -pri 1 -terminate -pn WaitForX run twmDas X-Window-System ist nun im Prinzip einsatzbereit.
assign C: GG:X11R6.3/bin ADDhinzufügen, wobei es sich anbietet, sie unmittelbar hinter die bereits vorhandenen Zeile
assign C: GG:bin ADDeinzufügen.
Damit der Assign "GG:" nach einem Rechner-Neustart überhaupt erkannt und die
Datei "GG:Sys/S/GG-Startup" abgearbeitet wird, sind auch noch Anpassungen an
der Startup-Datei "S:User-Startup" erforderlich (Kickstart 1.x-Nutzer müssen
eventuell statt dessen die Datei "S:Startup-Sequence" edieren). Und zwar sind,
vor einem etwaigen Aufruf der Workbench ("loadwb", "run loadwb" oder
ähnliches), mit einem ASCII-Texteditor folgende Zeilen der Datei
"S:User-Startup" hinzuzufügen:
assign GG: DH1:GeekGadgets setenv DISPLAY :0 resident GG:bin/sh force execute GG:Sys/S/GG-StartupDer "setenv"-Befehl ist für den Betrieb des X-Window-Systems erforderlich, wohingegen die Resident-Machung der Shell "sh" lediglich Voraussetzung zur Verwendung derselben ist. Hat man diese Einfügung in "S:User-Startup" vorgenommen und alle offenen Dateien wieder abgespeichert, so kann (und sollte) man den Rechner neu booten. Alle erforderlichen Assigns müßten jetzt vorgenommen und die weiteren Vorbereitungen für den ersten Start des neu installierten X-Window-System getroffen sein.
GG:in das "Geek Gadgets"-Verzeichnis und startet dann den X-Server und den Window-Manager "twm" mit:
execute GeekXEs müßte sich nun ein neuer Bildschirm öffnen, der mit einem Schwarz-Weiß-Muster hinterlegt ist, und auf dem ein Mauszeiger zu sehen ist. Drückt man die linke Maustaste, erscheint eine Art Pop-Up-Menü mit weißer Schrift auf grünem Hintergrund. Das ist die Kontrolleiste des "twm". Die in einem ersten Block zusammengefaßten Optionen ("Iconify", "Resize", "Move", "Raise", "Lower") stehen dabei für die vorhandenen Möglichkeiten, die Fenster später zu startender X-Clients zu manipulieren. Möchte man das einmal an einem praktischen Beispiel ausprobieren, kann man nun mit einem Mausklick in die rechte obere Bildschirmecke oder mit der Tastenkombination "linke Amiga-Taste + n" zum Workbench/AmigaOS-Bildschirm zurückwechseln und dort die mit X11 R6.3 mitgelieferte Uhr "XClock" starten:
run XClockWechselt man mit dem "Screen in den Vordergrund"-Gadget am rechten oberen Rand der Bildschirm-Titelleiste oder erneut mit der beschriebenen Tastenkombination zurück zum Bildschirm des X-Servers, sieht man nun die Umrisse eines Fensters. Dieses muss man jetzt an einem beliebigen Ort plazieren. Ein Druck auf die linke Maustaste veranlaßt den X-Server, das Fenster jetzt komplett an diesem Ort darzustellen. Möchte man dann das so auf den Bildschirm gebrachte Fenster, in dem (das Bild) eine(r) analoge(n) Uhr ticken müßte, manipulieren, kann man entweder aus der "twm"-Kontrolleiste die gewünschte Option aussuchen, oder direkt das zugehörige Bedienelement in der Fenster-Titelleiste anwählen. Wichtig sind auch die beiden Befehle, die im zweituntersten Block der Kontrolleiste zusammengefaßt sind ("Delete", "Kill"). Wählt man "Kill" an, so verwandelt sich der Mauszeiger in einen Totenkopf. Jetzt kann man, indem man auf das Fenster eines X-Clients klickt, diesen X-Client über die X-Benutzeroberfläche selbst direkt beenden.
Hat man genug herumexperimentiert, sollte man sich einer wichtigen Funktion zuwenden, die die Beendigung des X-Servers ermöglicht. Ganz unten in der "twm"-Kontrolleiste befinden sich zwei Menüpunkte, die direkte Auswirkungen auf das Verhalten des Window-Managers selbst haben. Dem geschilderten Ziel dient dabei insbesondere der Punkt "Exit". Wählt man diesen an, so wird, sofern keine anderen X-Clients mehr laufen, der Window-Manager selbst beendet. Aufgrund des Serveraufrufes mit der Option "-terminate" wird anschließend nicht nur der neue Bildschirm geschlossen, sondern darüber hinaus auch der X-Server beendet. Der Workbench/AmigaOS-Schirm gelangt automatisch wieder in den Vordergrund.
Da mit den vorhandenen Einstellungen ein gewöhnlicher PAL-HighRes-Screen
geöffnet wird, liegt es nahe, sich als nächstes mit den Möglichkeiten, die
Daten des vom X-Server zu öffnenden Bildschirmes zu verändern, zuzuwenden.
Hierzu gibt es den "-screen"-Parameter. Diesem folgend muss man den zu
verwendenden Bildschirm-Treiber angeben, also "amiga", "picasso" oder
"cybergraphx". Beläßt man es dabei, wird unter Verwendung dieses Treibers
ein Bildschirm mit Standardmaßen geöffnet. Man kann jedoch auch, mit einem
"@" vom Namen des Treibers getrennt, bestimmte Werte für die Maße und die
Tiefe des Bildschirmes angeben. Hier ist die Syntax jedoch treiberabhängig,
so dass auf die Dokumentation der einzelnen Treiber verwiesen sei.
Interessanter ist die stets gegebene Möglichkeit, nach dem Treibernamen
"@ask" anzugeben. Dann wird nur in Ausnahmefällen ein Bildschirm mit
Standardmaßen geöffnet. Sowohl der "amiga"- als auch der "cybergraphx"-Treiber
öffnen jedenfalls statt dessen einen Bildschirm-Requester, mit dessen Hilfe
man sich einen genehmen Bildschirm aussuchen kann. (Es ist jedoch zu beachten,
dass es im Testsystem nicht möglich war, einen "cybergraphx"-Bildschirm mit
einer Tiefe von 24 Bit zu öffnen. Entsprechende Versuche führten stets zu
einem Systemabsturz. Die Wahl von 16-Bit-Bildschirmen führte hingegen zu
keinerlei Schwierigkeiten.) Läuft auf dem eigenen Rechner ein Grafiksystem,
dessen API CyberGraphX-kompatibel ist (also CyberGraphX selbst oder
Picasso'96), so kann man nun den X-Server-Aufruf in "GeekX" wie folgt
anpassen:
run x -pri 1 -pn -terminate -screen cybergraphx@askBesitzt man weder ein solches System noch eine Picasso II-Grafikkarte, so kann man den Aufruf in
run x -pri 1 -pn -terminate -screen amiga@askändern. Jetzt öffnet sich nach dem Aufruf
execute GeekXein Screenrequester und danach ein Bildschirm mit den dort gewählten Einstellungen. Dabei wird man jedoch schnell merken, dass der X-Bildschirm nicht immer so aussieht, wie man es sich vorgestellt hatte. Gelegentlich hat das sogar zur Folge, dass man in der "twm"-Kontrolleiste nicht mehr an den Menüpunkt "Exit" herankommt. Um den X-Server dennoch beenden zu können, muss man sich der dazu vorgesehenen Tastenkombination "Linke Amiga-Taste + rechte Amiga-Taste + Q" bedienen.
Die letzte Anpassung der "GeekX"-Batch-Datei betrifft die Verwendung des
"partial network"-Modus. Da dieser spätestens beim Starten ihn nicht
unterstützender X-Clients ohnehin obsolet ist, sollte man am besten schon
nach Ende der ersten Experimentierphase auf ihn verzichten. Der Parameter
"-pn" ist somit einfach zu entfernen, so dass sich die endgültige
"GeekX"-Batch-Datei - auf einem CyberGraphX-kompatiblen System - wie
folgt darstellt:
run x -pri 1 -terminate -screen cybergraphx@ask WaitForX run twmJetzt verfügt man über ein X-Window-System, mit dem man u.a. "GIMP" und "FreeCiv" laufen lassen und die Fertigstellung des Amiga NG in Ruhe abwarten kann.