[OpenBSD]

[FAQ-Index] [Zum Kapitel 10 - Systemverwaltung] [Zum Kapitel 12 - Hardware- und plattformspezifische Fragen]

11 - Das X Window System


Inhaltsverzeichnis


11.1 - Einführung in X

Das X Window System (manchmal nur »X« oder fälschlicherweise »X Windows« genannt) ist die Umgebung, die Grafikanwendungen unter OpenBSD und anderen Unix-basierten Systemen benötigte Funktionen anbietet. X selbst stellt aber nur wenig bereit: Man muss ebenfalls einen »Window Manager« haben, um eine Benutzerschnittstelle zu schaffen. Das meiste der sogenannten »Personality« von X wird vom Windowmanager ausgehen statt von X selbst. OpenBSD wird mit einer freien Version des Windowmanagers fvwm(1) ausgeliefert. Wenn du möchtest, kannst du auch einen der anderen Windowmanager verwenden, die als Packages bereitgestellt werden. Verwende das Suchwort »window manager«, um eine Liste der vielen verfügbaren Windowmanager zu erhalten.

X wird als »Client-Server«-strukturiertes Protokoll aufgefasst, obwohl die Terminologie manchmal etwas verwirrend ist. Der Computer, der die Grafik auf dem Bildschirm anzeigt, ist der »X-Server«. Die Anwendung, die dem X-Server mitteilt, was auf dem Bildschirm angezeigt werden soll, ist der »X-Client«, selbst wenn es sich hierbei um einen leistungsstärkeren Computer in einem Rechenzentrums handelt. Dieses Modell kann genutzt werden, um rechenintensive Anwendungen (X-Clients) auf sehr leistungsstarken Maschinen auszuführen, die den X-Server als Benutzerschnittstelle verwenden, der auf einer kleinen und stromsparenden Maschine auf deinem Schreibtisch läuft.

Es ist möglich, X-Clients auf einem System auszuführen, das über keine grafische Ausgabemöglichkeit verfügt. Man könnte zum Beispiel eine Anwendung (den X-Client) auf einer mvme88k ausführen und die Ausgabe auf einem Bildschirm einer Alpha anzeigen lassen (der X-Server). Da X ein klar definiertes und plattformübergreifendes Protokoll ist, ist es sogar möglich, eine X-Anwendungen auf einer (beispielsweise) Solaris-Maschine auszuführen und auf einer OpenBSD-Maschine anzeigen zu lassen.

Der Client und der Server können auch auf dem gleichen System laufen. Im Rest dieses Kapitels gehen wir hiervon aus.

11.1.1 - Wieviel Rechenleistung benötige ich, um X verwenden zu können?

X selbst ist ein recht großes Programm, sodass ein schneller Rechner bestens geeignet ist, wenn du es regelmäßig an- und ausstellst. Wenn es aber erst einmal läuft, dann reicht auch ein sehr bescheidener Rechner. Um stotternde Bildschirmausgaben zu verhindern, musst du auf einigen Plattformen sogar auf X zurückgreifen. Solche Plattformen, zu denen auch sparc und sparc64 gehören, wurden für eine grafische Oberfläche entworfen, sodass die Konsole selbst nur sehr schlechte Resultate liefert.

Soweit zur Grundlage. X wird normalerweise gestartet, um X-Anwendungen aufrufen zu können. Einige X-Applikationen sind sehr genügsam, andere scheinen sich hingegen alle Rechenleistung und verfügbaren RAM unter den Nagel zu reißen. Selbstverständlich gibt es auch Leute, die X verwenden, um eine große Anzahl xterm(1)s aufzurufen - hierfür reicht auch sehr schlichte Hardware.

11.1.2 - Kann ich auch Grafiken ohne X verwenden?

Angenommen dir genügen ASCII-Grafiken nicht, so musst du auf eine Art von Framebuffer-Konsolentreibern zurückgreifen. Einige Betriebssysteme stellen diese zur Verfügung, doch gibt es momentan keine für OpenBSD. Unter den Entwicklern hat auch niemand großes Interesse daran.

11.2 - Konfiguration von X

Die Konfiguration von X unterscheidet sich deutlich zwischen den einzelnen Plattformen. In allen Fällen gibt es aber Anleitungen und andere plattformspezifische Informationen in /usr/X11R6/README, die auf einem installierten System vorgefunden werden kann.

Viele Plattformen benötigen den X-Aperturetreiber xf86(4), der direkten Zugriff auf den Speicher und die Ein-/Ausgabeports des VGA-Boards und der PCI-Konfigurationsregister ermöglicht, was für die X-Server eine Voraussetung ist. Dieser Treiber muss aktiviert werden, bevor er genutzt werden kann - entweder indem mit »Yes« auf die Frage

