X11 - Auflösung und Farbmodus
Da sich der 10. Stammtisch der CLUG mit Bildbearbeitung unter Linux
befaßt, soll dieser Vortrag eine kurze Einführung zur
Konfiguration geeigneter Auflösungen und Farbmodi unter X11
geben.
Er gliedert sich in folgende Abschnitte:
- Prinzipielle Funktionsweise der Grafikkarte
- Grundkonfiguration von X11 mit XF86Setup
- Einstellen des Farbmodus
Prinzipielle Funktionsweise der Grafikkarte
Wie gelangt das Bild aus dem Bildspeicher auf den Monitor?
- Der Prozessor legt alle Bildinformationen zunächst im
RAM der Grafikkarte ab. Dabei wird jeder Bildpunkt durch eine
bestimmte Anzahl von Bit dargstellt, abhängig von der
Farbauflösung
- Der RAM wird zyklisch von einem als RAMDAC bezeichneten Baustein
ausgelesen. Dabei steht RAMDAC für
Random Access Memory / Digital - Analog Converter.
Die Hauptaufgabe des RAMDAC ist es, die
digital vorliegenden Bildinformationen in analoge Signale zu wandeln.
Bei einer Auflösung von 1024x768 Bildpunkten und einer
Bildwiederholfrequenz von 75 Hertz muß der RAMDAC immerhin
1024x768x75 (ca. 59 Mio) Bildpunkte pro Sekunde umsetzen.
Der RAMDAC ist auch für die Erzeugung der verschiedenen Farben
zuständig. Dabei unterscheiden wir verschiedene Farbmodi:
Modus | bpp | Palette | Erläuterung |
Monochrom | 1 | keine | Ein Bit - ein
Bildpunkt |
VGA | 4 | (kann) | gleichzeitig 16
Farben |
Pseudocolor | 8 | ja | gleichzeitig 256 aus
262144 möglichen Farben
Farben |
Highcolor | 15/16 | keine | 32768 bzw. 65536
Farben |
Truecolor | 24/32 | keine | 16,7 Mio
Farben |
Hier sind noch einige Anmerkungen angebracht:
- bpp steht für Bit per Plane (Bit pro Farbebene)
- Die einzige gängige Auflösung, die eine Farbpalette
verwendet, ist der 8-bpp-Modus. Die Palette wird im RAM-Teil des
RAMDAC gespeichert.
- Im 16-bpp-Modus wird keine Palette benutzt. Es stehen 5 bit
für rot, 6 bit für grün und 5 bit für blau zur
Verfügung. Die Grünauflösung wurde deshalb
größer gewählt, weil das menschliche Auge auf
Farbnuancen in diesem Bereich am empfindlichsten reagiert.
- Da der 16-bpp-Modus asymetrisch ist, kann es zu Farbstichen
kommen. Das tritt besonders bei der Bearbeitung von Graustufenbildern
hervor. In diesem Fall ist es unter Umständen günstiger, auf
das eine Bit zu verzichten und alle drei Farbanteile mit 5 Bit
darzustellen (15-bpp-Modus).
- Sowohl im 24-bpp- als auch im 32-bpp-Modus werden maximal 16,7 Mio
Farben dargestellt. Die Truecolor-Modi stellen extreme Anforderungen
an die Bandbreite des Speicherbusses. Bei 1024x768 und
32-bpp-Truecolor müssen 236 MByte pro Sekunde gelesen werden, um
75 Hertz zu schaffen. Im 32-bpp-Modus wird ein Byte pro Pixel
zugunsten einer schneller lesbaren Speicherausrichtung an
32-bit-Grenzen geopfert.
-
Karten, die Truecolor auch in größeren Auflösungen
beherrschen, verwenden VRAM oder WRAM. Diese RAM-Varianten sind
dual-ported, das heißt, der RAMDAC kann Daten lesen,
während der Prozessor auf der anderen Seite welche reinschreibt.
Bei billigeren Karten findet man RAM oder EDO-RAM, in diesem Fall
müssen sich Prozessor und RAMDAC die Speicherbandbreite teilen.
- Gleichzeitig werden durch einen anderen Baustein der Karte die zur
Monitorsteuerung benötigten Synchronisationssignale erzeugt.
- Synchronisationssignale und Bildinformationen müssen
natürlich miteinander harmonmieren - deshalb werden beide
Bausteine von einem Taktgeber versorgt. Auf älteren Karten ist
dieser mit Quarzen und Frequenzvervielfachern bzw. -teilern
realisiert, so daß nur eine ganz bestimmte Anzahl fester
Frequenzen zur Verfügung steht. Auf neueren Karten gibt es einen
programmierbaren Clockchip, der den benötigten Takt liefert.
- Um den ganzen Vorgang steuerbar zu machen, gibt es auf jeder
Grafikkarte einen zentralen Baustein mit eigener Logik und diversen
Registern, die sich von der CPU aus durch I/O-Befehle setzen lassen.
Dieser Baustein definiert weitgehend das logische Verhalten der Karte.
Bei billigeren Systemen findet man häfig integrierte Bausteine,
die Clockchip und Logikeinheit oder sogar den RAMDAC beinhalten (z.B.
S3 Trio64).
Grundkonfiguration von X11 mit XF86Setup
Noch vor zwei Jahren war die Konfiguration eines geeigneten Videomodus
eine haarige Angelegenheit - man mußte sich eine Datei
XF86Config von Hand zusammenbasteln oder auf die Künste eines
anderen mit eine möglichst identischen Hardwarekonfiguration
vertrauen.
Bereits mit dem textorientierten Werkzeug xf86config wurde diese
Situation entscheidend entschärft. Seit den späten
Beta-Versionen von Xfree86 3.1 gibt es das komfortable
Konfigurationstool XF86Setup.
XF86Setup benötigt den X-Server für den Standard-VGA-Modus
XF86_VGA16 und eine Grafikkarten-Monitor-Kombination, die Standard-VGA
darstellen kann. Man ruft XF86Config als root von der Linux-Console
aus auf.
Als erstes muß man sich eine funktionierende Mauskonfiguration
bauen. Hat man ein Winzigweich-kompatibles Krabbeltier, so
funktioniert die Standardbelegung. Ansonst kann man das Maus-Protokoll
mit der Taste "p" wechseln. Dann drückt man noch die Taste "a"
für "apply" - und schon sollte das Tierchen funktionieren.
Für die Konfiguration von Karte und Monitor sollte man unbedingt
deren technische Daten griffbereit haben. Vor allem ältere
Monitore kann man durch Eingabe zu hoher Grenzwerte kaputtmachen.
Leider steht bei vielen Karten die Bezeichnung von Clockchip und
RAMDAC nicht in der mitgelieferten Dokumentation. In diesem Fall hilft
es meist, die Kiste aufzuschrauben und auf die Bezeichnung der
Schaltkreise zu schauen. Der RAMDAC ist meist ein größerer
vielbeiniger Käfer in der Nähe des RAMs, der Clockchip
befindet sich meist in der Nähe eines oder mehrerer Quarze.
Ich verzichte auf eine Darstellung, wie man wohin klicken sollte. Die
Oberfläche von XF86Setup sollte selbsterklärend sein.
Nach dem Klick auf den Button "Done" im letzten Dialog wird eine
XF86Config erstellt und der X-Server gestartet. Sollte der Bildschirm
schwarz bleiben, so kann man mit Ctrl-Alt-Backspace X beenden. Falls
dann auch der Textmodus unlesbar bleibt, kann man immer noch blind
"reboot" eintippen. Falls der Monitor aus der Synchronisation geraten
sollte, muß man X schleunigst wieder beenden und alle Angaben
nochmal gründlich überdenken.
Normalerweise sollte jedoch X ordentlich starten. XF86Setup bietet
jetzt noch an, xvidtune aufzurufen. Damit kann man noch das Bild
justieren.
Einstellen des Farbmodus
Nach der Grundkonfiguration wird X standardmäßig im
Pseudocolor-Modus gestartet. Andere Farbmodi erreicht man durch
folgende Methoden:
- Aufruf von startx mit Angabe der Farbtiefe. startx erwartet zuerst
Optionen für die zu startenden X-Clients (z.B. wenn man keine
.xinitrc hat) und dann, getrennt durch einen doppelten Bindestrich,
Optionen für den X-Server. Entsprechende Aufrufe sehen also so
aus:
startx -- -bpp 16
für Highcolor mit 16 Bit per Plane, oder
startx -- -bpp 32
für Truecolor
- Startet man X immer mit einer höheren Farbauflösung, so
kann man die Optionen für den X-Server in eine Datei .xserverrc
im Homeverzeichnis stellen. Diese könnte so aussehen:
#!/bin/sh
exec X -bpp 15
- Schließlich kann man in neueren XFree86-Versionen die
Standard-Auswahl der Farbtiefe ändern, indem man in die Sektion
"Screen" unmittelbar vor der ersten Untersektion "Display" einen
Eintrag der Form
DefaultColorDepth 16
vornimmt. Der Ausschnitt aus der Datei sieht dann also etwa so aus
(z.B. für meine S3 Trio 64):
Section "Screen"
Driver "Accel"
Device "Primary Card"
Monitor "Primary Monitor"
DefaultColorDepth 16
SubSection "Display"
Depth 8
Modes "800x600" "640x480" "1024x768"
EndSubSection
Achtung - es gibt sehr wahrscheinlich mehrere Sektionen "Screen". Man
muß sich diejenige heraussuchen, die dem in XF86Setup
ausgewählten X-Server entspricht.
Page created by Frank Richter,
frichter@truckle.in-chemnitz.de