CHIP: Grafische Oberfläche für Linux

 
Bei einem modernen Unix-System darf natürlich eine grafische Oberfläche nicht fehlen. Besonders wenn der Rechner nicht als Server in einem Netzwerk dient, sondern als Workstation, ist diese von immenser Wichtigkeit.

 

1. X starten
2. Konfiguration des X-Servers
3. Literatur

Für den Unix-Sektor wurde daher vor Jahren das X Consortium gegründet, das Standards und Schnittstellen definiert, um eine allgemein benutzbare Oberfläche, das sogenannte X Window System(tm), zu erhalten. Das X Window System ist eine große und leistungsstarke grafische Umgebung für Unix-Derivate. Kommerzielle Hersteller haben X zum grafischen Standard für Unix-Plattformen gemacht.

Unterstützte Grafikkarten

Wenn Sie sich einen neuen Rechner oder eine neue Grafikkarte kaufen und Linux respektive X laufen lassen wollen, sollten Sie vorher sicherstellen, daß die Karten auch von XFree86 unterstützt wird. Bei heutzutage üblichen Grafikkarten stehen Sie auf der sicheren Seite. Sollten Sie jedoch eine andere oder sehr neue Karte kaufen, prüfen Sie unbedingt den Chipsatz und fragen Sie ggf. den Hersteller vor dem Kauf.

Die unterstützten Chipsätze finden Sie auf der CD aus dem letzten Heft in der XFree86-HOWTO \WORKSHOP\HOWTO\XFREE86, eine Liste unterstützter Grafikkarten ist in der Hardware-HOWTO \WORKSHOP\HOWTO\HARDWARE enthalten.

Die mittlerweile gut verbreitete Matrox Millenium wird noch nicht von XFree86 unterstützt, die nötige Dokumentatation wurde mittlerweile jedoch rausgegeben und wir dürfen in nächster Zeit mit dem Treiber rechnen. Bis dahin kann lediglich der Accellerated-X-Server von X-Inside (erhältlich bei S.u.S.E. oder Delix) verwendet werden.

Für PC-Unixe hat sich das XFree86 Projekt gebildet, eine nicht-kommerzielle Organisation, die X-Server für PC-Unixe und Unix-ähnliche Systeme entwickelt und der Allgemeinheit zur Verfügung stellt. Das XFree86 Projekt veröffentlicht die Server unter der GNU Public License (GPL), es ist also frei benutzbare Software. Der jeweilige X-Server stellt dabei die Basis für das X Window System dar; wenn er läuft, hat man einen grafischen Arbeitsplatz.

Das XFree86-Team hat jedoch ein Problem, sie können nur Treiber für Grafikkarten entwickeln, von denen Sie die Hardware-Beschreibung bekommen. Leider geben einige Hersteller von Grafikkarten die Spezifikationen nicht oder nur für viel Geld heraus, sodaß es für solche vorerst keine Treiber geben wird. (siehe Kasten 1)

Verfügbare Applikationen

  • Textverarbeitung
    • StarOffice
    • LyX / LaTeX / xdvi etc.
    • The Andrew System
    • WordPerfect
  • Mathematik
    • Maple
    • daVinci
    • Spice
    • Scilab
    • MuPAD
    • Mathematica
  • Grafik
    • ImageMagick
    • AERO
    • xmorph
    • Gimp
    • Interviews Draw
    • XPaint
    • XFig
    • PovRay
    • GeomView
    • Tecplot
  • Fun
    • Doom
    • Quake
    • xmcd, ein CD-Player
  • Datenbanken, oft auch mit grafischen Interfaces
    • PostgreSQL
    • mSQL
    • YardSQL
    • verschiedene RDBMS-Datenbanken
    • POET
    • FlagShip
  • Diverses
    • xcdroast, ein CD-Brenner
  • Emulatoren für DOS, Windows, Apple MacIntosh, Atari, C64, Amiga, ZX-80
  • Natürlich diverse Softwarepakete für die Arbeit im Internet wie z.B. Mosaic, Netscape, Xarchie, FTP-Tool, Seyon
  • Professionelle Programmentwicklung mit gcc/g++/gdb, perl, python, Fortran, Pascal, Lisp, Java, Smalltalk, LEDA, Tcl/Tk etc.