Do you expect to run the X window System [no]
geantwortet wird (diese ist während der Installation zu sehen) oder indem man machdep.allowaperture in der /etc/sysctl.conf auf einen der Plattform entsprechenden Wert setzt (dieser darf nicht 0 sein) und neustartet, da diese Sysctl aus Sicherheitsgründen nach dem Bootvorgang nicht mehr geändert werden kann. Die Verwendung des Treibers zieht Sicherheitsbedenken nach sich. Du solltest ihn nicht aktivieren, wenn du nicht unbedingt auf ihn angewiesen bist.

11.2.1 - alpha

/usr/X11R6/README für alpha.

Setze machdep.allowaperture=1 in /etc/sysctl.conf.

Die TGA- und einige VGA-Karten werden unterstützt. Es sollte keine weitere Konfiguration notwendig sein.

11.2.2 - amd64

/usr/X11R6/README für amd64.

Setze machdep.allowaperture=2 in /etc/sysctl.conf.

X wird auf amd64 meist erfolgreich automatisch konfiguriert, so dass in den meisten Fällen keine weitere Konfiguration notwendig ist. Sollte weitere Konfiguration benötigt werden, rufe X -configure wie weiter unten beschrieben auf.

11.2.3 - armish

Es stehen keine X-Server bereit, nur X-Clients.

11.2.4 - hp300

/usr/X11R6/README für hp300.

11.2.5 - hppa

Es stehen keine X-Server bereit, nur X-Clients.

11.2.6 - i386

/usr/X11R6/README für i386.

Setze machdep.allowaperture=2 in /etc/sysctl.conf.

Aufgrund der unglaublich vielen verfügbaren Grafikkarten, Mäusen, Tastaturen und anderer Hardware kann die Konfiguration auf einem i386-System recht abenteuerlich sein. Abenteuerlich genug, um diesem Thema eine separate Sektion zu widmen.

Zum Glück ist es meist gar nicht so schlimm wie es im ersten Augenblick scheint - in vielen Fällen »funktionierts einfach«, wenn man »startx« eingibt. In diesen Fällen wird deine Hardware erfolgreich erkannt und ausgewertet; X läuft ohne Probleme.

11.2.7 - landisk

Es stehen keine X-Server bereit, nur X-Clients.

11.2.8 - luna88k

Es stehen keine X-Server bereit, nur X-Clients.

11.2.9 - mac68k

/usr/X11R6/README für mac68k.

Mac68k-Systeme »funktionieren einfach« mit X, sodass keine Konfiguration benötigt wird.

Maus: Die standardmäßige Macintosh-Maus hat nur eine Taste. Dies stellt ein Problem dar, denn X geht von einer Dreitasten-Maus aus. Einige Mäuse von Drittanbietern haben eine zweite Taste, die auch mit X funktioniert. Falls dies nicht möglich ist, wirf einen Blick auf die Xmac68k(1)-Seite für weitere Informationen über die Emulation von Maustasten.

11.2.10 - macppc

/usr/X11R6/README für macppc.

Setze machdep.allowaperture=2 in /etc/sysctl.conf.

Unterstützte Macintosh-PPC-Systeme können auf zwei unterschiedliche Weisen verwendet werden: »beschleunigt« oder »Framebuffer« (unbeschleunigt).

Im »Framebuffer«-Modus wird das System mit 8 Bits pro Pixel arbeiten und die Videoauflösung wird von der Macintosh-Umgebung geregelt. Das bedeutet, dass du eine kleine MacOS-Partition auf deiner Platte belassen möchtest, um von dort aus diese Einstellungen anzupassen. Dieser Modus hat den Vorteil, dass er »einfach funktioniert«, doch kann es frustrierend einschränkend sein (zum Beispiel setzt eine Änderung der Auflösung einen Boot von MacOS voraus).

Wenn dein Macintosh ein ATI-basiertes Videosystem hat, kannst du es mit einem beschleunigten X-Server verwenden. Dieser liefert bessere Geschwindigkeiten und mehr Kontrolle in deiner OpenBSD-Umgebung. Die NVIDIA-Grafikkarten einiger macppc-Systeme werden auch in vielen Fällen funktionieren. Die README-Datei beinhaltet Details über die Konfiguration des beschleunigten Treibers - verwende erst einmal die Beispieldatei dort.

Während die README-Datei detailiert auf die Verwendung der Standardmaus von Apple mit nur einer Taste unter X eingeht, wird dir dringend dazu geraten, dir einfach eine USB-Maus eines Drittanbieters zu kaufen - es sei denn, du verwendest einen Laptop.

