Scroll to navigation

console_codes(4) Device Drivers Manual console_codes(4)

이름

console_codes - 리눅스 콘솔 제어문자와 제어 순서 구조

설명

The Linux console implements a large subset of the VT102 and ECMA-48 / ISO/IEC 6429 / ANSI X3.64 terminal controls, plus certain private-mode sequences for changing the color palette, character-set mapping, and so on. In the tabular descriptions below, the second column gives ECMA-48 or DEC mnemonics (the latter if prefixed with DEC) for the given function. Sequences without a mnemonic are neither ECMA-48 nor VT102.

모든 출력과정이 끝나고 문자들이 콘솔 드라이버에 실제 프린팅을 위해 도착한 후에, 가장 먼저 일어나는 일은 진행을 위해 쓰인 코드들이 프린팅을 위한 코드들로 바뀌는 것이다.

If the console is in UTF-8 mode, then the incoming bytes are first assembled into 16-bit Unicode codes. Otherwise, each byte is transformed according to the current mapping table (which translates it to a Unicode value). See the Character Sets section below for discussion.

일반적인 경우, Unicode 값은 폰트 인덱스로 바뀌어서, 비디오 메모리에 저장된다. 그래서 대응하는 glyph (비디오 ROM에 있는 것과 같이)가 화면에 나타난다. Unicode의 사용(과 PC hardware의 디자인)에서는 512가지 다른 glyph를 동시에 사용할 수 있다.

If the current Unicode value is a control character, or we are currently processing an escape sequence, the value will treated specially. Instead of being turned into a font index and rendered as a glyph, it may trigger cursor movement or other control functions. See the Linux Console Controls section below for discussion.

hard-wire terminal control을 프로그램에 넣는 것은 일반적으로 좋은 일은 아니다. 리눅스는 터미널 기능의 terminfo(5) 데이터 베이스를 지원한다. 콘솔 escape 시퀀스를 직접 내보내는 것 보단, terminfo을 사용하려 할 것이다. -스크린 라이브러리와. ncurses(3), tput(1), 혹은 reset(1). 를 알고 난다면.

Linux console controls

이 섹션에선 리눅스 콘솔 상에서 특별한 기능들을(예를 들자면 현제 커서 위치에서 plyph를 쓰는 것 같은) 하는 모든 제어문자와 escape 시퀀스를 다루었다.

Control characters