X starten

Bei der Xlinux-Distribution ist das X Window System schon vorkonfiguriert mit einem 16-Farb X-Server für EGA-/VGA-Karten. Dieser liefert bei einer Auflösung von 800x600 Pixel meist akzeptable Resultate. Bevor Sie den jedoch ausprobieren können, müssen Sie die Mausunterstützung konfigurieren, sofern Sie das nicht im Anschluß an die Installation erledigt haben.

Dazu loggen Sie sich als {\tt root} ein und rufen das Programm {\tt mouseconfig} auf. Sie werden dann nach der seriellen Schnittstelle und nach dem Maustypen gefragt. Anschließend loggen Sie sich als {\tt user} ein und können mit {\tt startx} den X-Server testweise hochfahren.

[Emacs, JED und Xman]

Abb. 1: Emacs, JED und Xman

Normalerweise landet man nach Booten von Unix auf einer Textkonsole. Linux hat virtuelle Konsolen, maximal 64, beim Xlinux sind 6 davon aktiviert (Alt-F1 bis Alt-F6). Wenn X11 gestartet wird, belegt es eine weitere virtuelle Konsole, die nächste freie, hier wäre das dann die siebte, auf die man von den anderen Textkonsolen mit Alt-F7 umschalten kann.

Ist man bereits im Grafikmodus, so kann man jederzeit mit Ctrl-Alt-F zurück auf eine der anderen Konsolen schalten. Das kann manchmal ganz sinnvoll sein, wenn man Fehlermeldungen oder Textausgaben des X-Servers sucht. Nebenbei bemerkt, man kann auch mehrere X-Server auf verschiedenen Konsolen laufen lassen.

Der X-Server, und damit die grafische Benutzeroberfläche kann auf zwei Arten gestartet werden. Welche man verwendet, hängt stark von der Art der Rechnernutzung ab. Zum einen kann X11 mit dem Befehl {\tt startx} pro User gestartet werden und zum anderen kann das System via {\tt xdm} in den Grafikmodus und auf ein grafisches Login-Programm geschaltet werden. Der {\tt xdm} ist bei Xlinux jedoch nicht enthalten.

Die Basis der persönlichen Konfiguration Ihres Desktops liegt in der Datei {\tt .xinitrc} in ihrem Verzeichnis. Wenn Sie nicht existiert, wird die systemweite Voreinstellung, die in {\tt /usr/X11/lib/X11/xinit/xinitrc} liegt, verwendet. Kopieren Sie diese Datei in Ihr Heimatverzeichnis und benennen Sie sie in {\tt .xinitrc} um.

Bei dieser Datei handelt es sich um ein einfaches Shellskript. Hinter die zu startenden Programme schreiben Sie mit ein kaufmännisches Und: {\tt &}, damit sie im Hintergrund ablaufen und nicht die Abarbeitung blockieren. Das letzte Programm ist die sogenannte kritische Applikation, sie darf nicht im Hintergrund, sondern muß im Vordergrund ablaufen. Dieses ist üblicherweise der Fenstermanager, hier der fvwm, oft wird auch eine Uhr, einer Auslastungsanzeige, das X-Logo etc. verwendet. Wenn diese Applikation beendet wird (z.B. durch den Menüpunkt "Exit FVWM"), wird X11 ebenfalls beendet.

[xfig, spider, InterViews]

Abb. 2: xfig, spider, InterViews

Wenn Sie weitere Programme starten möchten, werden Sie sehen, daß diese irgendwo auf dem Desktop plaziert werden bzw. daß mit der Maus abgelegt werden müssen. Die meisten X11-Programme verstehen einen Kommandozeilenparameter {\tt -geometry} oder abgekürzt {\tt -g}, mit dem Sie die genaue Bildschirmposition festlegen können.

Die Geometrie wird dabei im Format

Breite x Höhe +X-Pos+Y-Pos