11.2.11 - mvme68k

Es stehen keine X-Server bereit, nur X-Clients.

11.2.12 - mvme88k

Es stehen keine X-Server bereit, nur X-Clients.

11.2.13 - sgi

Es stehen keine X-Server bereit, nur X-Clients.

11.2.14 - sparc

/usr/X11R6/README für sparc.

Mit nur einem unterstützten Framebuffer wird keine Konfiguration benötigt. Wenn du eine Multihead-Konfiguration verwenden möchtest, wirf einen Blick auf die zuvor genannte README-Datei für weitere Details.

Die Auflösung wird von der Firmware eingestellt, bevor OpenBSD bootet.

11.2.15 - sparc64

/usr/X11R6/README für sparc64.

Unter diesen Maschinen gibt es viele Variationen, sodass du wissen musst, welchen Bustyp dein System verwendet (PCI oder SBus), an welcher Schnittstelle deine Maus angeschlossen ist (zstty, com oder USB/PS2) und welche Grafikkarte du hast. Beginne mit der xorg.conf-Datei in der README. Modifiziere sie entsprechend deiner Hardware und deinen Bedürfnissen. Erwarte nicht, dass die Beispieldatei ohne Anpassung auf deiner Maschine läuft!

11.2.16 - vax

/usr/X11R6/README für vax.

Der X-Server funktioniert momentan nur auf VAXstation-4000-Modellen mit einem lcg(4)- oder lcspx(4)-Framebuffer.

11.2.17 - zaurus

/usr/X11R6/README für zaurus.

Es wird keine Konfiguration benötigt, X »funktioniert einfach«.

11.3 - Konfiguration von X auf amd64 und i386

Aufgrund der großen Hardwareauswahl für diese Plattformen ist die Konfiguration recht »knifflig«.

11.3.1 - Konfiguration von X.Org

X.Org hat erhebliche Verbesserungen vorgenommen, sodass ihre Server »einfach funktionieren«. In vielen Fällen funktioniert es sogar ohne /etc/X11/xorg.conf-Datei. Aber leider nicht immer - und manchmal muss man Dinge trotzdem anpassen.

Es gibt zwei Programme, die für eine pseudo-automatische Erstellung der Konfigurationsdatei für X.Orgs i386-X-Server genutzt werden können. Leider gibt es für keines der beiden Programme Garantie, dass eine einsetzbare xorg.conf-Datei erzeugt wird.

Zusätzlich zu den genannten Anwendungen gibt es eine weitere zeitaufwendige Methode, X zu konfigurieren: Verwende eine Suchmaschine deiner Wahl und sieh nach, ob jemand anderes bereits dein Problem gelöst hat. Obwohl dies keine so schlechte Idee ist, wird auf diese Methode nicht weiter eingegangen.

11.3.2 - Unsere Beispielmaschine

Als Demonstration, wie man X einrichtet, werden wir ein altes System mit einem Celeron 400 MHz und einem AGP-Steckplatz verwenden. Bei der Grafikkarte handelt es sich um eine alte AGP-Karte, die wie folgt in der Dmesg aufgelistet wird:
vga1 at pci1 dev 0 function 0 "3DFX Interactive Banshee" rev 0x03
Dies war einmal eine Highend-Grafikkarte mit 16 MB RAM, doch wird sie heutzutage von »gängigen« Betriebssystemen fast nicht mehr unterstützt. Des Weiteren wird ein Sony Multiscan G400 19" CRT als Monitor angeschlossen. Es wäre schön, wenn dieser Monitor bei einer Auflösung von 1280x1024, einer angenehmen Bildwiederholrate und 24 Bit Farbtiefe genutzt werden kann.

Nachdem OpenBSD mit X installiert wurde (wir haben sichergestellt, dass der Aperturetreiber im Kernel aktiviert wurde) werfen wir zuerst einen Blick auf die automatische Erkennung und Konfiguration von X.Org - vielleicht haben wir Glück. So, wir loggen uns einfach ein und rufen startx(1) auf. Der Bildschirm wird für ein paar Momente schwarz, dann erhalten wir den »Schachbrett«-Hintergrund von X, den »X«-Cursor und ein xterm-Fenster.

Es funktioniert!

Mehr oder weniger. Obwohl das System voll einsatzfähig ist, scheint es keine Funktionalitäten des Monitors erkannt zu haben und läuft auf einer eindeutig zu niedrigen Auflösung (640x480). Wir hoffen mal, dass wird das noch besser hinbekommen - damit meine ich sehr viel besser. Das heißt also, dass wir unsere eigene xorg.conf-Datei erstellen müssen.

