Bei der Verwendung des proprietären Nvidia-Treibers in Kombination mit Twinview kommt es bei einigen Flash-Video-Seiten zu einem hässlichen Fehler: Videos werden im Vollbild nicht korrekt dargestellt, das Bild füllt nur einen kleinen Teil des Bildschirms aus.
Ich hatte bisher noch keine zufriedenstellende Lösung gefunden. Einige Nutzer lassen durch zusätzliche Skripte den Flashplayer auf Youtube durch VLC ersetzen. Andere Nutzer lassen durch diesen Trick das Flash-Video das gesamte Browser-Fenster einnehmen und versetzen dann den Browser in den Vollbild-Modus. Wirklich befriedigend ist das alles nicht.
Alistair Buxton hat sich auf seiner Homepage einmal näher mit dem Problem beschäftigt und rausgefunden, warum der Flashplayer auf Youtube so skaliert, wie er skaliert. Letztendlich ermittelt das Flash-Plugin durch einen bestimmten API-Aufruf (XGetGeometry) die Größe der Anzeigefläche. Diese wird an den Flash-Player weitergereicht, der daraus seine Schlüsse zieht. Der Youtube-Player scheint zunächst das Flash-Video auf den gesamten Anzeigebereich zu skalieren, um dieses Bild dann (inklusive schwarzer Balken) wieder auf die Größe der primären Anzeige runterzuskalieren oder entsprechend zu beschneiden. Auf der Seite von Alistair Buxton ist das anhand verschiedener Bilder gut nachzuvollziehen.
Alistair hat nun einen kleinen Hack veröffentlicht, der den Aufruf der Methode “XGetGeometry” durch dynamisches Linken mittels LD_PRELOAD überschreibt. Wenn das Flash-Plugin nun nach der Anzeigegröße fragt, werden ihm Breite und Höhe des primären Bildschirms zurückgegeben. Der kleine Hack findet sich hier und ist leicht zu verwenden, in der Readme-Datei finden sich alle wichtigen Informationen.
Einen Nachteil hat auch diese Methode natürlich: Bei jedem Aufruf des Browsers muss die Umgebungsvariable LD_PRELOAD explizit gesetzt werden, damit die modifizierte XGetGeometry-Funktion zum Tragen kommt. Es empfiehlt sich daher, die .desktop-Datei des Lieblingsbrowsers entsprechend anzupassen. Alternativ könnte auch ein kleines Skript erstellt werden, das statt des Browsers aufgerufen wird:
#!/bin/bash
LD_PRELOAD=/usr/lib/libfullscreenhack.so chromium-browser $@
Letztlich ist natürlich auch diese Lösung keine Dauerlösung. Durch den kleinen Trick von Alistair kann man das Problem aber erstmal umschiffen. Endlich.
Wenn ich “make” eingebe, kommt bei mir folgende Fehlermeldung:
gcc -m64 -o tester tester.c -lX11 -lXrandr
/usr/bin/ld: cannot find -lXrandr
collect2: ld returned 1 exit status
make: *** [tester] Fehler 1
Ubuntu 10.04
Hallo,
hatte das Problem nicht, aber so wie ich Google interpretiere, benötigst du das Paket “libxrandr” bzw. “libxrandr-dev”. Kannst das ja mal probieren.
Gruß,
brb
Cool, ich habe schon oft nach einer Lösung für dieses Problem gesucht. Ich habe zwei gleich große Monitore, aber interessanterweise skalieren nicht alle Videos falsch (nur die meisten). Bei manchen klappt der Fullscreen. Gut zu wissen, woran das liegt, aber ich bin zumindest auf Youtube auf HTML5 umgestiegen
@Daniel
Danke, mit diesen Paketen habe ich es erstmal installiert.
Jetzt laden aber die youtube Videos gar nicht mehr und firefox friert ein.
Ubuntu 10.04, Firefox 7.0.1
64bit
Monitor 1 1366×768
Tv 1360×768
so sieht meine fullscreenhack.c aus:
#define REAL_WIDTH (2726)
#define REAL_HEIGHT (1536)
// the height and width of the primary monitor where flash
// goes fullscreen
#define FAKE_WIDTH (1366)
#define FAKE_HEIGHT (768)
Auf 64 bit ist die Zeile 1 im Makefile auch umgestellt.
Vielleicht kann mir noch jemand einen Tipp geben.
ah moment:
die Höhe habe ich ja leider auch addiert.
Ich teste nochmal mit 768 ^^
gut jetzt geht es und friert nicht ein.
Ich habe aber noch eine Frage:
Bei mir bekomme ich nur auf dem PC Monitor (Bildschirm 1)
das Vollbild, auch wenn Firefox eigentlich auf dem TV (Monitor 2, rechts von Monitor 1) maximiert ist.
Gibt es einen Trick, dass das Script nur auf dem 2. Monitor Vollbild scaliert?
Hey ersteinmal vielen vielen Dank für den Hinweis!
Ich bin zwar mit Arch Linux unterwegs, habe aber auch schon lange nach einer Lösung für dieses Problem gesucht und durch deinen Tip hat es wunderbar geklappt.
Doch eine kleine Frage noch: gibt es schon eine Lösung das das Vollbild Video bleibt, wenn man auf dem anderen Monitor weiterarbeiten will?
Ich kann diesen Bug bestätigen – allerdings nicht für den proprietäre Nvidia-Treiber, sondern für eine Intel iGPU.
Danke für die Tipps, ich werd mir das mal ansehen…
Hallo,
ich bin auch mit Arch unterwegs – aber das ist für den UU-Planeten ja nicht unbedingt relevant
Der Umstand, dass Flash den Vollbildmodus verlässt, wenn man anderswo klickt, wurmt mich auch noch, da wäre ich auch an einer Lösung interessiert.
Daniel
Ich habe das Problem einfach per FF-Plugin FlashVideoReplacer gelöst. Das Video wird auf Totem/VLC etc. umgeleitet und kann bequem auf dem einen Monitor im Vollbild laufen während man auf dem anderen andere Dinge macht. Damit kann man es auch als kleines Fenster im Vordergrund in irgendeine Ecke schieben…
Kann man das nicht auch in die bashrc werfen?
Nö, .bashrc taugt dafür nicht sonderlich, weil die in vielen Anwendungsfällen nicht berücksichtigt wird.
Mittlerweile baue ich den Hack direkt in der Datei /opt/google/chrome/google-chrome ein. Halte ich für die beste Lösung, abgesehen davon vll, dass es bei Upgrades überschrieben wird