netsurf가 충돌할 때 Linux 프레임 버퍼가 텍스트 콘솔로 복원되지 않습니다.

netsurf가 충돌할 때 Linux 프레임 버퍼가 텍스트 콘솔로 복원되지 않습니다.

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_TEXTK_XLATEK_UNICODE

나는 콘솔을 복원하기 위한 작은 프로그램을 (기존 코드를 기반으로) 작성했는데 잘 작동하는 것 같습니다.https://github.com/hobbitalastair/termfix

당신은 또한 볼 수 있습니다비디오를 프레임 버퍼로 렌더링할 때 가상 콘솔을 숨기는 모범 사례그리고http://lct.sourceforge.net/lct/x60.html.

관련 정보