SDL2 No available video device

Résolu
arkoy -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -

Bonjour à tous,

Je suis actuellement bloqué : SDL2 ne trouve aucun service vidéo

J'ai installé directement le package, et j'ai mis à jour mon X11, mais impossible de le faire fonctionné.

Voici le programme :

#include <SDL2/SDL.h>
#include <stdio.h>

int main(int argc, char** argv){

    if (SDL_Init(SDL_INIT_VIDEO)!=0){
        fprintf(stdout,"Echec %s \n",SDL_GetError());
        return -1;
    }
    SDL_Window* pWindow=NULL;
    pWindow=SDL_CreateWindow("oue",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,640,480,SDL_WINDOW_SHOWN);

    if (pWindow){
        SDL_Delay(3000);
        SDL_DestroyWindow(pWindow);
    }
    else{
        fprintf(stderr,"Erreur création de la fenêtre :%s\n",SDL_GetError());
    }
    SDL_Quit();
    return 0;   
}

Voici le retour console :

~/Documents/SAE$ gcc -o  prog SAE.c $(sdl2-config --cflags --libs) -lX11
~/Documents/SAE$ ./prog
Echec No available video device
 

Merci d'avance !

3 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     

    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.

    2
    1. arkoy
       

      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:

      /home/arkoy/.local/share/Trash/files/SDL2-2.24.2/sdl2-config
      /home/arkoy/.local/share/Trash/files/SDL2-devel-2.24.2-mingw/SDL2-2.24.2/x86_64-w64-mingw32/bin/sdl2-config
      /home/arkoy/.local/share/Trash/files/SDL2-devel-2.24.2-mingw/SDL2-2.24.2/i686-w64-mingw32/bin/sdl2-config
      /usr/bin/sdl2-config
      /usr/local/bin/sdl2-config
      find: ‘/run/user/1000/doc’: Permission non accordée
      find: ‘/run/user/1000/gvfs’: Permission non accordée
      

      Pour la 4e j'obtiens bien ce qu'il faut :

      lrwxrwxrwx 1 root root 16 mai   30 21:34 /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so -> libSDL2-2.0.so.0
      

      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 !!!!

      0
      1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108 > arkoy
         

        Cool, bravo :-)

        0
  2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     

    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.

    1
    1. arkoy
       

      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.

      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108 > arkoy
       

      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,...).

      0
    3. arkoy > [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention  
       

      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 ?

      0
    4. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108 > arkoy
       

      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.

      0
    5. arkoy > [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention  
       
      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é.

      0
  3. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     

    Salut arkoy,

    Sur ton système Linux, est-ce que tu lances ta session graphique avec X11 ou Wayland ?

    0
    1. arkoy
       

      Et bien si j'ai compris ce que je fais normalement je lance avec X11. Après mon linux est sur un dual boot, est-ce que ça peut être lié ?

      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108 > arkoy
       

      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)

      0
    3. arkoy > [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention  
       

      En effet je suis en wayland.

      Il faudrait sur je lance mon sdl sur wayland au moment de compiler ?

      0
    4. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108 > arkoy
       

      Si tu compiles juste comme ceci (sans lier à libX11), qu'arrive-t-il :

      gcc -o  prog SAE.c $(sdl2-config --cflags --libs)
      0
    5. arkoy > [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention  
       

      J'ai toujours le même soucis, c'est ce que je faisais de base :/

      0