当 netsurf 崩溃时,Linux 帧缓冲区不会恢复到文本控制台

当 netsurf 崩溃时,Linux 帧缓冲区不会恢复到文本控制台

在运行 Linux 的旧计算机上(使用 vesafb、musl libc、busybox),网上冲浪在内存不足的情况下偶尔会出现段错误。当这样做时,最后一个图像在显示屏上保持可见,并且键入似乎没有任何作用,包括尝试使用 切换 VT Ctrl-Alt-Fx。我想知道为什么会这样,以及如何解决它。

我可以愉快地通过 SSH 连接到机器并将其关闭,并且 dmesg 中似乎没有任何内容。在具有 Intel GPU、运行 Arch (systemd) 的机器上不会发生这种情况。该行为与描述的类似当程序崩溃时重新初始化帧缓冲区,并且也在使用 SDL。

根据https://dvdhrm.wordpress.com/2013/08/24/how-vt-switching-works/,内核应该处理 VT 切换,所以这种行为对我来说似乎很令人惊讶。

答案1

这是由于 SDL 将终端模式设置为KD_GRAPHICS并将输入设置为引起的K_MEDIUMRAWKD_GRAPHICS导致终端停止绘制到显示器,同时K_MEDIUMRAW导致输入作为键码(而不是字符)传递。通过将两个值重置为KD_TEXTK_XLATEK_UNICODE,可以(至少部分)恢复终端。

我编写了(基于一些现有代码)一个用于恢复控制台的小程序,它似乎运行良好:https://github.com/hobbitalastair/termfix

也可以看看将视频渲染到帧缓冲区时隐藏虚拟控制台的最佳实践http://lct.sourceforge.net/lct/x60.html

相关内容