SDL2 No available video device
Résolu/Fermé[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 14 nov. 2022 à 17:36
- Sdl no available video device
- Montage video windows - Guide
- Comment télécharger une vidéo youtube - Guide
- Script vidéo youtube - Guide
- Comment mettre une vidéo sur powerpoint - Guide
- Ralentir video iphone - Guide
3 réponses
Modifié le 14 nov. 2022 à 17:13
Juste pour vérifier, peux-tu aussi donner le résultat de :
echo $(sdl2-config --cflags --libs)
et
whereis sdl2-config
ainsi que :
sudo find / -name sdl2-config
Sinon, ce que je tire des résultat que tu donnes jusqu'à présent :
- tu sembles utiliser Ubuntu Jammy Jellyfish
- sur cette distribution, le paquet officiel libsdl2-dev installe libSDL2-2.0.so.0 et un lien symbolique vers celle-ci libSDL2-2.0.so dans /usr/lib/x86_64-linux-gnu/ pour un système amd64
- ces fichiers paraissent bien installés à cet emplacement
Peux-tu juste vérifier que le lien symbolique est correct ?
ls -al /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so
doit donner "/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so -> libSDL2-2.0.so.0"
- cependant ton système comprend aussi des fichiers libSDL2 dans /usr/local/lib/ qui pourraient être ceux générés par ta tentative de compilation
- il est possible que ton système recherche en premier des correspondances dans /usr/local/lib
Si tu disposes toujours de ton répertoire de compilation de la SDL2, tu pourrais tenter de faire : make uninstall
et vérifier qu'il n'y a plus rien concernant la SDL2 dans /usr/local/lib/
Le fichier Makefile que tu as utilisé doit avoir une cible "uninstall". En tout état de cause il va indiquer les fichiers qu'il installe et leur emplacement (probablement /usr/local/lib/ si mon hypothèse est bonne).
Une fois que tu as pu faire cela et qu'il n'y a plus rien concernant la SDL2 dans /usr/local/lib/, tu devrais désinstaller et réinstaller le libsdl2-dev d'Ubuntu avec apt.
Une autre solution consisterait à supprimer manuellement ce qui se trouve dans /usr/local/lib/ ayant un rapport avec la SDL2, mais c'est un peu hasardeux, et tu devrais déplacer ces fichiers dans un répertoire de sauvegarde sous ton home, plutôt que de les supprimer d'un coup (avant que tu fasses cela envoie moi le résultat des 3 autres commandes que je mentionne ci-dessus, car il y a aussi le script sdl2-config à gérer, qui normalement est à /usr/bin/sdl2-config).
Ensuite tente de nouveau de compiler et exécuter le programme utilisant SDL_GetVideoDriver pour vérifier que tu as bien x11 et wayland dans ta liste.
Modifié le 14 nov. 2022 à 15:08
Salut arkoy,
$XDG_SESSION_TYPE n'est pas une commande, c'est une variable d'environnement. Pour afficher le contenu de la variable d'environnement en ligne de commande tu fais : "echo $XDG_SESSION_TYPE" comme je l'avais indiqué.
Vu ce que tu obtiens cela affiche certainement "x11" et je pense que tu arrives bien à passer de Wayland à X11 et inversement en changeant ton mode de démarrage de session via la roue dentée. Tu n'as pas à modifier custom.conf (que tu peux remettre en l'état).
Ton système graphique semble être en mesure de lancer une session X11 ou Wayland.
Peux tu vérifier quels sont les drivers vidéo supportés par ton installation de la SDL2 ?
#include <SDL2/SDL.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv){ if (SDL_Init(0) != 0) { printf("Error initializing SDL: %s\n", SDL_GetError()); return 1; } int nb_drivers = SDL_GetNumVideoDrivers(); for (int i = 0; i < nb_drivers; i++) printf("video driver %d: %s\n", i, SDL_GetVideoDriver(i)); SDL_Quit(); return 0; }
chez moi cela retourne :
video driver 0: x11 video driver 1: wayland video driver 2: dummy
ce qui indique le support des deux.
bonjour Dal,
en effet quand je fais la commande echo $XDG_SESSION_TYPE ça met met bien x11
mais quand je lance ton programme ça m'affiche :
video driver 0: dummy video driver 1: evdev
Donc bizarrement x11 n'apparait pas.
Donc si je comprends bien ma session lance bien en x11 mais n'a pas de driver x11 ?
Car j'ai déjà regardé et normalement il est bien installé et à jour.
Modifié le 14 nov. 2022 à 15:45
Ton système Ubuntu n'a aucun problème de driver. C'est ton installation de SDL2 qui n'inclut pas les drivers x11 ou wayland, en d'autres termes : la bibliothèque SDL2 à laquelle le compilateur a accès pour la liaison de ton exécutable n'est pas compilée avec le support de x11 ou wayland.
Est-tu sûr que ta SDL2 provient des paquets Ubuntu ?
Le méta-paquet libsdl2-dev pour Ubuntu Bionic Beaver inclut a priori les paquets libwayland-dev et libx11-dev :
https://packages.ubuntu.com/bionic/libsdl2-dev (et il semblerait aberrant que la libSDL2 fournie par Ubuntu ne soit pas compilée avec leur support)
Tu dis que tu as installé la SDL2 via les paquets, n'aurais-tu pas aussi tenté de compiler par toi même la bibliothèque SDL2 aussi à partir de ses sources ?
Si oui, il est possible que tu aies 2 versions de la SDL2 installées sur ton système, l'une que tu aurais tenté de compiler toi même (en n'incluant pas de réel support graphique) et l'autre provenant des dépôts Ubuntu officiels et que la chaîne de compilation tombe sur la "mauvaise".
En fait, "evdev" est le seul driver rapporté par ta SDL2 lorsqu'on lui demande d'indiquer les drivers vidéos dont elle dispose, et, à ma connaissance ce n'est pas un driver de sortie graphique, mais un driver générique pour Linux qui gère des périphériques d'entrée (clavier, joystick, écran tactile,...).
14 nov. 2022 à 15:51
En effet, au début j'avais tenté d'installer par moi même, mais quand j'ai vu qu'il y avait des paquets, je me suis arrêté et supprimer les fichiers que je venais de faire. Peut-être qu'il reste quand même des restes. J'ai tenté de fouillé pour voir où aurait pu s'installer d'autres fichier, mais je ne trouve pas.
Il y a une possibilité de tout enlever et réinstaller avec les paquets de base ?
Modifié le 14 nov. 2022 à 16:07
OK, on va déjà vérifier comment la liaison est faite avec la SDL2 sur ton exécutable.
Peux-tu me donner le résultat de :
readelf -d ./prog | grep NEEDED
cela devrait indiquer le nom de la bibliothèque partagée liée à l'exécutable ./prog
Donne aussi le résultat de :
dpkg -l | grep -i SDL2
pour obtenir la liste des paquets installés sur ton système Ubuntu comprenant les lettres SDL2 majuscules ou minuscules.
14 nov. 2022 à 16:11
0x0000000000000001 (NEEDED) Bibliothèque partagée: [libSDL2-2.0.so.0] 0x0000000000000001 (NEEDED) Bibliothèque partagée: [libc.so.6]
Voici ce que j'obtiens.
SI je lis bien je n'ai bien qu'une librairie utilisé.
8 nov. 2022 à 17:53
Salut arkoy,
Sur ton système Linux, est-ce que tu lances ta session graphique avec X11 ou Wayland ?
Modifié le 8 nov. 2022 à 20:52
Les versions actuelles d'Ubuntu et Debian, par exemple, proposent par défaut le lancement de sessions graphiques sous Wayland (au lieu de Xorg, c'est à dire X11).
Dans une console, tape :
echo $XDG_SESSION_TYPE
Qu'est-ce qui est retourné ?
(ton dual boot n'a rien à voir)
8 nov. 2022 à 20:51
En effet je suis en wayland.
Il faudrait sur je lance mon sdl sur wayland au moment de compiler ?
8 nov. 2022 à 20:54
Si tu compiles juste comme ceci (sans lier à libX11), qu'arrive-t-il :
gcc -o prog SAE.c $(sdl2-config --cflags --libs)
8 nov. 2022 à 20:58
J'ai toujours le même soucis, c'est ce que je faisais de base :/
14 nov. 2022 à 17:32
Pour la première commande :
-I/usr/local/include/SDL2 -D_REENTRANT -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2
Pour la seconde :
sdl2-config: /usr/bin/sdl2-config /usr/local/bin/sdl2-config /usr/share/man/man1/sdl2-config.1.gz
La 3e:
Pour la 4e j'obtiens bien ce qu'il faut :
Après avoir supprimé dans le usr/lib et réinstallé les paquets, et lancé le programme j'obtiens bien :
video driver 0: x11
video driver 1: wayland
video driver 2: KMSDRM
video driver 3: dummy
Mon programme de base se lance bien.
Merci beaucoup !!!!
14 nov. 2022 à 17:36
Cool, bravo :-)