Consola inutilizable después de ejecutar la aplicación SDL

22

Cuando ciertos programas basados ​​en SDL (p. Ej. , Prboom , dosbox ) se ejecutan desde la consola (no X) y finalizan abruptamente por algún motivo (p. Ej., Muertos o segfaults), la pantalla se bloquea; Simplemente se vuelve negro y permanece negro hasta que reinicie.

Esto está en contraste con las demostraciones hello_video y hello_triangle que devuelven la consola a su estado original incluso si se terminan abruptamente.

¿Qué está mal exactamente aquí, y hay alguna manera de recuperarlo sin reiniciar?

He observado esto en Debian Squeeze . No sé si otros sistemas operativos están afectados.


Editar : debo aclarar que solo la consola (salida HDMI / RCA, teclado USB) se ve afectada, no las conexiones ssh (que continúan funcionando bien).

finnw
fuente
¿Se puede cambiar a otro tty estar presionando alt+F1-5?
Jivings
@Jivings, no, esas combinaciones de teclas no tienen efecto.
finnw
Hmm .. ¿Puedes usar SysRq y los comandos REISUB ?
Jivings
@Jivings no, pero (1) La capacidad de reiniciar no es el problema: puedo emitir un comando de apagado desde una conexión ssh y (2) estoy buscando una solución que no requiera reiniciar.
finnw
Oh ssh Bueno, en su solicitud ssh, podría matar el servidor X y reiniciar. O reinicie el nivel de ejecución.
Jivings

Respuestas:

6

Es casi seguro que es un error en el controlador de gráficos. Parece que SDL está inicializando la API de gráficos, momento en el cual el controlador de gráficos se hace cargo de la pantalla. Debido a que eliminó a SDL, nunca ejecutó el código para desinicializar la API de gráficos, por lo que solo está esperando los comandos de gráficos que nunca vendrán.

Esto indica una API de gráficos mal diseñada, pero debido a que todo está patentado, no hay forma de saberlo ni arreglarlo.

(He observado un comportamiento similar en una PC donde SDL "agarra" el puntero del mouse y no lo desarma si se bloquea o se mata, pero nunca con la pantalla).

Alistair Buxton
fuente
1
SDL tiene un "paracaídas" que se despliega normalmente para limpiar incluso en caso de fallas seguras, por lo que algo no está bien.
Flexo
El paracaídas solo atrapará SIGSEGV, no SIGKILL.
Alistair Buxton
Eso es interesante, tendré que intentar enviarlo SIGKILLa una de las demostraciones de GLES2 y ver qué sucede.
finnw
Estoy desarrollando una aplicación SDL en 2017 y todavía parece haber un error al usar CTRL-C para salir de una aplicación SDL. Tuve el problema de que SDL y la entrada del terminal dejarían de responder gradualmente cuando estaba probando la aplicación, ejecutándola repetidamente y saliendo con CTRL-C. Descubrí que si salgo de la aplicación correctamente desde la aplicación SDL, entonces nunca tengo el problema.
Paul Slocum
1

Sé que esta es una pregunta muy antigua, pero me encontré con un problema similar al ejecutar Mupen64Plus a través de EmulationStation. Mi consola se vería bien, pero el teclado no respondería totalmente hasta que realice un reinicio.

El problema era que el teclado permanecía en modo RAW después de que el programa terminaba. La solución fue añadir la siguiente línea al final de la secuencia de comandos shell que lo dirige: kbd_mode -a. Esto restablece el teclado al modo XLATE y le permite volver a funcionar.

Si bien esto no resuelve la parte del problema de la "pantalla negra", supongo que debe haber una forma análoga de restablecer el framebuffer de la consola para recuperar el video.

glindsey1979
fuente
-5

No puedo decir cuál es el problema con la aplicación SDL, pero solo escribo:

reset

debería hacer que la consola sea utilizable nuevamente

neofutur
fuente
44
... ¿Cómo se supone que escriba eso si la consola no se puede usar?
Jivings
1
Lo que dijo Jivings. El teclado no responde AFACT, no es solo la pantalla.
finnw
Y emitir este comando desde ssh (redirigir a / dev / tty1) tampoco ayudó.
finnw
Deberías eliminar tu respuesta para que no te descuiden en el olvido
Alex L
3
Como beneficio adicional, recibirá la insignia de presión de grupo
David Sykes,