Wir verwenden die »X -configure«-Methode, um eine Grundlage für unsere xorg.conf-Datei zu schaffen. Du musst folgenden Befehl als root ausführen:

# X -configure [...] Your xorg.conf file is /root/xorg.conf.new To test the server, run 'X -config /root/xorg.conf.new'
Im Übrigen muss die Meldung ernstgenommen werden - verwende den vollständigen Pfad zu deiner xorg.conf.new-Datei, selbst wenn du dich im gleichen Verzeichnis befindest. Wenn du dies nicht machst, dann wird X(7) die Datei nicht finden und ohne weiteren Kommentar die Standardkonfiguration verwenden, die nicht im Geringsten etwas mit deiner aktuell bearbeiteten Konfiguration zu tun haben muss. Dies kann die Fehlersuche später deutlich vereinfachen. Vertrau uns einfach.

Wir führen also aus, was uns gesagt wird:

# X -config /root/xorg.conf.new
Alles was wir kriegen ist ein schwarzes Bild. Dabei hat es so gut angefangen ...

Nun ist ein guter Zeitpunkt gekommen, um über die unterschiedlichen Möglichkeiten zu sprechen, X zu beenden, wenn es auf diese Weise gestartet wurde. Nach Vorzug sortiert sind es:

Zum Glück verrichtet STRG-ALT-Backspace erfolgreich seine Dienste und wir befinden uns wieder in der Kommandozeile. Nun müssen wir herausfinden, was fehlgeschlagen ist. Zuerst sollten wir nachsehen, was Xorg über die Hardware denkt. Das können wir in der Datei /var/log/Xorg.0.log nachlesen. In diesem Fall denkt X, dass alles einwandfrei läuft - keine offensichtlich schwerwiegenden Fehler werden in der Logdatei aufgeführt (Zeilen, die mit »EE« beginnen, sind Fehler).

An dieser Stelle kommt unser Wissen über die Hardware ins Spiel. Wenn wir das System an einen anderen Monitor anschließen, während ein schwarzes Bild angezeigt wird, gibt er uns eine »Sync. out of Range«-Meldung auf dem Bildschirm aus. Offensichtlich scheint die Konfiguration von X nicht mit diesem Monitor zu funktionieren. Eventuell läuft diese Konfiguration auf KEINEM Monitor, wenn ein Videomodus ausgewählt wurde, der mit der Karte nicht zusammen funktioniert (beachte bitte, dass X sich am Chip auf der Karte und dessen Leistung orientiert - nicht daran, wie der Hersteller die Komponenten zusammengestellt hat). Unterschiedliche Monitore werden verschieden reagieren, wenn die Rate falsch ist. Einige werden versuchen, das Bild anzuzeigen, andere werden in den Energiesparmodus wechsel, andere schreckliche Geräusche von sich geben und wieder andere werden hilfreiche Meldungen auf dem Bildschirm angeben. Dieser Bildschirm scheint zu keiner der zuvor genannten Arten gehören. Wir merken uns einfach, diesen Monitor NIE wieder für grundlegende X-Konfigurationen zu verwenden.

Während wir durch die erstellte xorg.conf.new-Datei gehen, sehen wir folgenden Eintrag:

Section "Monitor" #DisplaySize 370 270 # mm Identifier "Monitor0" VendorName "SNY" ModelName "SONY CPD-G400" ### Comment all HorizSync and VertSync values to use DDC: HorizSync 30.0 - 107.0 VertRefresh 48.0 - 120.0 Option "DPMS" EndSection
Zum Testen werden wir einen DDC-Monitor (»Data Display Channel« - damit kann der Monitor dem Computer und der Grafikkarte mitteilen, wozu er in der Lage ist) verwenden und sehen, was geschieht. Dieses Mal erhalten wir wieder das Schachbrettmuster von X und einen beweglichen Cursor. Das ist alles, was wir von X erwarten, wenn wir es so aufrufen (wir beenden X mit dem STRG-ALT-Backspace-Trick von vorhin). Es ist (wieder) eine niedrige Auflösung, doch es funktioniert. Wir können also davon ausgehen, dass wir ein Raten- und Auflösungsproblem haben. Wir werden zuerst die »HorizSync«- und »VertRefresh«-Zeilen wiederherstellen, da wir die Spezifikationen des Monitors im Internet gefunden und überprüft haben.

