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

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

这到底是怎么回事,有没有办法在不重启的情况下恢复它?

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


编辑:我应该只说明控制台(HDMI / RCA输出,USB键盘)受到影响,而不是ssh连接(继续工作)很好。)

评论

您可以通过按alt + F1-5切换到另一个tty吗?

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

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

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

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

#1 楼

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

这表明图形API设计不良,但是因为整个事情是专有的,没有办法知道,也没有办法解决。

(我在PC上观察到类似的行为,其中SDL会“抓住”鼠标指针,并且在崩溃或崩溃时不会解除锁定。被杀死,但永远不会与显示器一起出现。)

评论


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

–柔印
2012年6月23日23:52

降落伞只会抓SIGSEGV,不会抓SIGKILL。

–阿利斯泰尔·巴克斯顿
2012年6月27日9:36

有趣的是,我将不得不尝试将SIGKILL发送给GLES2演示之一,然后看看会发生什么。

– Finnw
2012年6月27日13:39

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

– Paul Slocum
17-6-17 at 4:23



#2 楼

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

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

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