Matlab sous linux
le lundi 8 janvier 2007, 17:20 - Lien permanent catégorie : informatique
Je ne vais pas décrire l'installation d'une version Linux mais l'émulation d'une version Windows (ici la 7.1) grâce à Wine. En fait, ce n'est pas vraiment une émulation, Wine implémente l’API Windows par-dessus X et Unix. Je testerai peut-être plus tard un véritable émulateur comme Qemu par exemple. C'est plutôt pratique lorsqu'on a qu'une licence pour cette version, qu'on ne veut pas en acheter une autre et qu'on utilise Matlab de façon régulière notamment avec Simulink. J'utilise également octave qui offre une bonne compatibilité mais qui ne permet pas de profiter des outils graphiques tels que Simulink ou encore la fenêtre de graphes qui permet pas mal de mise en forme. Il existe aussi Scilab développé par l'INRIA mais que je n'ai jamais utilisé. Il me semble qu'il est moins compatible qu'octave mais qu'il est quelquefois utilisé dans l'industrie.
Bref, voyons voir comment faire tourner cela.
Il faut d'abord installer Wine. Pour cela, utilisez votre gestionnaire de paquet préféré (portage, apt-get, etc.) ou compilez vous-mêmes les sources. Je n'explique rien ici, je pense qu'il n'y aura pas de problème.
Il faut ensuite que la partition Windows qui contient le programme Matlab soit accessible en lecture (pour moi ce sera /mnt/win).
Normalement, si on essaie de lancer Matlab avec la commande suivante (le chemin de l'exécutable peut être différent évidemment) :
$ wine /mnt/win/Program\ Files/Matlab/bin/win32/MATLAB.exe &
On obtient comme erreur :
License Manager Error -9.
MATLAB is not licensed on this host.
This error may be caused by a hard-drive modification.
Please reinstall MATLAB.
For more information, see The MathWorks Support page at
http://www.mathworks.com/support and search for
"license manager error -9"
Cela veut simplement dire que le contrôle de la licence de Matlab n'est pas bon. Celui-ci est effectué par rapport au numéro de série du disque dur sur lequel le logiciel est installé. Il faut donc préciser à Wine ce numéro de série. On le récupère avec la commande suivante :
$ cat /mnt/win/Program\ Files/Matlab/bin/win32/license.dat| grep DISK_SERIAL_NUM | head -n 1
Ensuite on lance l'utilitaire de configuration de Wine.
$ winecfg &
Dans l'onglet Lecteurs, on sélectionne C: et on clique sur Montrer avancés. On choisit Assigner manuellement et on inscrit le numéro récupéré précédemment dans N° de série. Il peut peut-être y avoir des variantes en fonction de la version de Wine (0.9.22 pour la mienne) mais le principe doit rester le même.
Si on essaie de relancer Matlab avec Wine, on va voir apparaître un semblant de GUI mais qui a du mal s'afficher et dont le rafraîchissement ne va pas du tout. Le problème vient en fait des runtimes Java livrés avec Matlab qui servent à unifier l'ensemble des différentes fenêtres (commande, espace de travail, historique, etc.) et afficher la barre de menu principale et qui réagissent mal avec Wine.
Une première solution est de faire tourner Matlab sans Java, on a alors une fenêtre principale pour les calculs mais pas de menu ni de bouton... Pour cela, il faut taper :
$ wine /mnt/win/Program\ Files/Matlab/bin/win32/MATLAB.exe -nojvm &
Mais il faut bien avouer que ce n'est pas vraiment pratique. La solution est de remplacer les runtimes Java utilisés par Matlab par ceux officiels. Pas le choix, il faut rebooter sous Windows puis télécharger le JRE (pas besoin du JDK) sur le site de Sun. Ces runtimes sont passés en version 1.6 récemment, je pense qu'il n'y a pas de souci mais je n'ai testé qu'avec la version 1.5 ; donc s'il y a un problème essayez avec la version précédente, il se peut que ce soit cela. En effet, avec la version 1.6, cela génère des exceptions. Il faut donc récupérer la version 1.5 des runtimes de chez Sun à cet endroit.
Ensuite on sauvegarde le dossier jre1.5.0 situé dans le répertoire C:\Program files\Matlab\sys\java\jre (en l'archivant, par exemple). Puis on copie le dossier C:\Program Files\Java\jre1.5.0 (ou quelque chose d'approchant) dans le répertoire précédent. Ensuite, on édite le fichier jre.cfg en y inscrivant la bonne version de Java (1.5.0 ou 1.6.0). Pour être sûr que ça marche, lancer Matlab ; si tout est ok, on peut repasser sous Linux, sinon vérifiez que vous avez bien tout fait correctement ou replacez l'ancien dossier.
De retour sous Linux, on peut mettre en place un petit script. Créez un fichier matlab dans /usr/local/bin puis inscrivez-y le code suivant :
#! /bin/sh
wine /mnt/win/Program\ Files/Matlab/bin/win32/MATLAB.exe &
Rendez ce script exécutable en tapant
# chmod +x matlab
Il ne reste plus qu'à taper
matlab dans votre shell et à vous de jouer.
Commentaires
Bon, le commentaire qui suit est celui d'une ignare (je précise pour ceux qui auraient pas compris
). Globalement, on arrive bien à faire marcher MatLab avec toutes tes indications, mais il me reste toutefois une ou deux remarques à faire :
1/ j'ai pas réussi à le faire fonctionner avec Java 1.6.0 même en suivant tes consignes ... bon faut voir si ça vient pas de moi ou de mon pc
2/ j'ai actuellement une version pour personne âgée qui ne voit pas bien ... enfin disons que j'ai certaines fenêtres qui s'ouvrent avec une taille démesurée ... et un plot qui fonctionne pas bien !! Par contre, à quoi c'est du ... j'aimerais bien savoir !
++
Bien, pour mon deuxième problème, la solution a été trouvée. En réalité, la version de wine que l'on a avec Ubuntu avec apt-get est loin d'être la plus récente, et elle n'est malheureusement pas adaptée. Pour récupérer une version plus récente (et donc adéquate pour faire tourner matlab), il suffit d'ajouter dans votre fichier sources list (sudo gedit /etc/apt/sources.list dans un terminal) "deb http://wine.budgetdedicated.com/apt dapper main". Attention, il faut une clé publique pour ce dépôt ... des wikis ubuntu fournissent alors la marche à suivre
(en gros, taper en root successivement les deux commandes suivantes :
Ensuite, soit on fait un apt-get update, soit on se sert de Synaptic et du bouton Recharger.
Il suffit au finale de sélectionner tous les paquets concernant wine si vous êtes sous Synaptic, ou d'utiliser apt-get avec un terminal.
Bon, dsl d'avoir pourri ton blog Jérôme avec un commentaire qui n'intéressait que moi, mais bon on sait jamais, il pourra peut-être resservir
Mais non au contraire, ça peut toujours être utile à quelqu'un.
Par contre, ça renforce mon choix de Gentoo comme distribution grâce, entre autres, à portage (son gestionnaire de paquets) qui permet de choisir quelle version du logiciel on souhaite installer et qui gère également parfaitement les dépendances.
$ wine /mnt/win/Program\ Files/Matlab/bin/win32/MATLAB.exe -nojvm &
c'est extra, cette commande m'a plu. comme ça tu as toutes les fonctions Matlab sur un linux.
j'utilise ubuntu et je fais de la programmation sur matlab. pour l'instant je n'ai pas besoin des graphes. J'utilise surtout les fonction d'optimisation (fmincon).
Bonjour,
J'ai essayé d'appliquer ta procédure, malheureusement je possède une licence matlab associée à un nom d'utilisateur et non à un numéro de volume. Est-ce que tu aurais une idée sur ce qu'il faudrait faire pour pouvoir lancer matlab avec wine ?
J'avoue que ça fait un petit moment que je n'utilise plus Matlab et qu'il n'est plus installé sur mon PC. Je ne sais pas si tu utilises la version 7.1 avec laquelle j'ai fait mon test ou une version plus récente qui ne repose peut-être plus sur le même type d'identification. En tout cas, impossible pour moi de tester.
Ce que je peux te conseiller c'est d'aller faire un tour sur la base wine qui concerne Matlab et de poser la question.
Une autre idée est que Matlab utilise éventuellement une clé du registre sous Windows pour gérer cette identification et que cette clé pourrait être reportée dans le fichier .wine/system.reg (existe au moins sur la version 1.1.4 de wine que j'ai actuellement).
Bonjour,
Je ne comprend pas ce qu'il faut taper à la place de ça "wine /mnt/win/Program\ Files/Matlab/bin/win32/MATLAB.exe "
La localisation de mon matlab sur Windows est C:/Program Files/MATLAB/R2009b/bin/matlab.exe.
Il faut que je tape quoi alors?
Tu doit taper
wine /mnt/win/Program\ Files/MATLAB/R2009b/bin/matlab.exe
ou la part
"/mnt/win/"
ce l' adresse de ton drive c, as monté sous Linux. Par example, on ma Ubuntu 9.10 j'ai le drive c: comme
/media/B62CBEDD2CBE97B7
alors, après avoir monte le disk, je taperai
wine /media/B62CBEDD2CBE97B7/Program\ Files/MATLAB/R2009b/bin/matlab.exe