Wir werden nun versuchen, Xorg auf eine bestimmte Auflösung zu trimmen und zu sehen, ob wir damit Glück haben. In Section "Screen" der xorg.conf-Datei werden wir ein paar Zeilen hinzufügen, die hier fettgedruckt sind:

Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 1 EndSubSection SubSection "Display" Viewport 0 0 Depth 4 EndSubSection SubSection "Display" Viewport 0 0 Depth 8 EndSubSection SubSection "Display" Viewport 0 0 Depth 15 EndSubSection SubSection "Display" Viewport 0 0 Depth 16 EndSubSection SubSection "Display" Viewport 0 0 Depth 24 Modes "1280x1024" EndSubSection EndSection
Diese beiden Änderungen teilen X mit, dass wir eine Farbtiefe von 24 Bit verwenden möchten und für 24 Bit Farbtiefe eine Auflösung von 1280x1024. Da keine andere Auflösung unter »Depth 24« aufgelistet ist, wird das System dazu gezwungen sein, diese Auflösung zu verwenden.

Wir testen die neue Konfiguration und ... ERFOLG! Wir scheinen ein schönes und hoch auflösendes Display zu besitzen. Beachte, dass wir NUR ein Schachbrettmuster (das sehr gut geeignet ist, um die Qualität deines Bildschirms zu prüfen und um LCDs zu kalibrieren [»root weave«]) und einen beweglichen Cursor erwarten. An diesem Punkt erwarten wir noch keine voll einsatzfähige Oberfläche.

Nun werden wir die xorg.conf-Datei installieren, sodass wir den alltäglichen Aufruf von X testen können.

# cp xorg.conf.new /etc/X11/xorg.conf
Wir können nun versuchen, X mit dem normalen startx(1)-Kommando zu starten. Es funktioniert!

Es wäre auch nicht schlecht, zu überprüfen, ob es sich wirklich um die Auflösung und Farbtiefe handelt, die wir angestrebt haben. Das ganze soll selbstverständlich auch mit einer angenehmen Bildwiederholrate angezeigt werden. Wir können dies mit den Kommandos xrandr(1) und xdpyinfo(1) überprüfen. Neben anderen Informationen liefert xdpyinfo(1):

[...] screen #0: print screen: no dimensions: 1280x1024 pixels (433x347 millimeters) resolution: 75x75 dots per inch depths (7): 24, 1, 4, 8, 15, 16, 32 root window id: 0x44 depth of root window: 24 planes [...]
Die Antwort ist also »ja, wir verwenden 1280x1024 mit einer Tiefe von 24 Ebenen (Bits).«

Folgende Ausgabe liefert xrandr(4):

SZ: Pixels Physical Refresh *0 1280 x 1024 ( 433mm x 347mm ) *85 75 60 1 1280 x 960 ( 433mm x 347mm ) 85 60 [...]
Das sagt uns, dass wir mit einer Bildwiederholrate von 85 Hz arbeiten. Die meisten Anwender empfinden dies als eine sehr angenehme Einstellung.

11.3.3 - Was ist, wenn es nicht so »einfach« ist?

Manchmal passen Dinge einfach nicht zusammen. Hier sind ein paar Tipps.

11.4 - X starten

Es gibt zwei übliche Wege, X auszuführen:

11.4.1 - nach Bedarf:

Melde dich wie gewöhnlich an einer Konsole an und führe dann startx(1) aus.

11.4.2 - boote direkt in X:

Dies wird mit xdm(1) realisiert, dem X Display Manager. xdm(1) wird als root ausgeführt (normalerweise über rc) und zeigt einen Anmeldeprompt an. Nach erfolgreicher Anmeldung wird eine X-Sitzung für diesen Benutzer erstellt. Wenn diese X-Sitzung beendet werden soll (zum Beispiel über STRG-ALT-Backspace), wird xdm(1) wieder die Kontrolle übernehmen und den Benutzer erneut nach seinen Anmeldedaten fragen. Aus diesem Grund sollte xdm(1) NICHT von /etc/rc.conf.local aus aufgerufen werden, bis du dir sicher bist, dass X so läuft wie du es dir gedacht hast - ansonsten wird deine Maschine sehr schlecht zu warten sein! (Schlimmster Fall: Boote in den Singleuser-Modus als hättest du dein Passwort vergessen und editiere die xdm_flags-Zeile deiner /etc/rc.conf.local-Datei.)

Auf einigen Plattformen musst du das für die Konsolen zuständige getty(8) deaktivieren, um xdm(1) starten zu können.

[FAQ-Index] [Zum Kapitel 10 - Systemverwaltung] [Zum Kapitel 12 - Hardware- und plattformspezifische Fragen]


[back] www@openbsd.org
$OpenBSD: faq11.html,v 1.28 2008/01/06 13:57:19 tobias Exp $