Консоль не работает после запуска приложения SDL

22

Когда некоторые программы на основе SDL (например, prboom , dosbox ) запускаются с консоли (не X) и по какой-то причине внезапно завершают работу (например , сбои или ошибки), экран блокируется; Он просто становится черным и остается черным до перезагрузки.

Это отличается от демонстраций hello_video и hello_triangle, которые возвращают консоль в исходное состояние, даже если они внезапно завершаются.

Что именно здесь происходит не так, и есть ли способ восстановить его без перезагрузки?

Я наблюдал это в Debian Squeeze . Я не знаю, затронуты ли другие ОС.


Изменить : Я должен уточнить, что это касается только консоли (выход HDMI / RCA, клавиатура USB), а не соединения SSH (которые продолжают работать нормально.)

finnw
источник
Можете ли вы перейти на другой tty нажав alt+F1-5?
Jivings
@Jivings, нет, эти комбинации клавиш не имеют никакого эффекта.
finnw
Хм .. Можете ли вы использовать команды SysRq и REISUB ?
Jivings
@Jivings нет, но (1) возможность перезагрузки не является проблемой: я могу выполнить команду выключения из соединения ssh и (2) я ищу решение, которое не требует перезагрузки.
финн
Ох, шшшш Ну, в вашем ssh-приглашении вы можете убить X-сервер и перезапустить. Или перезапустите уровень запуска.
Jivings

Ответы:

6

Это почти наверняка ошибка в графическом драйвере. Звучит так, как будто SDL инициализирует графический API, после чего графический драйвер берет на себя отображение. Поскольку вы убили SDL, он никогда не запускал код для деинициализации графического API, и поэтому он просто ждет графических команд, которые никогда не появятся.

Это указывает на плохо разработанный графический API, но поскольку все это запатентовано, нет способа узнать и исправить его.

(Я наблюдал подобное поведение на ПК, где SDL «захватывает» указатель мыши и не удаляет его, если он падает или уничтожается, но никогда не отображается на дисплее.)

Алистер Бакстон
источник
1
У SDL есть «парашют», который он обычно развертывает для очистки даже в случае сбоев, поэтому что-то еще не так.
Флекс
Парашют будет ловить только SIGSEGV, а не SIGKILL.
Алистер Бакстон
Это интересно, я попробую отправить SIGKILLв одну из демонстраций GLES2 и посмотреть, что получится.
finnw
Я занимаюсь разработкой приложения SDL в 2017 году, и, возможно, все еще существует ошибка при использовании CTRL-C для выхода из приложения SDL. У меня была проблема с тем, что SDL и ввод с терминала постепенно перестали отвечать, когда я тестировал приложение, многократно запускал его и выходил с помощью CTRL-C. Я обнаружил, что если я правильно выйду из приложения из SDL, у меня никогда не возникнет проблемы.
Пол Слокум
1

Я знаю, что это очень старый вопрос, но я столкнулся с подобной проблемой при запуске Mupen64Plus через EmulationStation. Моя консоль будет отображаться нормально, но клавиатура будет полностью не реагировать, пока я не выполню перезагрузку.

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

Хотя это не решает проблему с «черным экраном», я предполагаю, что должен быть аналогичный способ сброса кадрового буфера консоли для возврата видео.

glindsey1979
источник
-5

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

reset

должен снова сделать консоль пригодной для использования

neofutur
источник
4
... Как он должен печатать это, если консоль непригодна?
Jivings
1
Что сказал Дживингс Клавиатура не реагирует на AFACT, это не просто экран.
finnw
И ввод этой команды из ssh (перенаправление на / dev / tty1) тоже не помог.
finnw
Вы должны удалить свой ответ, чтобы не оказаться в забвении
Alex L
3
В качестве бонуса вы получите значок давления со стороны сверстников
Дэвид Сайкс