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_TEXT
K_XLATE
K_UNICODE
私はコンソールを復元するための小さなプログラムを(既存のコードに基づいて)書いたがうまくいくようです。https://github.com/hobbitalastair/termfix
また、見ることができますビデオをフレームバッファにレンダリングするときに仮想コンソールを非表示にするベストプラクティスそしてhttp://lct.sourceforge.net/lct/x60.html。