K_RAW 키보드 모드를 사용하는 프로그램이 K_XLATE로 키보드 모드를 복귀시키지
않고 종료되면 아무것도 할 수 없는 상태가 되어 버린다. 심지어는 Ctrl-Alt-Del도
먹지 않는다. 하지만 재수가 좋으면 재부팅 버튼을 누르지 않아도 되는 경우가 있다.
(이것이 당연히 바람직한 것이, 리부팅으로 Hack 게임을 죽이면 이것을 하던 사람들이
화를 낼 것이 아닌가! 또한 화일 시스템이 손상을 입을 수도 있다.)
쉬운 방법으로는 다른 터미널이나 다른 시스템에서 접속하여 kbd_mode -a
를
실행시키면 된다.
아래의 과정에서 X는 실행중이지 않고, 디스플레이는 텍스트 모드이며 사용자가
bash 프롬프트에 있으며 키보드는 US배열이고 종료 문자는 Ctrl-C임을 가정했다.
1 단계. X 기동.
2를 누른채로 F12를 누르면서 곧바로 =를 누른다. 이렇게 하면 X가 뜰 것이다.
(설명: 임의의 키를 하나 눌렀을 때 만약 키코드 K가 발생한다면 그 키를
뗄 때는 K+128이라는 키코드가 발생하게 된다. 아마도 사용하고 있는 쉘은
이 때 발생하는 높은 값의 문자를 제대로 처리하지 못할 것이다. 따라서
키를 누르고 있으면 이렇게 높은 값의 키코드가 발생하는 것을 막을 수 있다.
하지만, 재빠르게 동작해야 한다. 왜냐하면 그렇지 않으면 키 반복이 시작되기
때문이다. 숫자 2는 이전 작업을 무조건 종료시키는 Ctrl-C를 내보내고,
F12는 X를, =는 리턴을 발생시킨다.)
아마도 이렇게 띄운 X는 화면을 회색으로 만들었을 것이다. 왜냐하면 .xinitrc
가
지정되지 않았기 때문이다. 하지만 Ctrl-Alt-Fn은 먹히기 때문에 사용자는 다른
VT로 이동할 수 있다. (물론 Ctrl-Alt-Backspace도 작동하므로 종료할 수 있지만
현 상태에서 종료는 원하는 바가 아니다.)
2 단계: 키보드 모드 변경 설정.
(간단히 sleep 5; kbd_mode -a
라고 하면 된다.)
3 단계: 다시 X 종료. Alt-Fx(종종 Alt-F7)로 X로 돌아가서 Ctrl-Alt-Backspace를 누르면 X가 종료된다. 5초가 지나면 키보드가 다시 말을 듣게 될 것이다.
이런 상황에 상시 대비하고 싶다면
\215A\301
(3 심볼)을 kbd_mode -a
에 대한 alias로
만들어 두자. 이제는 단지 = F7 = 이렇게 3 키만 누르면 키보드가 제정신으로
돌아오게 될 것이다.