Home

News

Artikel

Produkte

Stickers

UserGroups

Events

Bücher


Suchen:



Jetzt bestellen!
> Kombiabo
> Jahres-CD 1999

Workstation-Monitor am PC mit Linux

Bastelstunde

von Andreas Bohne


Der Bericht beschreibt, wie man einen ausgedienten SGI-Monitor am PC betreiben kann. Für das korrekte Funktionieren der Schaltung wird allerdings keine Verantwortung übernommen!

Nachdem bei uns eine alte SGI-Workstation das Zeitliche gesegnet hatte (Friede ihrem Silizium) blieb nur noch der SGI-Monitor über. Das gute an SGI Workstsations ist neben der Graphik-Engine auch der Monitor, selbst bei Workstations, mit denen man keine Dinos berechnet will. Also warum nicht einen Monitor mit einigen Zoll (in der Bildschirmdiagonalen) mehr unter Linux betreiben. Ein Adapterkabel, das den VGA zu RGB, HSync und VSync aufzweigt, war schnell zur Hand - aber warum hat der Monitor nur vier Eingänge (RGB und HS)? Ein Blick in das Manual zerstreute den letzten Tropfen Hoffung, den Monitor direkt mit dem PC verbinden zu können - der Monitor erwartet das Zeilensynchronisationssignal auf dem Grün-Signal. In der Fachsprache "Sync on Green" genannt.

Abb. 1: Fahrplan
1) Schaltung aufbauen (und testen).
2) Monitordaten bestimmen [1][2].
3) Erste Einstellungen der /etc/XF86Config mittels xconfig.awk oder Modeline-Tool bestimmen.
4) Probieren bis der Monitor synchronisiert.
5) Eventuell weitere Mode raten.
6) Finetuning mittels xdivtune.
7) Bootwert in der /etc/inittab von 2 auf 3 setzen.

Wer jedoch 10DM über hat, einen Lötkolben zur Hand und ein wenig Mut sowie Geduld besitzt, kann sich binnen einer 1/2 Stunde eine Schaltung zusammenlöten, die beide Synchronisationssignale (Vertikal- uns Horizontalsynchronisation) miteinander verknüpft und mit dem Grünsignal verbindet. Die Schaltung verknüpft die beiden Synchronisationssignale durch eine Exklusiv-Oder (XOR)-Funktion. Der Ausgang steuert einen Transistor, der bei einem high-Signal des XOR-Ausganges das Grünsignal des Monitors vonMasse zieht.

Abb. 2: Liste der Bauteile
1 Lochrasterplatine (mit Leiterbahnen)
3 BNC Stecker
1 BNC Buchse
1 IC-Sockel mit 14 Pins
1 74LS86 (besser 74F86)
1 VN10KM oder MPF910 oder 2SK30A Mosfet
1 1k Drehpoti
3 47K Widerstäde

Koaxkabel
1 7805 (5V Spannungsregler), wer keine 5V hat
1 VGA zu RGB+HS+VS Kabel
Gibt es in jedem gutsortierten Computerladen.

Abb. 3: Schaltung "Sync on Green"

Abb. 4: Verschiedene Bauteile im Überblick

7805

MosFet

74LS86 XOR-Gatter

Abb. 5: Layout für die Leute, die gerne Platinen ätzen

Damit ist der Hardwareteil fertig, und wenn man keinen Fehler im Aufbau der Schaltung gemacht hat, kann man sich an den Softwareteil begeben - die Konfiguration der XF86Config-Datei (steht unter /etc). Ab hier kommt der Mut und die Geduld ins Spiel. Mut insofern, als manche Festfrequenzmonitore es vorziehen, einen nie wieder anzuschauen, wenn man sie mit einer zu hohen Frequenz ansteuert. Doch nur Mut, man muß ja nicht gleich eine vertikale Synchronisation (VS) von 90 Hertz versuchen. Im Internet gibt es diverse Seiten mit Datenblättern über die verschiedenen Monitortypen [1] und [2]. Anhand der Beschreibungen auf den Web-Seiten kann man schnell feststellen, welche Frequenz der Monitor verträgt, wenn das Handbuch des Monitors zu diesem Thema schweigt.


Abb. 6: SGI-Monitor

Die heutigen Graphikkarten sind weniger das Problem, da sie hohe Dot-Clock-Frequenzen (DFC) gut vertragen. Die Graphikkarte sollte eine DCF von 190 erlauben, Frequenzen frei programmieren können und über mind. 2MB Graphikspeicher verfügen. Mehr ist zu empfehlen, da man mit 2 MB gerade mal 8 Bit Farbtiefe bei einer Auflösung von1280x1024 realisieren kann. Für die Erzeugung eines gültigen Modeline-Eintrages kann man diverse Programme benutzen (siehe z.B. Abb. 7).

