Konsol tidak dapat digunakan setelah menjalankan aplikasi SDL

22

Ketika program berbasis SDL tertentu (misalnya prboom , dosbox ) dijalankan dari konsol (bukan X) dan berakhir tiba-tiba karena beberapa alasan (misalnya terbunuh atau rusak), layar terkunci; Itu hanya menjadi hitam, dan tetap hitam sampai Anda reboot.

Ini berbeda dengan demo hello_video dan hello_triangle yang mengembalikan konsol ke keadaan semula meskipun dihentikan secara tiba-tiba.

Apa sebenarnya yang salah di sini, dan adakah cara untuk memulihkannya tanpa me-reboot?

Saya telah mengamati ini di Debian Squeeze . Saya tidak tahu apakah OS lain terpengaruh.


Sunting : Saya harus mengklarifikasi hanya konsol (output HDMI / RCA, keyboard USB) yang terpengaruh, bukan koneksi ssh (yang terus berfungsi dengan baik.)

menemukan
sumber
Bisakah Anda mengubah tty lain menjadi menekan alt+F1-5?
Jivings
@ Jivings, tidak, kombinasi tombol tersebut tidak berpengaruh.
finnw
Hmm .. Bisakah Anda menggunakan perintah SysRq dan REISUB ?
Jivings
@Jivings no, tapi (1) Kemampuan untuk reboot bukan masalah: Saya dapat mengeluarkan perintah shutdown dari koneksi ssh dan (2) Saya mencari solusi yang tidak memerlukan reboot.
finnw
Oh ssh. Nah di ssh prompt Anda, Anda bisa membunuh X server dan restart. Atau mulai ulang runlevel.
Jivings

Jawaban:

6

Ini hampir pasti merupakan bug pada driver grafis. Kedengarannya seolah-olah SDL menginisialisasi API grafik, di mana titik driver grafis mengambil alih tampilan. Karena Anda membunuh SDL, ia tidak pernah menjalankan kode untuk mendeinisialisasi API grafik, dan hanya duduk menunggu perintah grafis yang tidak akan pernah datang.

Ini menunjukkan API grafis yang dirancang dengan buruk, tetapi karena semuanya adalah milik, tidak ada cara untuk mengetahui dan tidak ada cara untuk memperbaikinya.

(Saya telah mengamati perilaku yang serupa pada PC di mana SDL "meraih" pointer mouse dan tidak mencabutnya jika crash atau terbunuh, tetapi tidak pernah dengan layar.)

Alistair Buxton
sumber
1
SDL memiliki "parasut" yang digunakannya secara normal untuk membersihkan bahkan dalam kasus segfault sehingga ada sesuatu yang tidak beres.
Flexo
Parasut hanya akan menangkap SIGSEGV, bukan SIGKILL.
Alistair Buxton
Itu menarik, saya harus mencoba mengirim SIGKILLke salah satu demo GLES2 dan melihat apa yang terjadi.
finnw
Saya sedang mengembangkan aplikasi SDL pada tahun 2017 dan sepertinya masih ada bug dengan menggunakan CTRL-C untuk keluar dari aplikasi SDL. Saya mempunyai masalah dimana SDL dan terminal input secara bertahap akan menjadi tidak responsif ketika saya menguji aplikasi, berulang kali menjalankannya dan berhenti dengan CTRL-C. Saya telah menemukan bahwa jika saya keluar dari aplikasi dengan benar dari dalam aplikasi SDL maka saya tidak pernah memiliki masalah.
Paul Slocum
1

Saya tahu ini adalah pertanyaan yang sangat lama, tapi saya mengalami masalah yang sama dengan ini ketika menjalankan Mupen64Plus via EmulationStation. Konsol saya akan terlihat bagus, tetapi keyboard akan benar-benar tidak responsif sampai saya melakukan reboot.

Masalahnya adalah keyboard itu tetap dalam mode RAW setelah program dihentikan. Solusinya adalah menambahkan baris berikut pada akhir dari script shell yang berlari itu: kbd_mode -a. Ini mengatur ulang keyboard ke mode XLATE dan memungkinkannya untuk berfungsi kembali.

Meskipun ini tidak menyelesaikan bagian "layar hitam" dari masalah, saya menduga pasti ada cara analog untuk mengatur ulang framebuffer konsol untuk mendapatkan video kembali.

glindsey1979
sumber
-5

Saya tidak bisa mengatakan apa masalahnya dengan aplikasi SDL, tetapi hanya mengetik:

reset

seharusnya membuat konsol dapat digunakan lagi

neofutur
sumber
4
... Bagaimana dia bisa mengetik itu jika konsol tidak dapat digunakan?
Jivings
1
Apa yang dikatakan Jivings. Keyboard AFAK tidak responsif, bukan hanya layar.
finnw
Dan mengeluarkan perintah ini dari ssh (redirect ke / dev / tty1) juga tidak membantu.
finnw
Anda harus menghapus jawaban Anda agar tidak diabaikan
Alex L
3
Sebagai bonus, Anda akan mendapatkan lencana tekanan teman sebaya
David Sykes