Wer unter Linux versucht die aktuellen WebGL-Demos von bspw. Mozilla oder Google mit dem Firefox 4 oder Google Chrome aufzurufen, wird unter Umständen feststellen, dass es bei ihm nicht funktioniert. Das liegt daran, dass bestimmte Grafikkartentreiber für Linux so schlecht programmiert und instabil sind, dass die Browserhersteller sie auf eine Blacklist gepackt haben. Durch einen Trick lässt sich diese Sperre jedoch umgehen.

Instabile Grafiktreiber

Da wollte ich mir diese schönen WebGL-Demos anschauen und bekam lediglich eine Fehlermeldung. In meinem System verwende ich eine ATI/AMD Radeon 5770 von Powercolor mit den aktuellen proprietären Treibern von AMD.

Nach einer kurzen Recherche bin ich auf folgenden Bug-Eintrag gestoßen, der besagt, dass unter Linux alle Treiber bis auf die proprietären Treiber von NVIDIA so instabil sein sollen, dass Mozilla sie kurzer Hand auf eine Blacklist gesetzt hat. Allerdings muss festgehalten werden, dass auch unter Windows Mozilla und Google bestimmte Treiber blockiert haben. Während Mozilla in einem Wiki-Eintrag eine Liste von blockierten Grafiktreibern führt, findet man sie bei Google Chrome lediglich direkt im Quellcode.

Für die Programmierer unter euch sei gesagt, dass sich ein blockierter Treiber wie folgt feststellen lässt: Der JS-Aufruf window.WebGLRenderingContext liefert bei einem WebGL-fähigen Browser zwar noch ein true, jedoch wird die anschließende Erzeugung des WebGL-Kontextes bspw. mittels canvas.getContext ('experimental-webgl') auf einen Fehler hinauslaufen.

Sperre umgehen

Bei ZDNet bin ich auf einen Artikel gestoßen, der beschreibt, wie man durch einen Handgriff diese Sperre umgehen kann.

Mit dem Kommandozeilenparameter --ignore-gpu-blacklist lässt sich Google Chrome (in meinem Fall die Open Source Variante Chromium) mitteilen, dass die Blacklist ignoriert werden soll. Ein Aufruf kann dann wie folgt aussehen: chromium --ignore-gpu-blacklist

Firefox wird über die Umgebungsvariable MOZ_GLX_IGNORE_BLACKLIST gesteuert. Ein Aufruf der die Blacklist ignoriert, kann wie folgt aussehen: MOZ_GLX_IGNORE_BLACKLIST=1 firefox Alternativ lässt sich die Umgebungsvariable dauerhaft setzen. Dies erreicht man unter Linux bspw. durch den Eintrag export MOZ_GLX_IGNORE_BLACKLIST=1 in der Datei ~/.bashrc. Unter Windows lassen sich Umgebungsvariablen unter System (Windows-Taste+Pause)->Register Erweitert->Umgebungsvariablen setzen.

Wer diese Sperre umgeht, muss logischerweise bei WebGL-Anwendungen mit Abstürzen seines Browsers rechnen. In diesem Fall darf man sich nicht bei seinem Browserhersteller beschweren, sondern direkt beim Hersteller seiner Grafikkartentreiber. Dieser schafft es wohl nicht gute Treiber zu entwickeln...

blogroll
tags