Abb. 7: xconfig.awk-Script

# xconfig.awk - awk script for calculating Xconfig parameters for
# XFree86, given the monitor specs and dot clock frequencies.
# The default values are for the Viewsonic 15.
#
# Example Usage:
#    awk -f xconfig.awk HR=1024 VR=768 DCF=110 < /dev/null (or ^D input)
#
# The variable names and meanings are given below.
#
# Author: Richard Brown rab@tauon.ph.unimelb.edu.au
#

BEGIN{

   # Sensible defaults if not specified:
   #
   # angepasst fuer ADI MicroScan 4A

#   HR = 1024     # Horizontal Resolution
#   VR =  768     # Vertical   Resolution
#   DCF = 65.0    # Dot Clock Frequency (MHz)

   HFrontMIN = 0.50   # Horizontal Front Porch Minimum (us)
   HsyncMIN  = 1.20   # Horizontal Sync Pulse Width Minimum (us)
   HBackMIN  = 1.25   # Horizontal Back Porch Minimum (us)
   HBlankMIN = 4.00   # Horizontal Blank Period Minimum (us)
   HSFMAX    = 60 # 56.0   # Max Horizontal Scan Frequency (kHz)
   # HSFMAX    = 35.2 # 56.0   # Max Horizontal Scan Frequency (kHz)

   VFrontMIN =   0.0  # Vertical Front Porch Minimum
   VsyncMIN  =  45.0  # Vertical Sync Pulse Width Minimum
   VBackMIN  = 500.0  # Vertical Back Porch Minimum
   VBlankMIN = 600.0  # Vertical Blank Period Minimum
   VSFMAX    =  90 # 100.0  # Max Vertical Scan Frequency (Hz)

   verbose = 0
}