angegeben. Dabei werden Breite und Höhe je nach Anwendung in Pixel oder in Spalten bzw. Zeilen (z.B. beim {\tt xterm}) angegeben. Den Positionen kann ein + oder - vorangestellt werden. Die Werte sind relativ zu einer der vier Ecken. +X-Pos ist der linker Rand, -X-Pos der rechte, +Y-Pos der obere und -Y-Pos der untere Rand, +X-Pos+Y-Pos bezeichnet demnach die linke obere Ecke. Mit {\tt rclock -geometry -0+0} setzen Sie z.B. die Uhr in die rechte obere Ecke.

Wenn Sie eine schönere Hintergrundfarbe haben möchten, können Sie mit {\tt xsetroot -solid farbe} eine Farbe aus der Datei {\tt /usr/X11/lib/X11/rgb.txt} als Hintergrundfarbe setzen. Sie können mit {\tt xv -root -quit bild} auch ein Bild als Hintergrund laden. Wenn Sie jedoch etwas ganz Schickes haben möchten, dann nehmen Sie {\tt xearth}, eine sich drehende Erde aus dem Weltraum fotografiert, als animierten Hintergrund. Immer wieder nett in der Weihnachtszeit ist auch {\tt xsnow}, ein beschneiter Wald mit Santa Claus.

Konfiguration des X-Servers

Sollte Ihnen der X-Server nicht gefallen, haben Sie zum einen die Möglichkeit, einen anderen X-Server zu wählen und können bzw. müssen zum anderen die Konfiguration anpassen. Weitere X-Server finden Sie auf Ihrer CD aus dem letzten Heft im Verzeichnis {\tt \WORKSHOP\XSERVER}

Zuvor müssen Sie die CD erst einmal unter Linux mounten (in das Dateisystem einbinden). Das geschieht mit dem {\tt mount}-Befehl: {\tt mount -t iso9660 /dev/cdrom /cdrom}, eventuell müssen Sie dem Kernel vorher noch das ISO-Dateisystem bekanntmachen, und zwar mit dem Befehl {\tt insmod isofs}.

[StarWriter von StarOffice 3.1]

Abb. 3: StarWriter von StarOffice 3.1

Jetzt ist die CD unterhalb von {\tt /cdrom} eingebunden. Sie finden im Verzeichnis {\tt /cdrom/workshop/xserver} X-Server für Grafikkarten mit IBM8514-, Mach8- und Mach32-, S3-Chips und für SVGA-Karten. Das gewünschte Archiv packen Sie mit dem Befehl {\tt tar xvfz /cdrom/workshop/xserver/x_*.tgz} im Hauptverzeichnis {\tt /} aus.

Im Verzeichnis {\tt /usr/X11/bin} müssen Sie den neuen X-Server noch bekanntmachen. Dazu legen Sie einen symbolischen Link (einen Dateiverweis) an. Der gestartete X-Server heißt immer {\tt X}, Sie müssen also einen Link anlegen vom neuen X-Server zur Datei {\tt X}. Das geschieht z.B. mit dem Befehl {\tt ln -sf XF86_SVGA X}.

Wahrscheinlich können Sie jetzt X11 wieder mit {\tt startx} hochfahren. Sollte sich der X-Server sofort wieder beenden, müssen Sie die Konfiguration jedoch selbst in die Hand nehmen. Diese finden Sie in der Datei {\tt /usr/X11/lib/X11/Xconfig}. Sie sollten zuerst eine neue Auflösung erstellen, die funktioniert und diese dann kopieren und tunen.

Im Gegensatz zum Xlinux liegt bei aktuellen Linux-Distributionen wie S.u.S.E., DLD, Debian etc. ein interaktives Konfigurationsprogramm bei. Dort finden Sie auch neuere X-Server, die aktuelle Grafikkarten besser unterstützen.

Die Konfiguration des X-Servers ist kritisch, achten Sie unbedingt darauf, daß Sie keine Grenzwerte überschreiten und keine unrealistische Werte verwenden.