A character is a control character if (before transformation according to the mapping table) it has one of the 14 codes 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b (VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a (SUB), 1b (ESC), 7f (DEL). One can set a "display control characters" mode (see below), and allow 07, 09, 0b, 18, 1a, 7f to be displayed as glyphs. On the other hand, in UTF-8 mode all codes 00–1f are regarded as control characters, regardless of any "display control characters" mode.

제어 문자를 가지고 있다면, 그것은 즉시 적용되고 사라진다. (그것이 escape 시퀀스 중에 있다 하더라도.) 그리고 escape 시퀀스는 다음 문자로 계속된다. (하지만, ESC는 어떻게든 아직 끝나지 않은 이전의 것을 중지시키고, 새로운 escape 시퀀스를 시작한다. 그리고 CAN과 SUB는 어떤 escape 시퀀스라도 끝낸다.) 인증된 제어 문자는 BEL, BS, HT, LF, VT, FF, CR, SO, SI, CAN, SUB, ESC, DEL, CSI.이다. 이것들은 의도대로 동작한다:

beeps;
는 한 컬럼 역행한다. (단, 행의 시작은 지나치지 않는다);
는 다음 텝의 마지막으로 가거나 이전 텝의 마지막이 없다면 줄의 끝으로 간다;
all give a linefeed, and if LF/NL (new-line mode) is set also a carriage return;
은 케리지를 리턴한다;
는 G1문자군을 활성화한다;
는 G0문자군을 활성화한다;
abort escape sequences;
는 escape 시퀀스를 시작한다;
은 무시된다;
는 ESC에 해당된다. [.

ESC- but not CSI-sequences

ESC c RIS 리셋.
ESC D IND 개행 문자.
ESC E NEL 새 줄.
ESC H HTS 텝을 현제 컬럼에 고정시킨다.
ESC M RI 역 개행 문자.
ESC Z DECID DEC private identification. The kernel returns the string ESC [ ? 6 c, claiming that it is a VT102.
ESC 7 DECSC Save current state (cursor coordinates, attributes, character sets pointed at by G0, G1).
ESC 8 DECRC Restore state most recently saved by ESC 7.
ESC % 선택한 문자군의 시퀀스를 시작한다.
ESC % @    Select default (ISO/IEC 646 / ISO/IEC 8859-1)
ESC % G     UTF-8을 선택한다.
ESC % 8     UTF-8 (obsolete)을 선택한다.
ESC # 8 DECALN DEC 스크린 정렬 테스트 - 스크린을 E's으로 채운다.
ESC ( Start sequence defining G0 character set (followed by one of B, 0, U, K, as below)
ESC ( B Select default (ISO/IEC 8859-1 mapping).
ESC ( 0 VT100 그래픽 맵핑을 선택한다.
ESC ( U 널 맵핑을 선택한다. - 문자 ROM으로 바로.
ESC ( K Select user mapping - the map that is loaded by the utility mapscrn(8).
ESC ) Start sequence defining G1 (followed by one of B, 0, U, K, as above).
ESC > DECPNM 숫자 키패드 모드를 설정한다
ESC = DECPAM 어플리케이션 키패드 모드를 설정한다.
ESC ] OSC Operating System Command prefix.
ESC ] R 색상표를 리셋한다.
ESC ] P Set palette, with parameter given in 7 hexadecimal digits nrrggbb after the final P. Here n is the color (0–15), and rrggbb indicates the red/green/blue values (0–255).

ECMA-48 CSI sequences

CSI (or ESC []는 세미콜론으로 구분되는 십진수 매개 변수의(거의 NPAR(16)) 시퀀스로 실행된다. 비어있는 매개 변수는 0값이 주어진다. 매개 변수의 시퀀셜은 앞에 하나의 물음표를 붙여놓았을 것이다.

하지만, CSI [ (or ESC [ []뒤에선 문자 하나가 읽히고, 이 모든 시퀀스가 무시된다. (발상은 반항되는 기능키를 무시하는 것이다.)

CSI 시퀀스는 그것의 마지막 문자에 의해 결정된다.

@ ICH 표시된 공간 문자의 수를 입력한다.
A CUU 표시된 열의 수만큼 커서를 올린다.
B CUD 표시된 열의 수만큼 커서를 내린다.
C CUF 표시된 행의 수만큼 커서를 오른쪽으로 옮긴다.
D CUB 표시된 행의 수만큼 커서를 왼쪽으로 옮긴다.
E CNL 표시된 열의 수만큼 1행의 아래로 옮긴다.
F CPL 표시된 열의 수만큼 1행의 위로 옮긴다.
G CHA 현제 열에서 표시된 행으로 옮긴다.
H CUP 표시된 행과 열로 커서를 옮긴다. (1,1에서 시작).
J ED 화면을 지운다 (디폴트 값: 커서가 있는 곳부터 화면의 끝까지).
ESC [ 1 J: 처음부터 커서가 있는 곳까지 지운다.
ESC [ 2 J: 모든 화면을 다 지운다.
ESC [ 3 J: erase whole display including scroll-back buffer (since Linux 3.0).
K EL 줄을 지운다. (디폴트 값:커서에서부터 줄의 끝까지).
ESC [ 1 K: 줄의 시작부터 커서가 있는 곳까지 지운다.
ESC [ 2 K: 줄 전체를 지운다.
L IL 표시된 수만큼 빈 줄을 삽입한다.
M DL 지정된 수만큼의 줄을 지운다.
P DCH 현제 줄에서 지정된 숫자만큼의 문자를 삭제한다.
X ECH 현제 줄에서 지정된 숫자만큼의 문자를 지운다.
a HPR 표시된 행의 수만큼 커서를 오른쪽으로 옮긴다.
c DA ESC [ ? 6 c: 에게 `VT102다.'라고 답한다'.
d VPA 현제 행에서 지정된 열만큼 옮긴다.
e VPR 표시된 열의 수만큼 커서를 내린다.
f HVP 지정된 열과 행으로 움직인다.
g TBC 매개 변수없이: 현제 위치에서 텝을 지운다.
ESC [ 3 g: 모든 텝을 지운다.
h SM 모드를 설정한다 (아래 참조).
l RM 모드를 리셋한다 (아래 참조).
m SGR 속성을 설정한다 (아래 참조).
n DSR 상태 보고 (아래 참조).
q DECLL 키보드 LED를.
ESC [ 0 q: 모든 LED를 끈다.
ESC [ 1 q: Scroll Lock LED를 설정한다.
ESC [ 2 q: Num Lock LED를 설정한다.
ESC [ 3 q: Caps Lock LED를 설정한다
r DECSTBM 스크롤 영역을 설정한다; 매개 변수는 첫 열과 끝 열.
s ? 커서의 위치를 저장한다.
u ? 커서의 위치를 재지정한다.
` HPA 현제 열에서 표시된 행으로 옮긴다.

ECMA-48 Select Graphic Rendition

The ECMA-48 SGR sequence ESC [ parameters m sets display attributes. Several attributes can be set in the same sequence, separated by semicolons. An empty parameter (between semicolons or string initiator or terminator) is interpreted as a zero.

param 결과
0 모든 속성을 디폴트로 리셋한다.
1 볼드체로 설정한다.
2 밝기(색 디스플레이에서 시뮬레이트 된 색)를 반으로 설정한다.
3 set italic (since Linux 2.6.22; simulated with color on a color display)
4 set underscore (simulated with color on a color display) (the colors used to simulate dim or underline are set using ESC ] ...)
5 깜빡임을 설정한다.
7 리버스 비디오를 설정한다
10 reset selected mapping, display control flag, and toggle meta flag (ECMA-48 says "primary font").
11 select null mapping, set display control flag, reset toggle meta flag (ECMA-48 says "first alternate font").
12 select null mapping, set display control flag, set toggle meta flag (ECMA-48 says "second alternate font"). The toggle meta flag causes the high bit of a byte to be toggled before the mapping table translation is done.
21 set underline; before Linux 4.17, this value set normal intensity (as is done in many other terminals)
22 일반적인 세기를 설정한다.
23 italic off (since Linux 2.6.22)
24 언더라인 끄기
25 깜빡임 끄기
27 리버스 비디오 끄기
30 검은색 전경 설정
31 붉은색 전경 설정
32 녹색 전경 설정
33 갈색 전경 설정
34 파란색 전경 설정
35 자홍색 전경 설정
36 청록색 전경 설정
37 하얀색 화경 설정
38 256/24-bit foreground color follows, shoehorned into 16 basic colors (before Linux 3.16: set underscore on, set default foreground color)
39 set default foreground color (before Linux 3.16: set underscore off, set default foreground color)
40 검은색 배경 설정
41 붉은색 배경 설정
42 녹색 배경 설정
43 갈색 배경 설정
44 파란색 배경 설정
45 자홍색 배경 설정
46 청록색 배경 설정
47 하얀색 배경 설정
48 256/24-bit background color follows, shoehorned into 8 basic colors
49 기본 배경 설정
90..97 set foreground to bright versions of 30..37
100..107 set background, same as 40..47 (bright not supported)

Commands 38 and 48 require further arguments:

;5;x 256 color: values 0..15 are IBGR (black, red, green, ... white), 16..231 a 6x6x6 color cube, 232..255 a grayscale ramp
;2;r;g;b 24-bit color, r/g/b components are in the range 0..255

ECMA-48 Mode Switches

DECCRM (default off): 디스플레이 설정 chars.
DECIM (default off): 삽입 모드 설정.
LF/NL (default off): 자동적으로 LF, VT 혹은 CR과 FF의 에코를 발생.

ECMA-48 Status Report Commands

Device status report (DSR): 응답은 ESC [ 0 n (Terminal OK).
Cursor position report (CPR): 응답은 ESC [ y ; x R, where x,y is the cursor location.

DEC Private Mode (DECSET/DECRST) sequences

ECMA-48에 대한 설명은 없다. Set Mode sequences를 리스트에 올렸다; Reset Mode sequences는 마지막'h'를 'l'로 바꾸면 된다.

DECCKM (default off): 설정되면, 커서키는 ESC보다 ESC O 접두사를 보낸다[.
DECCOLM (default off = 80 columns): 80/132 col mode switch. 드라이버 소스에 의하면 이것만으로는 충분치 못하다고 한다; resizecons(8) 와 같은 유저 모드의 유틸리티가 콘솔 비디오 카드상의 하드웨어 레지스터를 바꿔야만 한다.
DECSCNM (default off): 리버스 비디오 모드를 설정한다.
DECOM (default off): 설정하면, 커서 어드레싱은 스크롤링 구역의 상위 왼쪽 코너와 관련된다.
DECAWM (default on): autowrap을 켜진 상태로 설정한다. 이 모드에서는, 80열(DECCOLM 이 켜졌을때는 132열)후에 나온 그래픽 문자가 다음 열의 시작을 밀어낸다.
DECARM (default on): 키보드 자동 반복을 켠다.
X10 Mouse Reporting (default off): 리포팅 모드를 1로 설정한다.(혹은 0을 리셋한다.)—아래를 참조.
DECTECM (default on): 커서를 보이게 한다.
X11 Mouse Reporting (default off): 리포팅 모드를 2로 설정한다.(혹은 0으로 리셋한다.)—아래 참조.

Linux Console Private CSI Sequences

The following sequences are neither ECMA-48 nor native VT102. They are native to the Linux console driver. Colors are in SGR parameters: 0 = black, 1 = red, 2 = green, 3 = brown, 4 = blue, 5 = magenta, 6 = cyan, 7 = white; 8–15 = bright versions of 0–7.

ESC [ 1 ; n ] n에 해당하는 색을 언더라인 색으로 설정한다.
ESC [ 2 ; n ] n에 해당하는 색을 딤 색으로 설정한다.
ESC [ 8 ] 현제 색을 디폴트 속성과 한쌍으로 만든다.
ESC [ 9 ; n ] 화면 공백의 간격을 n분으로 설정한다.
ESC [ 10 ; n ] 벨의 주파수를 Hz로 설정한다.
ESC [ 11 ; n ] 벨의 지속시간을 msec으로 설정한다.
ESC [ 12 ; n ] 열거된 콘솔을 앞으로 가져온다.
ESC [ 13 ] 화면 공백을 없앤다.
ESC [ 14 ; n ] VESA 파워다운 간격을 분으로 설정한다.
ESC [ 15 ] Bring the previous console to the front (since Linux 2.6.0).
ESC [ 16 ; n ] Set the cursor blink interval in milliseconds (since Linux 4.2).

Character sets

커널은 콘솔상에서 바이트의 변환을 4개정도 구분한다. 그 4가지 테이블은 아래와 같다: a) Latin1 -> PC, b) VT100 graphics -> PC, c) PC -> PC, d) 사용자 정의.

G0과 G1이라 불리는 두가지 문자군 (character sets)이 있고, 그중 하나가 현제 통용되는 문자군이다.(보통 G0) ^N을 입력함으로써 G1을 사용할 수 있다.^O을 입력하면 G0으로 바뀐다.

이 가변적인 G0과 G1은 변환 테이블을 말하고, 사용자가 바꿀 수 있다. 처음에 그것들은 각각 테이블 a)와 b)를 뜻했다. ESC ( B, ESC ( 0, ESC ( U와 ESC ( K 시퀀스들은 각각 G0가 변환 테이블 a), b), c)와 d)를 가르키도록 한다. ESC ) B, ESC ) 0, ESC ) U와 ESC ) K 시퀀스는 G1이 각각 테이블 a), b), c) 그리고 d)을 뜻하게 한다.

The sequence ESC c causes a terminal reset, which is what you want if the screen is all garbled. The oft-advised "echo ^V^O" will make only G0 current, but there is no guarantee that G0 points at table a). In some distributions there is a program reset(1) that just does "echo ^[c". If your terminfo entry for the console is correct (and has an entry rs1=\Ec), then "tput reset" will also work.

사용자 정의 맵핑 테이블은 mapscrn(8). 을 이용해 설정할 수 있다. 맵핑의 결과는 기호 c가 프린트되면, 기호 s = map[c] 가 비디오 메모리로 보내진다 s에 해당하는 비트멥을 문자 ROM에서 찾고, setfont(8). 사용이 바뀔 수 있게 된다

Mouse tracking

마우스 추적 기능의 원래 목적은 xterm(1)(마우스 호환 상태 리포트)을 반환하는 것이다. 콘솔 드라이버는 마우스 장치나, 타입을 알 수 없기 때문에, 가상 터미널 드라이버가 마우스 업데이트 ioctl을 받았을때만 콘솔 입력 스트림상에서 이 리포트가 반환된다. 이 ioctls은 반드시 gpm(8) 데몬과 같은 mouse-aware user-mode 어플리케이션에 의해 발생되어야 한다.

The mouse tracking escape sequences generated by xterm(1) encode numeric parameters in a single character as value+040. For example, '!' is 1. The screen coordinate system is 1-based.

이다 X10 호환 모드는 escape sequence를 위치와 눌려진 마우스 버튼을 인코딩한 버튼이 눌러졌을 때 보낸다. It is enabled by ESC [ ? 9 h를 보냄으로써 이것을 가능하게 하고, ESC [ ? 9 l를 보냄으로써 불가능 하게 한다.. button press에서 , xterm(1)은 ESC [ M bxy (6 characters)를 보낸다. b 는 버튼-1이고, 마우스를 눌렀을 때의 xy는 마우스의 x, y좌표이다. 이 코드는 모든 커널에서 적용된다.

Normal tracking mode (not implemented in Linux 2.0.24) sends an escape sequence on both button press and release. Modifier information is also sent. It is enabled by sending ESC [ ? 1000 h and disabled with ESC [ ? 1000 l. On button press or release, xterm(1) sends ESC [ M bxy. The low two bits of b encode button information: 0=MB1 pressed, 1=MB2 pressed, 2=MB3 pressed, 3=release. The upper bits encode what modifiers were down when the button was pressed and are added together: 4=Shift, 8=Meta, 16=Control. Again x and y are the x and y coordinates of the mouse event. The upper left corner is (1,1).

Comparisons with other terminals

Many different terminal types are described, like the Linux console, as being "VT100-compatible". Here we discuss differences between the Linux console and the two most important others, the DEC VT102 and xterm(1).

Control-character handling

VT102 역시 아래 제어 문자들을 인식한다:

은 무시한다;
응답 메시지를 트리거 한다;
전송을 재개한다;
VT100으로 하여금 XOFF와 XON을 제외한 모든 코드를 무시한다(그리고 전송을 멈춘다)

VT100-like DC1/DC3 processing may be enabled by the terminal driver.

xterm(1) 프로그램(VT100 모드에서)은 BEL, BS, HT, LF, VT, FF, CR, SO, SI, ESC 제어 문자를 인식한다.

Escape sequences

VT100 콘솔 시퀀스는 리눅스 콘솔에서 실행되지 않는다.

ESC N SS2 Single shift 2. (Select G2 character set for the next character only.)
ESC O SS3 Single shift 3. (Select G3 character set for the next character only.)
ESC P DCS Device control string (ESC \에 의해 가능해진다)
ESC X SOS 스트링을 시작한다.
ESC ^ PM 사적인 메시지 (ESC \로 끝난다)
ESC \ ST 스트링 종료기
ESC * ... G2 문자군을 지정한다.
ESC + ... G3 문자군을 지정한다.

The program xterm(1) (in VT100 mode) recognizes ESC c, ESC # 8, ESC >, ESC =, ESC D, ESC E, ESC H, ESC M, ESC N, ESC O, ESC P ... ESC \, ESC Z (it answers ESC [ ? 1 ; 2 c, "I am a VT100 with advanced video option") and ESC ^ ... ESC \ with the same meanings as indicated above. It accepts ESC (, ESC ), ESC *, ESC + followed by 0, A, B for the DEC special character and line drawing set, UK, and US-ASCII, respectively.

The user can configure xterm(1) to respond to VT220-specific control sequences, and it will identify itself as a VT52, VT100, and up depending on the way it is configured and initialized.

It accepts ESC ] (OSC) for the setting of certain resources. In addition to the ECMA-48 string terminator (ST), xterm(1) accepts a BEL to terminate an OSC string. These are a few of the OSC control sequences recognized by xterm(1):

ESC ] 0 ; txt ST 아이콘 이름과 창 이름을 txt로 설정한다.
ESC ] 1 ; txt ST 아이콘 이름을 txt로 설정한다.
ESC ] 2 ; txt ST 창 이름을 txt로 설정한다.
ESC ] 4 ; num; txt ST Set ANSI color num to txt.
ESC ] 10 ; txt ST Set dynamic text color to txt.
ESC ] 4 6 ; name ST Change log file to name (normally disabled by a compile-time option).
ESC ] 5 0 ; fn ST 폰트를 fn으로 설정한다.

