SDLアプリの実行後にコンソールが使用できなくなります


22

特定のSDLベースのプログラム(例:prboomdosbox)がコンソール(Xではなく)から実行され、何らかの理由(例:強制終了またはセグメンテーション違反)で突然終了すると、画面がロックします。ただ黒くなり、再起動するまで黒のままです。

これは、コンソールが突然終了した場合でもコンソールを元の状態に戻すhello_videoおよびhello_triangleデモは対照的です。

ここで何が間違っているのですか?再起動せずにそれを回復する方法はありますか?

Debian Squeezeでこれを観察しました。他のOSが影響を受けるかどうかはわかりません。


編集:コンソール(HDMI / RCA出力、USBキーボード)のみが影響を受け、ssh接続は影響を受けないことを明確にする必要があります(正常に動作し続けます)。


押すべき別のttyに変更できますalt+F1-5か?
Jivings

@Jivings、いいえ、これらのキーの組み合わせは効果がありません。
finnw

うーん。SysRqとREISUBコマンドを使用できますか?
Jivings

@Jivingsいいえ、しかし(1)再起動する能力は問題ではありません:ssh接続からシャットダウンコマンドを発行できます。(2)再起動を必要としないソリューションを探しています。
finnw

ああ sshプロンプトで、Xサーバーを強制終了して再起動できます。または、ランレベルを再起動します。
Jivings

回答:


6

これはほぼ確実にグラフィックスドライバーのバグです。SDLがグラフィックスAPIを初期化しているように聞こえますが、その時点でグラフィックスドライバーがディスプレイを引き継ぎます。SDLを強制終了したため、グラフィックスAPIを初期化解除するためのコードを実行したことはないため、今後はグラフィックスコマンドを待機しています。

これは、グラフィックAPIの設計が不適切であることを示していますが、すべてが独自仕様であるため、それを知る方法も修正する方法もありません。

(SDLがマウスポインターを「つかみ」、クラッシュまたは殺されてもマウスグラブを解除しないPCで同様の動作を観察しましたが、ディスプレイでは動作しません。)


1
SDLには「パラシュート」があり、セグメンテーション違反の場合でもクリーンアップするために正常に展開されるため、まだ正しくないことがあります。
フレキソ

パラシュートはSIGSILLではなくSIGSEGVのみをキャッチします。
アリステアバクストン

興味深いSIGKILLことです。GLES2デモの1つに送信して、何が起こるかを確認する必要があります。
finnw

2017年にSDLアプリを開発していますが、CTRL-Cを使用してSDLアプリを終了する際にバグがある可能性があります。アプリをテストし、繰り返し実行し、CTRL-Cで終了すると、SDLと端末入力が徐々に応答しなくなるという問題がありました。SDLアプリ内からアプリを適切に終了した場合、問題は発生しません。
ポールスローカム

1

これは非常に古い質問ですが、EmulationStationを介してMupen64Plusを実行すると、これと同様の問題に遭遇しました。コンソールは正常に表示されますが、再起動するまでキーボードはまったく反応しません。

問題は、プログラムが終了した後、キーボードがRAWモードのままであることでした。解決策は、それを実行したシェルスクリプトの最後に次の行を追加することkbd_mode -aでした。これにより、キーボードがXLATEモードにリセットされ、再び動作できるようになります。

これは問題の「黒い画面」部分を解決しませんが、ビデオを取り戻すためにコンソールのフレームバッファをリセットする類似の方法があるに違いないと思います。


-5

SDLアプリの問題点は言えませんが、入力するだけです。

reset

コンソールを再び使用可能にする必要があります


4
...コンソールが使用できない場合、どのように入力するのですか?
-Jivings

1
Jivingsが言ったこと。キーボードはAFACTに反応しません。画面だけではありません。
finnw

また、このコマンドをsshから発行する(/ dev / tty1にリダイレクトする)ことも役に立ちませんでした。
finnw

答えを削除して、忘却に否定されないようにする必要があります
アレックスL

3
ボーナスとして、ピアプレッシャーバッジを取得します
デビッドサイクス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.