Ich habe von meinen Eltern zu Weihnachten einen schicken 16:10-TFT bekommen, welcher natürlich auch Digital angesteuert gehört. Und dann bitte auch in seiner nativen Auflösung von 1680x1050 Pixel. Aber genau das führte zu viel Kopfzerbrechen - der Xserver startete immer nur in 1280x1024 oder auch 1024x768 :/
Nun hatte ich zwar passende Einstellungen in der xorg.conf, aber diese haben keinen Effekt gehabt:
Es fand sich auch keine brauchbare Fehlermeldung in der
Section "Screen"
Identifier "Default Screen"
Device "NV15"
Monitor "SyncMaster"
DefaultDepth 16
SubSection "Display"
Depth 16
Modes "1680x1050"
EndSubSection
SubSection "Display"
Depth 24
Modes "1680x1050"
EndSubSection
EndSection
/var/log/Xorg.0.log
– bis ich irgendwo den Parameter für das Debug-Level des Xservers fand: startx -- -logverbose 5
Nun hatte ich auch das erste mal eine brauchbare Aussage in der Logdatei, woran es denn liegt:
Für diese Auflösung wird eine Pixelrate von über den 135Mhz, den die Grafikkarte maximal liefern kann, benötigt. Und somit muss es mich nicht wundern, dass es nicht tut. Aber damit gab ich mich nicht zufrieden...
[...]
(--) NVIDIA(0): Connected display device(s) on GeForce FX 5200LE at
(--) NVIDIA(0): PCI:1:0:0:
(--) NVIDIA(0): Samsung SyncMaster (DFP-0)
(--) NVIDIA(0): Samsung SyncMaster (DFP-0): 135.0 MHz maximum pixel clock
[...]
(--) NVIDIA(0): Detailed Timings:
(--) NVIDIA(0): 1680 x 1050 @ 60 Hz
(--) NVIDIA(0): Pixel Clock : 146.25 MHz
[...]
Bei Wikipedia im Artikel über DVI hatte ich etwas über reduced Blanking gehört. Hier wird letzten Endes bei der Übertragung der Signale an den Monitor die Pause, in welcher ein normaler CRT seinen Elektronenstrahl von der rechten an die linke Seite zurückbewegt, ausgelassen. Dadurch bekommt man logischerweise mehr Informationen in der gleichen Zeit. Nun musste ich der Grafikkarte noch klar machen, dass sie auch reduced Blanking verwenden soll. Sämtliche Timingparameter werden bei xorg über so genannte Modelines gesteuert, sofern sie nicht vom Xserver berechnet werden. Aber das hat bei mir ja, wie man sah, nicht geklappt. Durch füttern von Suchmaschinen mit passenden Begriffen stieß ich letzten Endes auf CVT, einen paar Zeilen C-Code, die genau diese Aufgabe erledigen:
.-(/tmp)----------------------------------------------------------------------(moritz@denkpfad)-
`--> gcc cvt.c -o cvt -lm -Wall
.-(/tmp)----------------------------------------------------------------------(moritz@denkpfad)-
`--> ./cvt 1680 1050 60 -r
# 1680x1050 @ 60.00 Hz Reduced Blank (CVT)
# field rate 59.88 Hz; hsync: 64.67 kHz; pclk: 119.00 MHz
Modeline "1680x1050_60.00_rb" 119.00 1680 1728 1760 1840 1050 1053 1059 1080 +HSync -Vsync
Theorethisch hatte ich nun meine Modeline mit einer Pixelrate von für die Grafikkarte machbaren 119Mhz, aber am Verhalten des Xservers hatte sich immer noch nichts geändert - bis auf die Fehlermeldung:
Auf Verdacht habe ich nun in Richtung Grafiktreiber gesucht, und in der Dokumentation zu NVidias Treiber wurde ich nun auch fündig:
(WW) NVIDIA(0): Mode "1680x1050_60.00_rb" is too large for Samsung SyncMaster
(WW) NVIDIA(0): (DFP-0); discarding.
Option "ExactModeTimingsDVI""boolean"Ich zwinge ihn nun also, genau die Parameter aus der Modeline zu verwenden - und siehe da, es geht!
Forces the initialization of the X server with the exact timings specified in the ModeLine. Default: false (for DVI devices, the X server initializes with the closest mode in the EDID list).