It recognizes the following with slightly modified meaning (saving more state, behaving closer to VT100/VT220):

ESC 7 DECSC 커서 저장
ESC 8 DECRC 커서 복원

It also recognizes

ESC F Cursor to lower left corner of screen (if enabled by xterm(1)'s hpLowerleftBugCompat resource).
ESC l 메모리 잠금 (HP 터미널 당).
커서상에서 메모리를 잠근다.
ESC m 메모리 개방(HP 터미널 당).
ESC n LS2 G2 문자군을 부른다.
ESC o LS3 G3 문자군을 부른다.
ESC | LS3R G3 문자군을 GR로서 부른다.
ESC } LS2R G2 문자군을 GR로서 부른다.
ESC ~ LS1R G1 문자군을 GR로서 부른다.

It also recognizes ESC % and provides a more complete UTF-8 implementation than Linux console.

CSI Sequences

Old versions of xterm(1), for example, from X11R5, interpret the blink SGR as a bold SGR. Later versions which implemented ANSI colors, for example, XFree86 3.1.2A in 1995, improved this by allowing the blink attribute to be displayed as a color. Modern versions of xterm implement blink SGR as blinking text and still allow colored text as an alternate rendering of SGRs. Stock X11R6 versions did not recognize the color-setting SGRs until the X11R6.8 release, which incorporated XFree86 xterm. All ECMA-48 CSI sequences recognized by Linux are also recognized by xterm, however xterm(1) implements several ECMA-48 and DEC control sequences not recognized by Linux.

