运行SDL应用程序后控制台无法使用


22

当某些基于SDL的程序(例如prboomdosbox)从控制台(不是X)运行并由于某种原因(例如被终止或段错误)突然终止时,屏幕将锁定;它只是变成黑色,并保持黑色直到您重新启动。

这与hello_video和hello_triangle演示相反,后者即使突然终止也会使控制台返回其原始状态。

这里到底出了什么问题,有没有办法在不重启的情况下恢复它?

我已经在Debian Squeeze中观察到了这一点。我不知道其他操作系统是否受到影响。


编辑:我应该只说明受影响的控制台(HDMI / RCA输出,USB键盘),而不是ssh连接(它们可以正常工作)。


您可以将另一个tty按下alt+F1-5吗?
Jivings 2012年

@Jivings,不,这些键组合无效。
finnw 2012年

嗯..可以使用SysRq和REISUB命令吗?
Jivings 2012年

@Jivings否,但是(1)重启的能力不是问题:我可以从ssh连接发出关闭命令,并且(2)我正在寻找不需要重启的解决方案。
finnw 2012年

哦,嘘。在ssh提示符下,您可以杀死X服务器并重新启动。或重新启动运行级别。
Jivings 2012年

Answers:


6

这几乎可以肯定是图形驱动程序中的错误。听起来SDL正在初始化图形API,此时图形驱动程序将接管显示。因为您杀死了SDL,所以它从未运行过用于初始化图形API的代码,因此它只是在等待永远不会出现的图形命令。

这表明设计不好的图形API,但是因为整个东西都是专有的,所以没有办法知道也没有办法解决。

(我在PC上观察到了类似的行为,其中SDL会“抓住”鼠标指针,并且在崩溃或被杀死时不会松开鼠标指针,但永远不会在显示器上显示。)


1
SDL具有一个“降落伞”,即使发生段错误,它也可以正常部署以进行清理,因此仍然存在一些问题。
Flexo 2012年

降落伞只会抓SIGSEGV,不会抓SIGKILL。
Alistair Buxton 2012年

很有意思,我将不得不尝试发送SIGKILL到GLES2演示之一,然后看看会发生什么。
finnw 2012年

我正在2017年开发SDL应用程序,但使用CTRL-C退出SDL应用程序似乎仍然存在错误。我遇到的问题是,当我测试应用程序,反复运行它并使用CTRL-C退出时,SDL和终端输入将逐渐变得无响应。我发现,如果我从SDL应用程序中正确退出该应用程序,那么我就永远不会遇到问题。
Paul Slocum

1

我知道这是一个非常老的问题,但是通过EmulationStation运行Mupen64Plus时遇到了与此类似的问题。我的控制台可以正常显示,但是在我重新启动之前,键盘将完全没有响应。

问题是程序终止后键盘仍处于RAW模式。解决方案是将以下行添加到运行它的shell脚本的末尾:kbd_mode -a。这会将键盘重置为XLATE模式,并使它可以再次工作。

虽然这不能解决问题的“黑屏”部分,但我猜测必须有一种类似的方法可以重置控制台帧缓冲区以恢复视频。


-5

我不能说SDL应用程序有什么问题,但只需输入:

reset

应该使控制台再次可用


4
...如果控制台不可用,他应该如何键入?
Jivings 2012年

1
吉文斯怎么说。键盘的AFACT无响应,而不仅仅是屏幕。
finnw 2012年

并且从ssh发出此命令(重定向到/ dev / tty1)也没有帮助。
finnw 2012年

您应该删除你的答案,所以你不要让NEG-repped被遗忘
亚历大号

3
作为奖励,您将获得同伴压力徽章
David Sykes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.