Die Einstellungen für Tastatur und Maus sowie Pfade zu den Schriften sollten bereits stimmen. Von Interesse sind jetzt die Abschnitte VGA256 (für SVGA-Karten) und ACCEL (für Beschleunigerkarten). Hier ist hauptsächlich die Zeile {\tt Modes} von Interesse, die die zu verwendenden Grafikmodi benennt. Diese versucht der X-Server der Reihe nach darzustellen (nicht darstellbare werden übersprungen). Mit [Ctrl]-[Alt]-[Grau-Plus] bzw. [Grau-Minus] kann zwischen diesen Modi gewechselt werden.

[Textverarbeitung und Ghostview]

Abb. 4: Textverarbeitung und Ghostview

Die Zeile {\tt Virtual} beschreibt die virtuelle Auflösung. Wundern Sie sich nicht, denn wenn Sie einen Grafikmodus mit 640x480 Punkten wählen, jedoch 1MB RAM auf Ihrer Grafikkarte haben, dann kann X11 den restlichen Speicher trotzdem ausnutzen. X11 berechnet in diesem Fall den Grafikbildschirm größer als ihr Monitor tatsächlich ist, Sie sehen also nur einen kleinen Ausschnitt des eigentlichen Bildschirms. Mit der Maus können Sie diesen Ausschnitt in alle vier Richtungen bewegen. Die Zeile {\tt ViewPort} beschreibt die Anfangsposition Ihres Ausschnittes. Diese virtuellen Bildschirme sind übrigens nicht zu verwechseln mit den virtuellen Screens, den viele Fenster-Manager bieten.

Die in der {\tt Modes} referenzierten Grafikmodi werden in einem eigenen Abschnitt {\tt ModeDB} weiter unten beschrieben. Jede Zeile entspricht einem Mode, der eindeutig anhand des Namens (erstes Feld) und der Frequenz (zweites Feld) identifiziert wird. Das dritte Feld besteht aus vier Zahlen, die das horizontale Timing beschreiben. Das vierte Feld beschreibt analog das vertikale Timing. An fünfter Stelle können noch zusätzliche Parameter stehen.

Der Monitor erzeugt aus einer Reihe von Punkten ein Bild. Die Punkte sind von links nach rechts zu Zeilen angeordnet. Die Zeilen wiederum sind von oben nach unten angeordnet und stellen das Bild dar. Die Bildschirmpunkte leuchten, wenn sie vom Elektronenstrahl berührt werden. Damit der Strahl jeden Punkt eine gleiche Zeitspanne lang trifft, huscht er in einem konstanten Muster über den Bildschirm.

Der Elektronenstrahl fängt in der linken oberen Ecke an, läuft über den Bildschirm nach rechts in einer geraden Linie und hält kurzzeitig am rechten Ende an. Danach kehrt er wieder an die linke Seite zurück, jedoch um eine Zeile nach unten versetzt - das ist die horizontale Synchronisation. Dieses Muster wird so oft wiederholt, bis die unterste Zeile erreicht ist. Anschließend wird der Strahl von der unteren rechten Ecke in die linke obere bewegt - die vertikale Synchronisation - und das ganze beginnt von vorne.

Wenn der Elektronenstrahl die ganze Zeit eingeschaltet wäre, würden alle Punkte auf dem Bildschirm erleuchtet werden. Es wäre kein schwarzer Rand vorhanden und das Bild wäre am Rand verzerrt, da der Strahl dort schwer zu kontrollieren ist. Um diesem Problem zu begegnen, werden die Punkte um den Rand nicht erleuchtet, was die Größe des benutzbaren Ausschnittes etwas reduziert. Die Zeit, die der Strahl benötigen würde, um die Ränder zu erleuchten, wird dazu genutzt, ihn wieder zurückzufahren (nach links bzw. nach oben), um neu anzusetzen.

