netsurfがクラッシュすると、Linuxフレームバッファはテキストコンソールに復元されません。

netsurfがクラッシュすると、Linuxフレームバッファはテキストコンソールに復元されません。

Linuxを実行している古いコンピュータ(vesafb、musl libc、busyboxを使用)では、インターネットサーフィン時々、メモリ不足の状態でセグメントが発生します。これにより、最後の画像がディスプレイに表示され続け、トグルVTの使用を含めて入力しても効果がないようですCtrl-Alt-Fx。なぜこれが起こるのか、どのように解決するのか知りたいです。

私は幸せにSSHでマシンに接続して終了することができますが、dmesgには何もないようです。 Arch(systemd)を実行するIntel GPUを搭載したシステムでは、これは発生しません。動作は説明したものと似ています。プログラムがクラッシュしたときにフレームバッファを再初期化する、SDLも使用します。

~によるとhttps://dvdhrm.wordpress.com/2013/08/24/how-vt-switching-works/、カーネルはVTトランジションを処理する必要があるため、この動作は私にとって驚くべきことです。

答え1

これは、SDLがターミナルモードをに設定し、KD_GRAPHICS入力をに設定したために発生しますK_MEDIUMRAW。入力が文字ではなくキーコードに渡されるKD_GRAPHICSと、端末はディスプレイに描画を停止します。両方の値を合計またはK_MEDIUMRAWにリセットして、端末を(少なくとも部分的に)復元できます。KD_TEXTK_XLATEK_UNICODE

私はコンソールを復元するための小さなプログラムを(既存のコードに基づいて)書いたがうまくいくようです。https://github.com/hobbitalastair/termfix

また、見ることができますビデオをフレームバッファにレンダリングするときに仮想コンソールを非表示にするベストプラクティスそしてhttp://lct.sourceforge.net/lct/x60.html

関連情報