Vor ein paar Tagen habe ich mein HTPC neu installiert und dabei auch von Archlinux auf Ubuntu gewechselt. Grund war, dass Archlinux komplett auf Kernel Mode Setting umgestellt hat, dies aber zusammen mit dem TV-Out meiner Intel Grafikkarte einfach nicht läuft. Ubuntu 9.10 setzt noch auf den etwas älteren Intel Treiber, der nicht unbedingt mit Kernel Mode Settings betrieben werden muss. Leider haben die Programmierer dabei NTSC-M als Standard vorgegeben, aber das kann mit ein paar Handgriffen geändert werden.
Es gibt grundlegend zwei Probleme:
Kernel Mode Setting (KMS): Die Idee dahinter ist, dass der Kernel die Umschaltung zwischen den verschiedenen Grafikmodi übernimmt, so dass ein Hin- und Herschalten, bei an sich gleichen Grafikmodi, unterbleibt. Vorteilhaft ist das wenn mehrere Leute den Rechner nutzen. Bei jeder Neuanmeldung wird ja X11 neu gestartet und schaltet damit den Grafikmodus neu. Wenn das der Kernel schon gemacht hat, kann der Grafikmodus über die ganze Laufzeit erhalten bleiben und muss nur geschaltet werden, wenn es nötig ist.
Für mich ist das aber einerseits unnötig, es gibt nämlich genau nur einen Benutzer beim HTPC, und andererseits findet der Intel Treiber meinen Fernseher nicht und bringt damit nur noch ein schwarzes Bild.
TV-Out mit PAL: Wird vor allem bei HTPCs noch gebraucht, wenn noch kein Flachdisplay dran hängt, welches dann direkt über VGA, DVI oder HDMI angeschlossen ist - wie bei mir. Von den Entwicklern vorgegebener Standard ist aber NTSC.
Das eigentliche Problem ist, dass die Dokumentation des Intel Treibers missverständlich ist. In der man Page intel(7) steht zum Thema TV Format:
TV_FORMAT - output standard
You can select between NTSC-M, NTSC-443, NTSC-J, PAL-M, PAL-N, and PAL.
Nun muss man wissen, dass bei mir - und vielen anderen, die im Internet nach Hilfe suchen, der TV-Out bzw. S-Video Out auf einer Zusatzkarte steckt. Diese, SDVO genannte, Karte wird aber vom Intel Treiber nicht wirklich unterstützt. Die Situation war bei dem älteren Treiber i810 insofern noch besser, als dieser keine Ahnung von SDVO hatte und diese Ports deswegen genauso angesprochen hat, als wären sie Teil der Grafikkarte.
Nun hat der Intel Treiber aber zugelernt und kennt SDVO Karten, und seit ein paar Versionen auch TV-Out darauf. Die Möglichkeit die Fernsehnorm einzustellen, über TV_FORMAT mit xrandr(1) bzw. der
Option "TV Format" "PAL"
wie man häufiger im Netz liest, gibt es somit nur für die Ports, die direkt auf der Grafikkarte, bzw. on-board sind. Für die Ausgänge auf der SDVO Karte lässt sich das leider so nicht einstellen. Zumindest noch nicht.
Da die Treiber Entwickler normalerweise NTSC haben, ist also NTSC der Standard, den das TV-Out annimmt, welches je nach Fernseher verschieden interpretiert wird. Hat man einen Fernseher, der NTSC kann, hat man ein normales Bild. Bei Fernsehern, die zumindest PAL-60 bzw. PAL-M können, hat man ein schwarz/weiß Bild. Und bei Fernsehern, die nur normales PAL-B/G können, hat man kein wirkliches Bild. Mein Fernseher kann zwar NTSC, stellt es aber nur sehr schlecht dar. Sprich Schrift ist fast unlesbar, Filme könnte man wohl gerade so gucken. Sehr unbefriedigend das.
Nach der Installation von Ubuntu 9.10 - oder den entsprechenden Derivaten - muss man erstmal KMS abschalten. Dies bewerkstelligt man, indem man in /etc/default/grub in der Zeile GRUB_CMDLINE_LINUX_DEFAULT ein nomodeset einfügt. Danach update-grub ausführen und neu starten.
Jetzt sollte man die Console und auch X11 wieder sehen. Vorher war das alles schwarz, obwohl der Fernseher angezeigt hat, dass ein Signal anliegt. PAL anzuschalten ist ein klein wenig komplizierter, aber nicht wirklich viel. Man muss das Paket xserver-xorg-video-intel neu bauen und vorher PAL als Standardformat einstellen. Dank der Anleitung von Vivek ist das innerhalb weniger Minuten erledigt.
Benötigt wird fakeroot, um das meiste als Benutzer und nicht als root abzuwickeln, pkg-dev, um Pakete bauen zu können, und build-essentials, die grundlegenden Werkzeuge, um Quellcode in Programme zu verwandeln.
$ sudo apt-get install build-essential fakeroot dpkg-dev
Als nächstes brauchen wir die Quellen, die wir der Sauberkeit halber in einem eigenen Unterverzeichnis halten.
$ mkdir build $ cd build $ apt-get source xserver-xorg-video-intel
Um dieses spezielle Paket zu bauen, müssen wir noch all die Dinge installieren, auf die sich das Paket bezieht.
$ sudo apt-get build-dep xserver-xorg-video-intel
Damit haben wir alles vorbereitet. Als nächstes müssen wir die Vorgabe NTSC auf PAL ändern. Dazu in der Datei xserver-xorg-video-intel-2.9.0/src/i830_sdvo.c nach Funktion i830_sdvo_set_tv_format() und der Zeile
format->ntsc_m = 1;suchen und durch
format->ntsc_m = 0;
format->pal_g = 1;ersetzen. Jetzt nur noch das Paket bauen uns installieren.
$ cd xserver-xorg-video-intel-2.9.0 $ dpkg-buildpackage -rfakeroot -b $ sudo dpkg -i ../xserver-xorg-video-intel_2.9.0-1ubuntu2.1_amd64.deb
das amd64 kann auch i386 oder anders heißen. Das ist abhängig von der Installation.
Wenn jetzt X11 startet und eine TV-Out an SDVO ansteuern will, dann wird das automatisch PAL-G sein. Voller Erfolg, denn wir haben endlich ein sauberes Bild unter X11 auf dem Fernseher.
Recent comments
1 day 22 hours ago
2 days 28 min ago
2 days 1 hour ago
2 days 1 hour ago
8 weeks 4 days ago
8 weeks 5 days ago
8 weeks 5 days ago
8 weeks 5 days ago
12 weeks 2 days ago
13 weeks 5 days ago