END{

   # Horizontal Scan Lines:

   Hfront = HFrontMIN * DCF + HR
   if( Hfront%8 ) Hfront = 8 * (1 + int(Hfront/8) )
   # if( (Hfront - HR) < HFrontMIN * DCF ) Hfront += 8

   Hsync = HsyncMIN * DCF + Hfront
   if( Hsync%8 ) Hsync = 8 * (1 + int(Hsync/8) )

   Hblank = HBlankMIN * DCF
   HFL = HR + Hblank
   if( HFL%8 ) HFL = 8 * (1 + int(HFL/8) )

  # Vertical:

   Vtick = HFL / DCF # us
   Vfront = VR + VfrontMIN / Vtick
   Vsync = Vfront + VsyncMIN / Vtick
   Vback = VBackMIN / Vtick
   Vblank = VBlankMIN / Vtick
   VFL = Vsync + Vback
   if( VFL < VR + Vblank ) VFL = VR + Vblank

   RR = 1000000 * DCF / (HFL * VFL)
   HSF = 1000 * DCF / HFL

   # Done: generate some output:

   if( verbose ) {
      printf "\n# Horizontal:\n"
      printf "# Front Porch = %.2f us, Sync = %.2f, Back Porch = %.2f, ",
             (Hfront - HR) / DCF, (Hsync - Hfront) / DCF, (HFL - Hsync) / DCF
      printf "Blank = %.2f\n\n", (HFL - HR) / DCF
   }

  printf "# Refresh Rate: %.2f Hz, Horizontal Sync Frequency: %.2f kHz\n",
          RR, HSF

   printf " \"%dx%d\"\t%.2f\t%d %d %d %d   %d %d %d %d\n", HR, VR, DCF, HR,
          Hfront, Hsync, HFL, VR, Vfront, Vsync, VFL

   if( HSF > HSFMAX )
      printf("\nWarning: the Horizontal sync frequency 
                         may be too high for the monitor!\n")
   if( RR > VSFMAX )
      printf("\nWarning: this refresh rate may be too high for the monitor!\n")
}

Wer keines zur Hand hat, kann den Eintrag auch mittels eines CGI-Programms [3] via Internet erzeugen (siehe Abb. 8). Dabei kann man zum einen die DCF oder zum anderen die VS als Kriterium für die Erzeugung des Eintrages benutzen.

Abb. 8: Web-Modeline-Tool [3]

Zum Schluß sollte man noch in der /etc/inittab den Wert bei zwei (id:2:initdefault:) auf 3 zu setzen. Dieses Vorgehen bewirkt, daß nach dem Booten automatisch der X-Server hochgefahren wird und man sich via X-Login einloggen kann. Dieses Verfahren ist das Verfahren der Wahl. Den Monitor schon zum Zeitpunkt des Bootens mit einer festen Frequenz durch Linux anzusteuern bedarf einiger Klimmzüge und führt leider nicht immer zum Erfolg.

Abb. 9: Die Modeline-Einträge

Modeline       "1280x1024" 104.00 1280 1336 1464 1696 1024 1024 1026 1060
Modeline       "1600x1200" 152.97 1600 1680 1864 2216 1200 1200 1203 1241
Modeline       "1536x1152" 140.00 1536 1608 1776 2096 1152 1152 1155 1192
Modeline       "1024x768"   88.00 1024 1072 1184 1376  768  768  770  806

Einziger Wermutstropfen ist, daß die Ansteuerung des Monitors nur im Graphikmodus (unter einem X-Server) funktioniert. Leider greift hier noch nicht das neue Feature des Linux 2.2.x Kernels - das VGA-Boot. Denn die Kerneloption aktiviert nur solche Einstellungen, die auch im BIOS des Computeres verankert sind [6] und das sind nicht die, die der Festfrequenzmonitor mag. Hier wäre noch ein wenig Nacharbeit zu leisten.

Alles, was auf Konsolenebene passiert, wenn man nicht gleich in den Graphikmodus booten will, bleibt im Dunkeln. Hierfür gibt es eine Lösung: SVGATextMode ist ein Programm, das es ermöglicht, den Monitor im Konsolenbetrieb mit einer fest eingestellten Frequenz anzusprechen [2]. Beim Booten wird SVGATextMode durch ein Script unter /sbin/init.d/ gestartet. Das Problem ist, daß die Frequenzen für die Darstellung der Fonts im Textmodus eine andere ist, als die, die beim Graphikmodus eingestellt wird. Die maximale Frequenz für den Textmodus ist sehr viel niedriger als die für den Graphikmodus. Nur teuerer Graphikkarten können auch im Textmodus hohe Frequenzen erzeugen. Sollte man so eine Karte besitzen und SVGATextMode benutzen, so ist es ratsam beim Starten des X-Servers ein Script zu verwenden, das die TextVGA-Parameter beim Starten der X-Oberfläche speichert und nach dem Verlassen der selbern wieder restauriert.

Abb. 10: Skript zum Abspeichern des VGA Textmodus-Fonts

#!/bin/sh
# Script to save VGA textmode font, run X, and restore VGA textmode font.
# A more rigorous alternative is to run the 'savetextmode' script before
# running X, and 'textmode' after. This will restore the textmode registers
# and the VGA palette in addition to the VGA font.

TMPDIR=/tmp/${0##*/}.$$
mkdir $TMPDIR || exit
trap "rm -rf $TMPDIR" 0 1 2 3 7 13 15
echo Saving font in $TMPDIR/fontdata
restorefont -w $TMPDIR/fontdata
startx
echo Restoring font from $TMPDIR/fontdata
restorefont -r $TMPDIR/fontdata

Eine andere - nicht softwaregesteuerte - Art, um den Monitor auf einer festen Fequenz anzusprechen, ist, eine Graphikkarte zu verwenden, bei der man die Frequenz speichern kann [7]. Leider bieten die wenigsten Graphikkarten dieses Feature an.

Infos

[1] Monitordaten: http://www.griffintechnology.com/mondata.html
[2] Monitordaten: http://hawks.ha.md.us/hardware/monitor.html
[3] Modeline Tool: http://www.dkfz-heidelberg.de/spec/linux/modeline/
[4] Mehr Infos: http://wmad95.mathematik.uni-wuerzburg.de/%7Ebuckel/projects/schalt.html
[5] SVGATextMode 1.9: http://metalab.unc.edu/pub/Linux/utils/console/
[6] Video Mode Selection Support 2.11: http://www.linuxhq.com/doc21/svga.txt
[7] Bevorzugte Graphikkarten für Festfrequenzmonitore: http://www.si87.com/
[8] Eagle Dateien (Schema): http://www.dkfz-heidelberg.de/spec/art/green/sync2.sch
[9] Eagle Dateien (Platine): http://www.dkfz-heidelberg.de/spec/art/green/sync2.brd
[10] Fertiger Adapter vom LinuxHaus Stuttgart: http://www.lihas.de/Hardware/Sync_on_Green/

Der Autor

Andreas Bohne weiß, warum Pinguine nicht fliegen können: Was nicht fliegt, kann auch nicht abstürzen!

Copyright © 1999 Linux-Magazin Verlag