다음 이전 차례

7. 콘솔간 이동

콘솔간 이동의 기본 키는 Alt-Fn 또는 Ctrl-Alt-Fn이다. X 환경이나 최근 버전의 dosemu에서는 Ctrl-Alt-Fn 만이 제대로 작동할 것이다. 많은 keymaps에서 Alt-오른화살 키와 Alt-왼화살 키로 할당된 콘솔간의 순환식 이동을 허용한다.

XFree86 1.3은 X 윈도우로 이동할 때, Alt 키가 눌려 있는 것을 인식하지 못한다. 따라서 다른 VT로 즉각 되돌아가지 못하고, Alt 키를 떼어야 반응을 한다. 다른 곳에서는 잘 작동된다. 커널은 항상 모든 키의 누름/뗌 상황을 추적한다. (물론 가능한 한 그렇다는 이야기다. 몇몇 키보드의 어떤 키들은 눌리거나(FOCUS 9000의 PFn 키) 뗄 때(많은 키보드의 Pause 키) 스캔코드를 보내지 않아 어쩔 수 없는 경우도 있다.)

XFree86 1.3은 처음 시작될 때, 문자 ROM에 로드된 폰트를 저장해두고 콘솔간 이동을 할 때, 그것을 꺼내어 사용한다. 따라서 VT에서 setfont를 사용하면 X로 이동했다가 되돌아오면 이전 값으로 복귀된다. X 환경에서 setfont를 사용하면 이상한 일들이 생긴다.

chvt 명령을 사용하면 프로그램 사용중에도 VT를 바꿀 수 있다.

7.1 가상 콘솔의 갯수 바꾸는 방법

이 질문은 아직도 가끔 나오지만 사실 디폴트로 설정된 갯수으로도 충분하다. 커널 1.1.54이후로 1부터 63 사이의 가상 콘솔이 존재한다. 새로운 가상 콘솔은 생성되면서 열린다. deallocvt라는 유틸리티를 사용하면 없앨 수 있다. (그러나 없앨려면 여기에 연결된 프로세스가 하나도 없고, selection이나 gpm 같은 프로그램이 이 콘솔에 있는 텍스트를 선택하고 있지 않아야 한다.)

이보다 이전 버전의 커널인 경우라면 include/linux/tty.h에 있는

        #define NR_CONSOLES     8
를 바꾸어주고 커널을 컴파일하면 된다. (이 숫자를 63보다 크게 하지는 말 것.)

가상 콘솔이 아예 없는 경우라면 MAKEDEV 또는 mknod ttyN c 4 N (여기서 N은 tty 번호를 지정)로 tty 디바이스를 만들 수 있다. 예를 들어보면

        for i in 9 10 11 12; do mknod /dev/tty$i c 4 $i; done
좀 더 좋은 예로는 (이 방법이 사용자와 허가권에 유의한다.),
        for i in 9 10 11 12; do /dev/MAKEDEV tty$i; done

getty를 돌릴 VC가 새로 필요하다면 /etc/inittab에 라인을 추가하면 된다. (하지만 사용하고 있는 getty가 두개만 있는 것이 좋다. 그리고 추가로 더 필요해지면 동적으로 생성하면 된다. 사용자가 모든 콘솔을 사용하지 않는다면 이 방식이 보다 많은 메모리를 사용할 수 있다. /etc/inittab를 열어서 최초의 두개를 제외한 모든 getty를 주석으로 막아 두어라.)

콘솔을 동적으로 할당받을 때는 getty가 하나나 두개 정도만 돌도록 하는 것이 가장 쉽다. open -l -s bash라고 하면 더 많이 열 수 있다. (연결된 프로세스가 없는) 사용하지 않는 콘솔은 deallocvt(예전에는 disalloc)을 사용하여 없앨 수 있다. 그러나 작업중에 갑자기 콘솔이 더 필요해져서 당장 open 명령을 내릴 bash 프롬프트가 없다면 어떻게 하는가? 다행이도 현재 콘솔에서 무슨 일을 하건, 한 큐로 새로운 콘솔을 만드는 방법이 있다.

kbd-0.95.tar.gz에 있는 spawn_login을 설치하고 /etc/rc.local에 다음과 같이 넣어 두어라.

        loadkeys << EOF
        alt keycode 103 = Spawn_Console
        EOF
        spawn_login &
그 다음에 Alt-위화살 키를 누르면 login을 돌리고 있는 새로운 VC가 생성될 것이다. (물론 생성되어서 그곳으로 이동된다.) spawn_login & 대신에 spawn_console &를 설치했다면 아마도 새 콘솔에 bash가 돌고 있을 것이다. open-1.4.tgzdynamic-vc-1.1.tar.gz를 참고하라.

최신 버전의 init를 가지고 있다면 /etc/inittabkbrequest아래에서 Spawn_Console 키가 눌렸을 때 무슨 작동을 하는지 설정할 수 있다. inittab(5)를 참고할 것.

(이 동작은 완전히 다른 것으로 설정되어 있을 수 있다. Spawn_Console 키는 내가 사용하기 때문에 부르는 이름일 뿐이다. 다른 목적으로 사용한다면 덜 헷갈리도록 다른 이름을 붙이는 것이 좋을 것이다. 어떤 사람들은 /etc/inittab

        kb::kbrequest:/sbin/shutdown -h now
라고 넣어두고, keymap에는
        control alt keycode 79 = KeyboardSignal
        control alt keycode 107 = KeyboardSignal
를 넣어두고서 Ctrl-Alt-End를 시스템 셧다운 키로 사용하기도 한다.

루트 권한으로의 접속은 /etc/securetty에 등록되어 있는 터미널에서만 가능하다. /etc/ttys/etc/ttytype 화일에서 터미널 설정값을 읽는 프로그램이 있다. 이런 화일을 가진 사용자가 추가로 콘솔을 생성했다면 이 콘솔 항목을 이 화일에 추가하는 것도 괜찮은 생각이다.


다음 이전 차례