Console inutilisable après l'exécution de l'application SDL

22

Lorsque certains SDL programmes fondés sur (par exemple prboom , DOSBox ) sont exécutés à partir de la console (pas X) et se terminent brusquement pour une raison quelconque (par exemple , tués ou segfaults), l'écran se bloque; Il devient noir et reste noir jusqu'à ce que vous redémarriez.

Cela contraste avec les démos hello_video et hello_triangle qui ramènent la console à son état d'origine même si elles sont interrompues brutalement.

Que se passe-t-il exactement ici et existe-t-il un moyen de le récupérer sans redémarrer?

J'ai observé cela dans Debian Squeeze . Je ne sais pas si d'autres OS sont affectés.


Edit : je dois préciser que la console (sortie HDMI / RCA, clavier USB) est affectée, pas les connexions ssh (qui continuent de bien fonctionner).

finnw
la source
Pouvez-vous passer à un autre tty en appuyant sur alt+F1-5?
Jivings
@Jivings, non, ces combinaisons de touches n'ont aucun effet.
finnw
Hmm .. Pouvez-vous utiliser SysRq et les commandes REISUB ?
Jivings
@Jivings non, mais (1) La possibilité de redémarrer n'est pas le problème: je peux émettre une commande d'arrêt à partir d'une connexion ssh et (2) je recherche une solution qui ne nécessite pas de redémarrage.
fin
Oh chut. Eh bien, dans votre invite ssh, vous pouvez tuer le serveur X et redémarrer. Ou redémarrez le niveau d'exécution.
Jivings

Réponses:

6

Il s'agit presque certainement d'un bogue dans le pilote graphique. Il semble que SDL initialise l'API graphique, auquel moment le pilote graphique prend le relais de l'affichage. Parce que vous avez tué SDL, il n'a jamais exécuté le code pour désinitialiser l'API graphique, et il attend donc simplement des commandes graphiques qui ne viendront jamais.

Cela indique une API graphique mal conçue, mais comme tout est propriétaire, il n'y a aucun moyen de le savoir et aucun moyen de le réparer.

(J'ai observé un comportement similaire sur un PC où SDL "attrape" le pointeur de la souris et ne le désengage pas s'il se bloque ou est tué, mais jamais avec l'affichage.)

Alistair Buxton
la source
1
SDL dispose d'un "parachute" qu'il déploie normalement pour nettoyer même en cas de fautes de segmentation, donc quelque chose ne va pas encore.
Flexo
Le parachute n'attrapera que SIGSEGV, pas SIGKILL.
Alistair Buxton
C'est intéressant, je vais devoir essayer d'envoyer SIGKILLà l'une des démos GLES2 et voir ce qui se passe.
finnw
Je suis en train de développer une application SDL en 2017 et il semble toujours y avoir un bogue avec l'utilisation de CTRL-C pour quitter une application SDL. J'ai eu le problème que SDL et l'entrée de terminal ne répondraient pas progressivement lorsque je testais l'application, l'exécutais à plusieurs reprises et quittais avec CTRL-C. J'ai constaté que si je quitte correctement l'application à partir de l'application SDL, je n'ai jamais le problème.
Paul Slocum
1

Je sais que c'est une très vieille question, mais je rencontrais un problème similaire à celui-ci lors de l'exécution de Mupen64Plus via EmulationStation. Ma console apparaîtrait bien, mais le clavier ne répondrait absolument pas jusqu'à ce que j'effectue un redémarrage.

Le problème était que le clavier restait en mode RAW après la fin du programme. La solution est d'ajouter la ligne suivante à la fin du script shell qui a couru: kbd_mode -a. Cela réinitialise le clavier en mode XLATE et lui permet de fonctionner à nouveau.

Bien que cela ne résout pas la partie "écran noir" du problème, je suppose qu'il doit y avoir un moyen analogue de réinitialiser le tampon de la console pour récupérer la vidéo.

glindsey1979
la source
-5

Je ne peux pas dire quel est le problème avec l'application SDL, mais en tapant simplement:

reset

devrait rendre la console réutilisable

neofutur
la source
4
... Comment est-il censé taper ça si la console est inutilisable?
Jivings
1
Ce que Jivings a dit. Le clavier ne répond pas AFACT, ce n'est pas seulement l'écran.
finnw
Et lancer cette commande depuis ssh (rediriger vers / dev / tty1) n'a pas aidé non plus.
finnw
Vous devez supprimer votre réponse afin de ne pas vous retrouver dans l'oubli
Alex L
3
En prime, vous obtiendrez l'insigne de pression des pairs
David Sykes