Démo SDL sous Windows

Notre démo SDL (accessible sur https://github.com/orel33/sdl2-demo) fonctionne nativement sous la plupart des Linux. Pour la faire fonctionner sous Windows 10, il existent sur le web de nombreux tutoriels à votre disposition. En particulier, il est possible d'utiliser SDL2 sous Windows en se basant sur un sous-système Linux (WSL). D'autres approches sont également possibles en utilisant une machine virtuelle Linux dans votre Windows (virtualbox) ou encore en utilisant MinGW.

Connexion au CREMI en SSH

Une façon de compiler et de lancer la démo depuis un poste Windows est de ... se connecter en SSH sur une machine Linux ! Avec le plug in Remote SSH de VS Code conseillé en début d'UE, il est possible de compiler le code source, mais impossible de le lancer : l'erreur Error: SDL_Init VIDEO (No available video device) vous empêche de ~jouer~ travailler.

Une astuce est d'utiliser le logiciel MobaXterm, qui est une solution très complète dès que l'on veut travailler sur une machine à distance (il vous resservira très certainement plus tard). Après avoir cliqué sur Start Terminal, connectez-vous à une ordinateur libre du CREMI en deux lignes commandes :

  • ssh -Y votrelogin@sshproxy.emi.u-bordeaux.fr
  • ssh -Y votrelogin@ordilibre.emi.u-bordeaux.fr

en remplçant votrelogin par votre idnum.

L'option -Y est ici indispensable pour pouvoir exécuter le jeu.

ordilibre doit être un ordinateur de préférence libre (vérifiez sur Celcat !), que vous pouvez éventuellement allumer à distance en utilisant ce lien. Pour rappel, un tuto complet pour se connecter en SSH au CREMI est disponible ici.

Compilez, et vous pouvez maintenant lancer le jeu ! (avec un lag plus ou moins important suivant la qualité de votre connexion)

Bonus : vous pouvez malgré tout éditer votre code dans VPL en double cliquant sur les fichiers dans l'interface à gauche de la fenêtre, et en ouvrant avec VSCode. Lors de la première sauvegarde, une fenêtre vous demander de confirmer la remontée automatique de vos modification locales sur le serveur.

Application graphique avec WSL

Si vous êtes malgré tout un irréductible de Windows et que vous souhaitez lancer le jeu en local, il faut commencer par installer un sous-système Linux ou WSL (par exemple Ubuntu) dans votre Windows. Ce sous-système ne permet pas d'afficher nativement des programmes graphiques, comme notre démo. Pour y arriver, il faut commencer par installer dans votre Windows un serveur X comme VcXsrv en laissant les options par défaut. Puis, il faut ensuite installer dans votre sous-système Ubuntu les paquets utiles pour télécharger, compiler et exécuter la démo (git, gcc, cmake, sdl2, ...). Attention, il ne faut pas oublier de positionner à chaque session la variable d'environnement DISPLAY=:0 pour indiquer que le serveur X se trouve sur l'écran 0 de la machine Windows locale.

En résumé :

$ sudo apt install mesa-utils
$ export DISPLAY=:0
$ glxgears

glxgears

Tutoriels :

En cas de problème

Si le programme glxgears ne s'affiche pas correctement, c'est probablement que vous utilisez la version 2 de WSL. Pour le vérifier, il suffit de taper la commande wsl -l -v dans PowerShell. Dans ce cas, il faut commencer par arrêter VcXsrv avec les Gestionnaire de Tâches Windows, avant de le relancer en désactivant l'option Native OpenGL et en activant l'option Disable Access Control. De plus, dans WSL2, le sous-système Linux et la machine Windows n'ont pas la même adresse IP ! Il faut donc corriger la variable DISPLAY de la façon suivante : DISPLAY=<gateway>:0 en remplaçant <gateway> par l'adresse IP de la passerelle obtenue en tapant la commande route -n. Par exemple :

$ sudo apt install net-tools
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.26.96.1     0.0.0.0         UG    0      0        0 eth0
172.26.96.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0
$ export DISPLAY=172.26.96.1:0
$ glxgears

Plus d'info : https://stackoverflow.com/questions/61110603/how-to-set-up-working-x11-forwarding-on-wsl2

Si ça ne marche toujours pas, cela peut venir du firewall qui bloque l'accès réseau au serveur X. Corrigez le firewall manuellement pour autoriser VcXsrv. Ou plus simplement : réinstallez VcXsrv en veillant à valider l'exception dans le firewall, qui est généralement proposée automatiquement lors du premier lancement.

Une autre solution, moins élégante et moins performante, consiste à re-basculer sur la version 1 de WSL. Il faut alors taper la commande suivante dans PowerShell :

> wsl -l -v
  NAME                   STATE           VERSION
  Ubuntu-20.04           Running         2
> wsl --set-version Ubuntu-20.04 1

Lancement de la démo

Une fois que le programme glxgears s'affiche correctement, il ne devrait plus y avoir de problème pour compiler et lancer la démo. Il suffit de faire :

$ sudo apt install libsdl2-dev libsdl2-image-dev  libsdl2-ttf-dev
$ sudo apt install git gcc cmake
$ git clone https://github.com/orel33/sdl2-demo.git
$ cd sdl2-demo ; mkdir build ; cd build ; cmake .. ; make
$ ./demo

La démo s'affiche alors normalement dans votre Windows :-)

demo win10