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
Tutoriels :
- https://korben.info/linux-wsl-gui-interface-graphique-windows-10.html
- https://doc.ubuntu-fr.org/wsl#installer_un_serveur_x
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 :-)