Консоль непридатна після запуску програми SDL


22

Коли певна SDL -А програми (наприклад , PrBoom , DOSBox ) виконується з консолі (НЕ X) і закінчується раптово з якої - небудь причини (наприклад , убитий або помилка сегментації), екран блокується; Він просто стає чорним і залишається чорним, поки ви не перезавантажитесь.

Це на відміну від демонстрацій hello_video та hello_triangle, які повертають консоль у початковий стан, навіть якщо вони різко припиняються.

Що саме тут йде не так, і чи є спосіб відновити його без перезавантаження?

Я спостерігав це в Debian Squeeze . Я не знаю, чи впливають інші ОС.


Редагувати : Я повинен уточнити лише консоль (вихід HDMI / RCA, USB-клавіатура), а не ssh-з'єднання (які продовжують працювати нормально.)


Чи можете ви перейти на інший натискаючий tty alt+F1-5?
Відхилення

@ Життя, ні, ці комбінації клавіш не мають ефекту.
finnw

Хм .. Чи можете ви використовувати команди SysRq та REISUB ?
Відхилення

@ Живих немає, але (1) Можливість перезавантажуватись не є проблемою: я можу випустити команду відключення від ssh-з'єднання і (2) шукаю рішення, яке не потребує перезавантаження.
finnw

Ох шш. Добре, що у вашему ssh-повідомленні ви можете вбити X-сервер та перезапустити. Або перезапустити рівень запуску.
Jivings

Відповіді:


6

Це майже напевно помилка у графічному драйвері. Здається, що SDL ініціалізує графічний API, і в цей момент графічний драйвер переймає дисплей. Оскільки ви вбили SDL, він ніколи не запускав код для дезініціалізації графічного API, і тому він просто сидить, чекаючи графічних команд, які ніколи не прийдуть.

Це вказує на погано розроблений графічний API, але оскільки ця річ є власницею, немає ніякого способу знати і немає можливості її виправити.

(Я спостерігав подібну поведінку на ПК, де SDL "хапає" вказівник миші і не знімає його, якщо він вибивається або вбивається, але ніколи з дисплеєм.)


1
У SDL є "парашут", який він нормально використовує для очищення навіть у разі segfault, так що щось ще не в порядку.
Flexo

Парашут буде ловити лише SIGSEGV, а не SIGKILL.
Алістер Бакстон

Це цікаво, мені доведеться спробувати надіслати SIGKILLодну з демонстрацій GLES2 і подивитися, що станеться.
finnw

Я розробляю додаток SDL у 2017 році, і все ще здається, що потенційно можлива помилка з використанням CTRL-C для виходу з програми SDL. У мене виникла проблема, що SDL та термінальний вхід поступово ставатимуть безвідповідальними, коли я тестував додаток, повторно запускав його та виходив із CTRL-C. Я виявив, що якщо я запускаю програму належним чином із програми SDL, тоді у мене ніколи не виникає проблем.
Пол Слокум

1

Я знаю, що це дуже давнє питання, але я зіткнувся з подібною проблемою, коли запускав Mupen64Plus через EmulationStation. Моя консоль відображатиметься добре, але клавіатура не відповідає, поки я не перезавантажуюсь.

Проблема полягала в тому, що після закінчення програми клавіатура залишалася в режимі RAW. Рішення було додати наступний рядок в кінець скрипта , який керував його: kbd_mode -a. Це повертає клавіатуру до режиму XLATE та дозволяє їй працювати знову.

Хоча це не вирішує проблему "чорного екрану", я здогадуюсь, що має бути аналогічний спосіб скидання рамного буфера консолі для повернення відео.


-5

Я не можу сказати, у чому проблема з програмою SDL, але просто ввівши:

reset

повинні знову зробити консоль корисною


4
... Як він повинен це набрати, якщо консоль непридатна?
Відхилення

1
Що сказав Дживінгс. Клавіатура не реагує на AFACT, це не лише екран.
finnw

І видача цієї команди з ssh (перенаправлення на / dev / tty1) також не допомогло.
finnw

Вам слід видалити свою відповідь, щоб не потрапити в небуття
Alex L

3
У якості бонусу ви отримаєте значок рівного тиску
Девід Сайкс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.