The xterm(1) program recognizes all of the DEC Private Mode sequences listed above, but none of the Linux private-mode sequences. For discussion of xterm(1)'s own private-mode sequences, refer to the Xterm Control Sequences document by Edward Moy, Stephen Gildea, and Thomas E. Dickey available with the X distribution. That document, though terse, is much longer than this manual page. For a chronological overview,

details changes to xterm.

The vttest program

demonstrates many of these control sequences. The xterm(1) source distribution also contains sample scripts which exercise other features.

주의

ESC 8 (DECRC) is not able to restore the character set changed with ESC %.

버그

2.0.23 버전에서, CSI가 작동하지않고, NUL은 내부 escape 시퀀스를 무시하지 않는다.

Some older kernel versions (after Linux 2.0) interpret 8-bit control sequences. These "C1 controls" use codes between 128 and 159 to replace ESC [, ESC ] and similar two-byte control sequence initiators. There are fragments of that in modern kernels (either overlooked or broken by changes to support UTF-8), but the implementation is incomplete and should be regarded as unreliable.

Linux "private mode" sequences do not follow the rules in ECMA-48 for private mode control sequences. In particular, those ending with ] do not use a standard terminating character. The OSC (set palette) sequence is a greater problem, since xterm(1) may interpret this as a control sequence which requires a string terminator (ST). Unlike the setterm(1) sequences which will be ignored (since they are invalid control sequences), the palette sequence will make xterm(1) appear to hang (though pressing the return-key will fix that). To accommodate applications which have been hardcoded to use Linux control sequences, set the xterm(1) resource brokenLinuxOSC to true.

An older version of this document implied that Linux recognizes the ECMA-48 control sequence for invisible text. It is ignored.

추가 참조

ioctl_console(2), charsets(7)

번역

이 매뉴얼 페이지의 한국어 번역은 다음에 의해 편집되었습니다: ASPLINUX <man@asp-linux.co.kr>

이 번역은 무료 문서입니다. 저작권 조건에 대해서는 GNU General Public License 버전 3 이상을 읽으십시오. 책임이 없습니다.

이 매뉴얼 페이지의 번역에서 오류를 발견하면 translation-team-ko@googlegroups.com 로 이메일을 보내주십시오.

2024년 5월 2일 Linux man-pages (unreleased)