L'auteur de cette page s'étant essayé, d'une part, à la création d'un (petit) monde en VRML sous un système d'exploitation propriétaire bien connu et, d'autre part, à l'utilisation de Linux (avec deux distributions préférées, SUSE 10.0 et Ubuntu 6.06), il s'est naturellement intéressé à la réunion des deux.
Disons tout de suite que c'est difficile : (i) difficile de faire fonctionner un lecteur
de VRML sous Linux et (ii) cette première étape étant franchie, difficile de lire certains mondes, probablement
en raison d'écarts et de non conformités syntaxiques (ce point n'est pas totalement clair).
Après de nombreuses recherches sur le Ouaibe, la seule solution trouvée à cette heure repose sur FreeWRL sous Ubuntu
6.06 (Drapper Drake) - et encore, au moyen d'une compilation à partir des sources qui demande un peu de patience...
L'auteur peut témoigner que "ça marche", c'est-à-dire que le logiciel FreeWRL tourne sur sa machine, à la fois en application autonome et comme extension de Firefox et qu'il arrive à naviguer parfaitement dans certains mondes virtuels (test en bas de cette page mais il faut d'abord appliquer la procédure :-).
Cette page décrit la procédure appliquée sur un portable VAIO (VGN-S3HP), doté d'un Celeron et d'une carte graphique nVidia (GeForce Go 6200 Turbo Cache [rev a1]), sur lequel est installée Ubuntu 6.06, avec le noyau Linux 2.6.15-26-386. Le pilote propriétaire de nVidia a été installé avec l'utilitaire easyubuntu car le pilote libre par défaut livré avec Dapper Drake causait quelques défauts d'affichage, ainsi corrigés.
La présente procédure traduit et explicite la méthode décrite par le site http://freewrl.sourceforge.net/ubuntu606.html, et en corrige un "petit" oubli (peut-être naturel à corriger pour un expert mais pas simple pour un débutant !).
Rappel : ce qui suit vaut pour les machines équipées d'une carte graphique nVidia (l'auteur ignore ce qui convient aux autres cartes :-/).
Première étape
Il faut d'abord vérifier que glx fonctionne. Pour cela, ouvrir un terminal et entrer (attention, dans ce qui suit, les lignes en gris clair sont les entrées de l'utilisateur et celles en gris foncé les réponses du système ; et dans les entrées, le signe $ représente l'invite (le "prompt") du système et ne doit pas être tapé).
$ glxinfo
Là, de deux choses l'une. Si le système répond quelque chose du genre :
name of display: :0.0
Error: couldn't find RGB GLX visual
c'est que glx ne fonctionne pas. Il paraît qu'il faut alors faire :
$ nvidia-xconfig
puis relancer le système. L'auteur n'a pas testé cette partie de procédure car, dans son cas, la réponse obtenue fut :
name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
...
Bla, bla, bla...
...
0x47 16 dc 0 16 0 r . . 5 6 5 0 4 24 8 16 16 16 16 2 1 Ncon
0x48 16 dc 0 16 0 r . . 5 6 5 0 4 24 8 16 16 16 16 4 1 Ncon
... et donc glx fonctionnait déjà, bien !
Deuxième étape
Tout un tas de paquets sont nécessaires pour compiler et exécuter FreeWRL. Pour les installer avec le gestionnaire de paquets Synaptic, il faut d'abord ouvrir tous les canaux logiciels à ce dernier puis "recharger" les informations sur les paquets disponibles. La manière de faire cela est bien décrite dans la documentation de Drapper Drake (document pdf ici, voir le chapitre "Installation de nouvelles applications et canaux logiciels").
Cela étant fait, à l'aide de Synaptic, il faut installer les paquets suivants (et leurs dépendances qui sont automatiquement proposées par le gestionnaire de paquets et qu'il faut "ajouter à la sélection" avant de lancer l'installation) :
build-essential | Avec les dépendances, 13 paquets sont installés. |
libmad0-dev | Un seul paquet. |
sox | Déjà installé dans le cas décrit ici mais ce n'est pas forcément général. |
imagemagick | Un seul paquet s'installe. |
libfreetype6-dev | Deux paquets. |
free-java-sdk | Là, neuf paquets s'installent ... |
libpng12-dev | Un seul paquet. |
libjpeg62-dev | Un seul paquet. |
lesstif2-dev | Ici, c'est 20 paquets qui s'installent ! |
libxaw7-dev | 5 paquets. |
nvidia-glx-dev | 4 paquets |
libperl-dev | Celui-là, c'est le paquet oublié par la procédure de sourceforge (et tant qu'on y est, vérifier que libperl "tout court" est bien présent, l'installer le cas échéant, et noter son numéro de version : la suite suppose que c'est libperl5.8). |
Ouf!
Troisième étape
Pour que le script de compilation retrouve ses petits, il faut créer deux liens symboliques en faisant dans un terminal :
% sudo ln -s /usr/lib/libperl.so.5.8 /usr/lib/libperl.so
% sudo ln -s /usr/lib/libXm.so.2 /usr/lib/libXm.so
A la deuxième, j'apprends que le fichier existe déjà... Je continue.
Quatrième étape
Télécharger les sources de FreeWRL sur
http://freewrl.sf.net.
NOTA : en septembre 2006, il y a sur cette page un paquet binaire (.deb) pour Ubuntu 6.06. L'auteur l'a testé mais, hélas, sans succès... (?)
C'est donc au "Source code in tar.gz format" qu'on s'attaque.
La version doit être supérieure ou égale à 1.18.2 ; à la date d'écriture de cette procédure, c'est la 1.18.4 qui est en ligne et donc on télécharge le fichier freewrl-1.18.4.tar.gz. Si la version est différente, adapter les commandes suivantes en conséquence.
Ensuite, on extrait le dossier contenu et on se place dedans en faisant :
$ gunzip freewrl-1.18.4.tar.gz
$ tar -xf freewrl-1.18.4.tar
$ cd freewrl-1.18.4
Cinquième étape
Enfin viennent la compilation, l'édition des liens et l'installation, par les trois commandes :
$ sudo perl Makefile.PL
$ sudo make
$ sudo make install
Les deux premières commandes renvoient de longues réponses émaillées de quelques alertes mais pas d'erreur fatale. Au premier essai, avant d'avoir compris la nécessité de libperl-dev, la dernière se passe moins bien :
$ sudo make install
make[1]: entrant dans le répertoire "/home/gilles/Downloads/freewrl-1.18.4/CFuncs"
make[1]: Rien à faire pour "all".
make[1]: quittant le répertoire "/home/gilles/Downloads/freewrl-1.18.4/CFuncs"
make[1]: entrant dans le répertoire "/home/gilles/Downloads/freewrl-1.18.4/JS"
rm -f ../blib/arch/auto/VRML/JS/JS.so
LD_RUN_PATH="" cc -shared -L/usr/local/lib JS.o -shared
-L/usr/local/lib -lperl `perl -MExtUtils::Embed -e ldopts`
-LJS/js1.5/src/Linux_All_OPT.OBJ -Lblib/arch/auto/VRML/VRMLFunc/
-o ../blib/arch/auto/VRML/JS/JS.so
/usr/bin/ld: ne peut trouver -lperl
collect2: ld a retourné 1 code d'état d'exécution
make[1]: *** [../blib/arch/auto/VRML/JS/JS.so] Erreur 1
make[1]: quittant le répertoire "/home/gilles/Downloads/freewrl-1.18.4/JS"
make: *** [subdirs] Erreur 2
La ligne en gras signifie que la bibliothèque perl (libperl) est absente. L'installation de libperl-dev fait entrer les choses dans l'ordre. La réponse à la troisième commande déroule alors un long discours qui se termine par :
make[1]: entrant dans le répertoire "/home/gilles/Downloads/freewrl-1.18.4/FreeWRL_Message"
gcc -Wall -c -o FreeWRL_Message.o FreeWRL_Message.c
gcc FreeWRL_Message.o -Wall -o FreeWRL_Message
-L/usr/lib -L/usr/X11R6/lib -lGL -lGLU -lXext -lX11 -lfreetype -lpng12 -lz
-ljpeg -L../JS/js1.5/src/Linux_All_OPT.OBJ -LJS/js1.5/src/Linux_All_OPT.OBJ
-Lblib/arch/auto/VRML/VRMLFunc/ -lFreeWRLjs -lXaw
strip FreeWRL_Message
make[1]: quittant le répertoire "/home/gilles/Downloads/freewrl-1.18.4/FreeWRL_Message"
Bien, la procédure s'est déroulée jusqu'au bout. Les nombreuses alertes aperçues au cours de son application (des histoires de pointeurs incompatibles, notamment) n'ont pas l'air d'avoir eu d'effets néfastes (?). Il est à noter que le texte de Sourceforge cité plus haut se termine par : "There may still be problems on AMD64 boxes; we are working through issues here." ; comprenne qui pourra.
A ce stade, le lecteur FreeWRL est opérationnel, à la fois comme application autonome (on la trouve dans le menu Applications > Images > FreeWRL) et comme extension de firefox.
Les résultats sont inégaux.
Il y a des sites qui marchent très bien, comme par exemple :
Il y a ceux qui marchent plus ou moins mais provoquent des messages, comme :
Et puis il y a des sites qui refusent de fonctionner et provoquent l'affichage dans la console de Firefox de messages plus ou moins ésotériques comme "/usb/bin/FreeWRL_Message problem reading file '.mozilla/firefox/ck0f0ff.default/cache/1107B187d02'" ou bien "/usb/bin/FreeWRL_Message V 1.0, I only know V2.0" (celui-ci est clair!) :