Das erste der vier Felder im horizontalen Timing entspricht der horizontalen Auflösung (z.B. 800 Punkte), also den sichtbaren Punkten. Das zweite Feld beschreibt den Bildschirmpunkt an dem die horizontale Synchronisation beginnt. Das dritte Feld entspricht dem Bildschirmpunkt an dem diese beendet wird und das vierte ist der letzte Punkt der Zeile. Das vertikale Timing ist analog dazu aufgebaut. Alle Zahlen des horizontalen Timings müssen durch acht teilbar sein, gegebenenfalls müssen die Zahlen aufgerundet (nie abgerundet) werden.

[Webbrowser]

Abb. 5: Webbrowser

Um die Zahlen berechnen zu können, benötigen Sie einige Daten über Ihren Monitor: die horizontale und vertikale Synchronisation, die Auflösung, die er darstellen kann. Außerdem werden noch die Größe des Speichers auf der Grafikkarte und unterstützte Frequenzen gebraucht. Diese können Sie vom Quarz auf der Karte ablesen oder durch den Aufruf von {\tt X -probeonly} herausbekommen, 40MHz wäre z.B. eine passable Frequenz. Von diesen hängt das gesamte Timing ab. Jeder Zyklus der Grafikkarte entspricht einem Punkt auf dem Monitor.

Wenn aus dem Handbuch hervorgeht, daß der Monitor 800x600 Punkte unterstützt, dann akzeptiert er 1.33 mal soviel Punkte (=1064) und 1.1 mal soviel Zeilen (=660). Anhand des Speichers auf der Grafikkarte können Sie berechnen, welche Auflösung die Grafikkarte schaffen kann, bei 256 Farben belegt jeder Punkt ein Byte, sie müssen also lediglich die Anzahl der Zeilen mit der Anzahl Punkte pro Zeile multiplizieren und vergleichen.

Hinweis auf Monitor-Zerstörung

Wenn Sie die Modelines selbst berechnen, bedenken Sie unbedingt, daß zu progressiv gewählte Werte den Monitor physikalisch zerstören können. Verwenden Sie nur Werte, die innerhalb der Spezifikation ihres Monitors liegen - niemals höhere Auflösungen etc. Wenn Sie sich nicht sicher sind, nehmen Sie lieber geringere Auflösungen in Kauf - ihr Monitor wird es Ihnen danken.

Wenn der Monitor eine horizontale Synchronisation von 37KHz und die Grafikkarte eine Frequenz von 40MHz hat, dann kann der Monitor minimal 40MHz/37KHz = 1081 Punkte, aufgerundet 1088, in einer Zeile darstellen.

Davon ausgehend, daß die horizontale Synchronisation 3.8 Mikrosekunden dauert, werden die überstrichenen Punkte berechnet. Für einen Bildschirmpunkt werden 1/40000000 Sekunden, also 0.025 Mikrosekunden benötigt. In 3.8 Mikrosekunden werden demnach 152 Punkte vom Elektronenstrahl überstrichen.

Es bleiben also noch 138 Bildschirmpunkte über, diese werden für den linken und rechten Rand genommen. Geteilt und gerundet sind das 68 Punkte für jeden Rand. Die vier Zahlen werden nun wie folgt berechnet:

800 (800+68) (800+68+152) (800+68+152+68)

Der Block sieht also wie folgt aus:

800 868 1020 1088

Das vertikale Timing wird ganz genauso berechnet. Auf der Basis dieses Videomodes können Sie an das Feintuning gehen und ein wenig mit den Zahlen "spielen".

  # The 8-bit colour SVGA driver
  #
  VGA256
    NoSpeedUp
    Virtual 	1024 768
    Viewport	0 0
    Modes		"800x600chip" "640x480" "1024x768"

  # **********************************************************************
  # Database of video modes
  # **********************************************************************
  ModeDB
  # name        clock   horizontal timing     vertical timing      flags
  "640x480"     28.30   640  664  760  800    480  491  493  525
  "800x600"     28.30   800  824  896 1024    600  601  603  625
  "800x600chip" 40.00   800  868 1020 1088    600  603  309  630
  "1024x768"    65     1024 1032 1176 1344    768  771  777  806 -hsync -vsync
Ausschnitt aus der Datei XF86Config

Martin Schulze

Literatur

Quelle: CHIP 12/96