다음 이전 차례

4. 터미널 재설정

화면에 이상한 문자들이 가득 차거나 키보드를 두드려도 이상한 선문자들이 출력된다면 어떻게 해야 하나?

대부분의 프로그램에서 ^L을 누르면 화면을 다시 그린다. 모뎀의 잡음이나 음성 메시지가 화면에 뿌려질 때 이 기능이 제법 유용하다. clear 명령은 화면을 깨끗이 청소한다.

reset 명령은 콘솔 드라이버를 재설정한다. 이 명령은 화면이 이상한 그림 문자로 가득 차거나 화면의 라인 수가 줄어들었을 때 아주 유용하다. 시스템에 이 명령어가 없거나 명령을 내려도 뭔가 다른 동작을 수행한다면 PATH가 걸려있는 디렉토리에 아래와 같은 내용으로 실행화일을 만들어 사용하면 된다.

        #!/bin/sh
        echo -e \\033c
동작 내용은 콘솔에 ESC c 문자를 보내는 것이다.

어째서 화면이 때때로 맛이 가서 25줄이 아니라 24줄짜리 또는 1줄짜리 화면으로 되는가? 이 문제의 주범은 원격으로 로그할 때 TERM=linux를 사용하지 않고 TERM=vt100(또는 이와 비슷한 24줄짜리 터미널)을 사용하기 때문이다. 이 문제가 /dev/tty2에서 발생했다면 다른 VT에서 아래와 같이 입력하면 된다.

        % cat > /dev/tty2
        ^[c
        ^D
(이 내용은 cat에 4 심볼인 ESC, c, ENTER, Ctrl-D를 누르는 것을 의미한다.) 그 후에 /dev/tty2에서 (^L을 눌러) 화면을 정리하면 문제가 해결될 것이다. 물론 근본적인 해결법은 올바른 termcap이나 terminfo를 사용하는 것이다.

왜 화면에 바이너리 화일을 (cat 등을 사용해서) 뿌리면 이상한 선문자들이 나타나는가? 그것은 이스케이프 시퀀스를 바꾸는 문자들이 몇가지 있는데, 우연히 바이너리에 그런 시퀀스가 포함되어 있었기 때문이다. ESC c는 모든 경우에 해결책이 되는 일반적인 재설정 시퀀스이다. 하지만 잘못된 것이 어떤 것인지 정확히 알고 있는 경우에는 다른 콘솔 특성까지 재설정하지 않고도 문제를 해결할 수 있다. 예를 들어 보자. 아래와 같이

        % cat
        ^N
        ^D
입력하면 셀 프롬프트는 온통 선문자로 표시될 것이다. 이제 (뭔지 알 수 없는 상태에서라도)
        % cat
        ^O
        ^D
라고 치면 모든 것이 원래대로 돌아올 것이다. (3개의 심볼 ^N (또는 ^O), ENTER, Ctrl-D가 cat을 사용하여 보내졌다.) 이 내부 사정을 이해하고 싶으면 아래 `콘솔 문자셋'을 읽어 보라.

이상한 폰트가 로드되어 디폴트 값으로 돌아가고 싶으면

        % setfont
라고 하면 된다. (이것은 디폴트 장소에 디폴트 폰트가 저장되어 있을 경우에만 효력이 있다.) 이 디폴트 폰트에 유니코드 맵이 들어있지 않다면 (그래서 액샌트가 있는 문자에 잘못된 심볼을 준다면)
        % loadunimap
라고 하면 된다. 예를 들어
        % loadkeys de-latin1
라고 치면, German 키보드가 되는데, 이 키보드에서는 Enter 키의 왼쪽에 있는 키는 a-움라우트에 해당한다. a-움라우트는 CP437 코드 페이지에서 발생하고 비디오 카드에 내장된 CP437 폰트가 있다면 작동을 할 것이다. 다른 예로 만약
        % setfont iso01.f16
라고 해서 ISO 8859-1 폰트를 로드하면, (폰트에 붙어있는 유니코드 맵이 없다면) setfont는 커널 유니코드 맵을 무효화시키고, 맵 없이 커널은 바로 폰트로 가게 되어 sio01.f16 폰트를 가진 ISO 8859-1 시스템에 올바르게 작동하게 된다. 하지만
        % setfont
명령으로 이전 폰트로 돌아가면 a-움라우트 대신에 대문자 시그마가 나타난다. 이 폰트에는 유니코드 맵이 포함되어 있지 않아 모든 액센트 문자가 섞이기 때문이다.
        % loadunimap
으로 디폴트 유니코드 맵을 로드하면 (이것은 디폴트 폰트로 적당한데) 모든 것이 다시 잘 될 것이다. 대개의 경우, loadunimap은 직접 호출되는 것이 아니라 setfont를 통하여 호출된다. 따라서 이전의 두 명령은 다음과 같이
        % setfont -u def
로 해도 된다. Ethiopian 폰트와 lat1u*.psf 폰트에는 유니코드 코드 맵이 포함되어 있다. 하지만 대부분의 다른 폰트에는 이것이 포함되어 있지 않다.

구형 터미널에서는 탭과 관계된 출력은 약간의 시간 지연이 필요하다. 이 경우

        % stty tab3
라고 하면 된다. (stty(1) 참조)

resizeconsSVGATextMode를 사용하면 비디오 모드를 바꿀 수 있다. 이것은 보통 출력쪽을 설정한다. 입력쪽은 잘못될 가능성이 있는 경우가 많다. XDOOM 또는 raw 모드를 사용하는 여러 프로그램이 다운되면 키보드는 계속해서 raw 모드 (또는 준 raw 모드) 상태에 있게 된다. 이 경우 명령을 시스템에 내리기가 곤란해진다. (아래 `raw 모드에서 빠져나가는 법' 참조) 부적절한 키맵이 로드되었다면

        % loadkeys -d
로 다시 디폴트 맵을 로드하면 된다. 하지만 아마도 `-'를 쳐 넣기가 어려울 것이다. 다른 방법으로
        % loadkeys defkeymap
라고 입력하면 된다. 때때로 글자 배열이 뒤바뀌는 경우도 있다. 알파벳권 지역에서는 크게 네 종류의 자판배열이 있다 : QWERTY, QWERTZ, AZERTY, DVORAK. 앞의 세가지는 자판 배열의 첫 여섯 글자를 따서 붙인 이름이고 대충 말해서 각각 영어, 독일어, 프랑스어권 배열을 나타낸다고 보면 된다. QWERTY와 비교해 보면, QWERTZ는 Y와 Z가 바뀌어있고, AZERTY는 Q와 A, W와 Z가 바뀌어 있고, M이 L 오른쪽(세미콜론 자리)에 있다. DVORAK은 완전히 다른 자판 배열이다.

4.1 키보드 하드웨어 재설정

뭔가가 잘못되는 경우는 대게 리눅스가 알고 있는 것보다 더 낮은 레벨에서 작업을 할 경우이다. 적어도 두 개의 (키보드와 키보드 콘트롤러) 저수준이 존재하는데, 이 수준에서 사용자는 "keyboard disable" 명령을 키보드 하드웨어에 내릴 수 있다. 어떤 키보드는 세가지 종류의 스캔코드중 하나를 고를 수 있도록 프로그램된 것도 있다.

하지만 이것이 문제가 된 경우에 대해서는 아는 바 없다.

어떤 키보드에는 맵 재설정 기능이 내장된 것도 있다. Stormy Henderson (stormy@Ghost.Net)에 의하면 `재수없게도 당신의 키보드가 다시 프로그램되었다면 (Gateway AnyKey 키보드상에서) control-alt-suspend_macro를 누르면 정상 상태로 되돌릴 수 있다고 한다.


다음 이전 차례