Vorgeplänkel:
Nachdem ich meinen ersten Laptop gekauft hatte fiel mir sofort der Farb- und Kontrastunterschied zwischen dem Röhrenmonitor meines Arbeitsplatzrechners und dem Flüssigkristallbildschirm meines Laptops auf (beide mit Linux). Besonders bei Digitalkamerafotos konnte ich Strukturen in dunklen Bereichen des Bildes auf meinem Laptop klar erkennen, während ich bei meinem PC an diesen Stellen nur schwarz sah. Die Erhöhung des Gammawertes auf dem PC löste zwar das Problem in den dunklen Bereichen, alle hellen Stellen waren aber nun sehr ausgeblichen. Auf der anderen Seite schien mein Laptop eine hellblaue Grundfarbe zu haben. Blauer Himmel und grünes Gras leuchteten sehr kräftig, während die Haut von Menschen immer recht ungesund fahl ausah (abgesehen von den automatischen Saftfarbverbesserungen gängiger Digitalkameras – „bunter als die Wirklichkeit“).
Software:
Die Lösung für dieses Problem ist ein gerätespezifisches Farbprofil („ICC-Datei“), welche das entsprechende Grafiksystem einliest (für Bildschirme unter Linux also X-Window) und dann anhand dessen Vorgaben die an den Bildschirm ausgelieferten Grafikdaten so verändert, das der Darstellungsfehler ausgeglichen wird. Zunächst benötigt man aber ersteinmal solch ein Profil und außerdem braucht man unter X-Window ein spezielles Programm, das ein derartiges Profil passend läd, indem es anhand des Profils die interne Farbzuordnungstabelle der Grafikkarte (LUT) entsprechend verändert. Sehr schnell wird man feststellen, dass es zwei freie Farbverwaltungssysteme gibt mit denen man Farbprofile erstellen kann: LittleCMS zusammen mit dem grafischen Programm lprof und ArgyllCMS, eine Sammlung von Kommandozeilenwerkzeugen. Allerdings kann nur ArgyllCMS ein Bildschirmfarbprofil mittels eines Bildschirmkalibrationsgeräts erstellen.
Unter OpenSuse findet sich ArgyllCMS in der erweiterten Fotoprogrammsammlung: http://download.opensuse.org/repositories/multimedia:/photo/. Sie ist standardmäßig nicht in der Liste der Installationsquellen enthalten, kann aber einfach hinzugefügt werden, indem man die URL in Yast im Modul „Software-Pepositories“ hinzufügt und aktiviert. Anschließend kann man ArgyllCMS über Yast einfach installieren. Es ist dringend empfohlen gleich auch die Dokumentation mitzuinstallieren (welche sich dann im HTML-Format unter /usr/share/doc/packages/argyllcms-doc/ befindet). Dort sind auch alle unterstützten Kalibrationsgeräte ausführlich aufgelistet.
Nach dieser Vorarbeit war es eine schöner Zufall, dass ich mir auf dem letzten nürnberger Wikipedianertreffen ein „Eye-One Display 2“ ausleihen konnte, um damit meine beiden Bildschirme zu kalibieren. Da die Dokumentation von ArgyllCMS einen doch einigermaßen erschlagen kann und viele Experimentiermöglichkeiten bietet, dauerte es eine Weile bis ich durchstieg. Letztlich stellte sich heraus, dass die erstellten Profile erhebliche Farb- und Kontrastverbesserungen gegenüber dem unkalibierten Bildschirm brachten, ich aber zwischen einem in einer einfachen Messung erstellten Profil und einem aufwendiger gemessenen Profil keinen Unterschied erkennen konnte.
Einfache Kalibration:
Fürs Erste reicht es also vollkommen aus ein ganz einfaches Profil zu erstellen, indem man die Helligkeit auf oder nahe dem Maximum einstellt (für maximale Helligkeitsdifferenz und somit genauere Messung), eine Konsole mit Rootrechten öffnet, das Kolorimeter an den Rechner anschließt und folgenden Befehl ausführt:
dispcal -v -yl -o Mein_Bildschirmprofil
Sollte man einen Röhrenmonitor haben gibt man statt „-yl“ einfach „-yc“ ein. Das Programm fordert einen nun auf das Kalibrationsgerät auf dem nun erscheinenden Farbfleck auf dem Display zu legen und anschließend kann die Kalibration (im Menüpunkt 7) gestartet werden. Nachdem das Programm fertig ist kann man das neuerstellte Profil testweise laden:
dispwin Mein_Bildschirmprofil.icc
Es sollte nun eine bemerkbare Farbveränderung des Bildschirms stattgefunden haben. Um das Profil wieder aus der Grafikkarte zu entfernen gibt man
dispwin -c
ein und alles ist wie vorher. Es sollte aufgefallen sein, dass der Bildschirm mit geladenem Profil etwas mehr warm-orange wirkt.
Generell haben praktisch alle Bildschirme einen Blaustich und da das menschliche Sehsystem permament Farbstiche zu neutralisieren sucht (Farben sind „Informationsdifferenz“ zum Durchschnitt der Umgebung) fällt einem das helle Blau nach einer Weile nicht mehr unmittelbar auf. Viele Benutzer verstärken dies noch zusätzlich, indem sie die Farbtemperatur des Bildschirms auf sehr hohe Werte stellen. Dies hat zur Folge, dass der Bildschirm sehr hell und klar erscheint und insbesondere Blautöne, wie Himmel, strahlend blau wirken. Jedoch leiden darunter vor allem Fotos, da die Ockertöne von Haut nun eher ungesund und blass aussehen. Deswegen wird man beim Bildschirmkauf im Laden fast immer nur Demos mit Wasser, Himmel und neuerdings im HDR-Wahn mit heiterer Bewölkung finden und der Käufer ist im wahrsten Sinne des Wortes geblendet. Daheim beim Betrachten der Digicamschnappschüsse, welche in aller Regel Fotos von Menschen sind, ist man dann enttäuscht und fragt sich „ob man wirklich so scheiße aussieht wie auf dem Bild“. Nein tut man nicht. Der Bildschirm und die Digicam sind falsch.
Feintuning:
Um bestmögliche Resultate zu erzielen hat man bei Laptops wenig Tuningmöglichkeiten außer einen Wert nahe der maximalen Helligkeit einzustellen. Allerdings wandert der sogenannte Weißpunkt zumindest bei meinem Samsung-NC-10-Netbook bei großer Helligkeit noch weiter Richtung Blau. Um für alle Helligkeiten einen annehmbare Annäherung des Weißpunktes zu finden kann man in diesem Fall bei der Kalibration eine Helligkeit um 80 – 90 % ausprobieren. Bei LCD-Bildschirmen für PCs empfielt es sich die Farbeinstellung des Monitors auf Standardwerten zu haben. Zurücksetzen auf Herstellereinstellungen und 100% Helligkeit ist daher grundsätzlich keine falsche Ausgangsbasis. Insbesondere Kontrast (der dort nur über eine Helligkeitsänderung simuliert wird) und Farbtemperatur sollten man bei der Kalibration von LCDs nur dann ändern, wenn man alles Andere bereits ausprobiert hat. Bei Röhrenmonitoren empfielt es sich die Farbtemperatur und den Kontrast interaktiv mit Dispcal auf möglichst korrekte Werte vor der Kalibration anzupassen, da diese Geräte auch intern rein analog arbeiten.
Nachdem man dies gemacht hat kann man dann auch ein genaueres Profil (mit 836 Einzelfarbmessungen, für mehr siehe die Hilfe von targen) mit folgenden Befehlen erstellen („yl“ oder „yc“ jeweils passend zum Monitortyp):
dispcal -v -yl -F Mein_Bildschirmprofil targen -v -d3 Mein_Bildschirmprofil dispread -F -yl -v -k Mein_Bildschirmprofil.cal Mein_Bildschirmprofil colprof -v -D "Name meines Bildschirms" -qh -as Mein_Bildschirmprofil
Das fertige Profil findet sich wieder in „Mein_Bildschirmprofil.icc“. dispcal erstellt in diesem Fall ein Vorkalibrationsprofil (Mein_Bildschirmprofil.cal), welches bei der eigentlichen Kalibration mit dispread bereits in die Grafikkarte geladen wird und somit für genauere Messung sorgt. targen erzeugt die Tabelle der zu messenden Farbfelder und colprof erstellt ein fertiges Profil mit „hoher Qualität“ (-qh). Insbesondere bei Röhrenmonitoren empfielt sich bei dispcal und dispread die Option „-F“, welche den Bildschirm schwarz stellt, da auf Röhrenmonitoren helle Bildschirmbereiche stark in dunkle Bereiche austrahlen und somit den Schwarzpunkt verfälschen. Allerdings muss man bei der Option „-F“ die Programme blind bedienen und sollte also ein paarmal spielen und sich merken wann man welche Taste drücken muss.
Dauerhafte Konfiguration:
Will man das Bildschirmprofil pro Benutzer installieren geht dies ganz einfach mit:
dispwin -I Mein_Bildschirmprofil.icc
Das Profil wird dadurch in einen tief verschachtelten Ordner unterhalb von ~/.local/share/color abgelegt. Der genaue Pfad steht in ~/.config/color.jcnf. Diese Informationen muss man aber nicht unbedingt wissen. Damit das Profil dauerhaft bei jedem Neustart geladen wird trägt man in seine lokale .xinitrc folgenden Befehl ein:
dispwin -L
Möchte man global für alle Benutzer das Profil beim Starten des X-Servers laden kopiert man das Profil bspw. nach /usr/local/share/color/Mein_Bildschirmprofil.icc und trägt in der globalen /etc/X11/xinit/xinitrc „dispwin /usr/local/share/color/Mein_Bildschirmprofil.icc“ ein.
Mit beiden Methoden wird man jedoch beim Fortsetzen einer Computersitzung aus dem Tiefschlaf („Suspend to Disk“) feststellen, dass das Profil nicht geladen ist. Für diesen Fall muss man dann entweder händisch oder mittels eines geeignet in der Energieverwaltung des Rechners eingetragenen zusätzlichen Aufrufs von dispwin nach der entsprechenden obigen Variante das Profil nachladen. Der Grund hierfür ist, dass der Inhalt des Grafikkartenspeichers beim Tiefschlaf nicht vollständig mitgesichert wird und aufgrund des Forsetzens der Sitzung die xinitrc nicht erneut geladen wird. Man kann dieses Problem mittels eines geeigneten Aufrufs von „dispwin -D &“ umgehen, da in diesem Fall dispwin geladen bleibt und permanent den Monitor auf Änderungen überprüft. Zumindest auf meinem PC ist dies jedoch nicht ratsam, den ausdrücklich als experimentell gekennzeichneten Deamon-Modus von dispwin zu nutzen, da es nahezu 100% der verfügbaren CPU-Zeit beansprucht.
Zum Abschluss des schon eh überlangen Textes sei noch ein LWN-Artikel zum Thema Farben unter Linux empfohlen, der zwar nicht sonderlich in die Tiefe geht, aber auf weitere interessante aber leider noch weitgehend unbekannte Softwareprojekte rund um Farben und Linux verweist: SCALE 8x: Color management for everyone.