SDL2 No available video device

Résolu/Fermé
arkoy - 8 nov. 2022 à 17:21
[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

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

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
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.

2

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
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094 > arkoy
14 nov. 2022 à 17:36

Cool, bravo :-)

0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
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.

1

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
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094 > arkoy
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,...).

0
arkoy > [Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024
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 ?

0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094 > arkoy
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.

0
arkoy > [Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024
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é.

0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
8 nov. 2022 à 17:53

Salut arkoy,

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

0

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
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094 > arkoy
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)

0
arkoy > [Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024
8 nov. 2022 à 20:51

En effet je suis en wayland.

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

0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094 > arkoy
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)
0
arkoy > [Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024
8 nov. 2022 à 20:58

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

0