다음 이전 차례

9. raw 모드에서 탈출하는 방법

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 키만 누르면 키보드가 제정신으로 돌아오게 될 것이다.


다음 이전 차례