![netsurf가 충돌할 때 Linux 프레임 버퍼가 텍스트 콘솔로 복원되지 않습니다.](https://linux55.com/image/120580/netsurf%EA%B0%80%20%EC%B6%A9%EB%8F%8C%ED%95%A0%20%EB%95%8C%20Linux%20%ED%94%84%EB%A0%88%EC%9E%84%20%EB%B2%84%ED%8D%BC%EA%B0%80%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%BD%98%EC%86%94%EB%A1%9C%20%EB%B3%B5%EC%9B%90%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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_TEXT
K_XLATE
K_UNICODE
나는 콘솔을 복원하기 위한 작은 프로그램을 (기존 코드를 기반으로) 작성했는데 잘 작동하는 것 같습니다.https://github.com/hobbitalastair/termfix
당신은 또한 볼 수 있습니다비디오를 프레임 버퍼로 렌더링할 때 가상 콘솔을 숨기는 모범 사례그리고http://lct.sourceforge.net/lct/x60.html.