console_codes(4) Device Drivers Manual console_codes(4)

console_codes - Sequëncias de controle e saída do console Linux

O console Linux implementa um vasto subconjunto de controles de terminais VT102, ECMA-48/ISO, 6429/ANSI X3.64, adicionando certas seqüencias em modo privativo para mudar a paleta de cor, conjunto de mapeamento de caracteres, etc. Na tabela abaixo, a segunda coluna fornece os mneumônicos ECMA-48 ou DEC (se prefixado com DEC) para a função fornecida. Seqüencias sem um menumônico não são ECMA-48 ou VT102.

Após o resultado do processamento normal ter sido concluido e uma seqüencia de caracteres ter chegado ao driver de console para a impressão real, a primeira coisa que acontece é uma tradução do código usado para o processamento para o código usado para impressão.

Se o console está no modelo UTF-8, então o bytes de entrada são primeiramente montados em códigos Unicode de 16bits. Caso contrário, cada byte é transformado de acordo com a tabela de mapeamento atual (o qual é traduzido para um valor Unicode). Veja a seção Conjunto de caracteres abaixo para um discussão a respeito.

No caso normal, o valor Unicode é convertido para um índice de fonte e armazenado na memória de video, de forma que o símbolo correspondente (como encontrado na ROM de vídeo) aparece na tela. Note que o uso do Unicode (e o projeto do PC) nos permite usar 512 símbolos simultaneamente.

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.

Geralmente não é uma boa prática fixar códigos de controles de terminais dentro de programas. O Linux suporta uma base de dados terminfo(5) de capacidades de terminais. Ao invés de emitir manualmente uma seqüencia de escape, você irá quase sempre procurar usar uma biblioteca de tela terminfo ou utilitários como por exemplo ncurses(3), tput(1) ou reset(1).

Esta seção descreve todos os caracteres de controle e seqüencias de escape que chamam funções especiais (isto é, qualquer coisa exceto escrever um símbolo na localização atual do cursor) no console do Linux.

Caracteres de Controle

Um caracter é dito de controle se (antes da transformação de acordo com a tabela de mapeamento) ele tem um dos 14 códigos 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). Um conjunto pode selecionar um modo de "caracter de controle de exibição" (veja abaixo), e permitir que 07, 09, 0b, 18, 1a, 7f sejam exibidos como símbolos. Por outro lado, em modo UTF-8 todos os códigos de 00–1f são respeitados como caracteres de controle, sem ligação com qualquer modo "caracter de controle de exibição".

Se nós temos um caracter de controle, ele é manipulado imediatamente e então descartado (mesmo que no meio de um seqüencia de escape) e a seqüencia de escape continua com o próximo caracter. (De qualquer forma, ESC inicia uma nova seqüencia de escape, possivelmente abortando uma seqüência anterior inacabada, CAN e SUB abortam qualquer seqüencia de escape). Os caracteres de controle reconhecidos são: BEL, BS, HT, LF, VT, FF, CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Eles fazem o que é esperado:

Emite um beep;
Retorna uma coluna (mas não passa do inicio da linha);
Vai para a próxima parada de tabulação ou para o fim da linha se estiver na última tabulação;
all give a linefeed, and if LF/NL (new-line mode) is set also a carriage return;
gives a carriage return;
ativa o conjunto de caracteres G1;
ativa o conjunto de caracteres G0;
abort escape sequences;
inicia uma seqüencia de escape;
is ignored;
é equivalente a ESC [.

ESC - mas não a seqüencia CSI

ESC c RIS Reiniciar
ESC D IND Alimentação de linha.
ESC E NEL Nova linha.
ESC H HTS Seleciona uma parada de tabulação na coluna atual.
ESC M RI Alimentação reversa de linha.
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 % Inicia uma seqüencia selecionando o conjunto de caracteres.
ESC % @    Seleciona o padrão (ISO 646 / ISO 8859-1)
ESC % G    Seleciona UTF-8
ESC % 8    Seleciona UTF-8 (obsoleto)
ESC # 8 DECALN Teste de alinhamento de tela DEC - preenche a tela com E's.
ESC ( Start sequence defining G0 character set (followed by one of B, 0, U, K, as below)
ESC ( B Seleciona o padrão (mapeamento ISO 8859-1).
ESC ( 0 Seleciona o mapeamento gráfico VT100.
ESC ( U Seleciona o mapeamento nulo - correto para caracteres 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 Seleciona o modo numérico do teclado numérico.
ESC = DECPAM Seleciona o modo de aplicação do teclado numérico.
ESC ] OSC Operating System Command prefix.
ESC ] R Reset palette.
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).

Seqüências ECMA-48 CSI

CSI (ou ESC [) é seguido por uma seqüência de parâmetros na maioria NPAR (16), que são números decimais separados por ponto-e-vírgula. Um parâmetro vazio ou ausente é interpretado como 0. A seqüência de parâmetros pode ser precedida pelo sinal de interrogação.

Entretanto, após o CSI [ (ou ESC [ [) um único caracter é lido e a seqüência inteira é ignorada. (A idéia é ignorar uma tecla de função que seja ecoada).

A ação de uma seqüência CSI é determinada pelo seu caracter final.

@ ICH Insere a quantidade de caracteres brancos indicada.
A CUU Move o cursor para cima N linhas.
B CUD Move o cursor para baixo N linhas.
C CUF Move o cursor para a direita N colunas.
D CUB Move o cursor para a esquerda N colunas.
E CNL Move o cursor para baixo N linhas a partir da coluna 1.
F CPL Move o cursor para cima N linhas a partir da coluna 1.
G CHA Move o cursor para a coluna indicada na linha corrente.
H CUP Move o cursor para a linha e coluna indicada (inicio 1,1).
J ED Limpa a tela (padrão: do cursor até o fim da tela).
ESC [ 1 J: Limpa do inicio até o cursor.
ESC [ 2 J: Limpa a tela toda.
ESC [ 3 J: erase whole display including scroll-back buffer (since Linux 3.0).
K EL Limpa a linha (padrão: do cursor até o fim da linha).
ESC [ 1 K: Limpa do inicio da linha até o cursor.
ESC [ 2 K: Limpa a linha inteira.
L IL Insere N linhas em branco.
M DL Apaga N linhas.
P DCH Apaga N caracteres na linha atual.
X ECH Erase the indicated # of characters on current line.
a HPR Move o cursor para a direita N colunas.
c DA Responde ESC [ ? 6 c: "Eu sou um VT102".
d VPA Move o cursor para a linha indicada mantendo a coluna atual
e VPR Move o cursor para baixo N linhas.
f HVP Move o cursor para a linha e coluna indicada.
g TBC Sem parâmetro: limpa tabulação na posição atual.
ESC [ 3 g: apaga todas as tabulações.
h SM Modo de Configuração (Veja abaixo).
l RM Modo de Reinicialização (Veja abaixo).
m SGR Define atributos (Veja abaixo).
n DSR Relata o Estado (Veja abaixo).
q DECLL Define os LEDs do teclado.
ESC [ 0 q: Limpa todos os LEDs
ESC [ 1 q: LED Scroll Lock
ESC [ 2 q: LED Num Lock
ESC [ 3 q: LED Caps Lock
r DECSTBM Define região de rolagem; Parâm.: Linha superior e inferior
s ? Grava a localização do cursor.
u ? Restaura a localização do cursor.
` HPA Move o cursor para a coluna indicada na linha corrente.

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 resultado
0 Ajusta todos os atributos para os valores padrões
1 Negrito
2 Meio Brilho (simulado com cor em um monitor colorido)
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 Piscante
7 Vídeo Reverso
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 Intensidade normal
23 italic off (since Linux 2.6.22)
24 Desativa Sublinhado
25 Desativa Piscante
27 Desativa Vídeo Reverso
30 Cor de Frente Preta
31 Cor de Frente Vermelha
32 Cor de Frente Verde
33 Cor de Frente Marrom
34 Cor de Frente Azul
35 Cor de Frente Magenta
36 Cor de Frente Ciano
37 Cor de Frente Branca
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 Cor de Fundo Preta
41 Cor de Fundo Vermelha
42 Cor de Fundo Verde
43 Cor de Fundo Marrom
44 Cor de Fundo Azul
45 Cor de Fundo Magenta
46 Cor de Fundo Ciano
47 Cor de Fundo Branca
48 256/24-bit background color follows, shoehorned into 8 basic colors
49 Define Cor de Fundo Padrão
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

Opções do Modo ECMA-48

DECCRM (Padrão Desativado): Caracteres de Controle de Exibição.
DECIM (Padrão Desativado): Define Modo de Inserção.
LF/NL (Padrão Desativado): Automáticamente segue o eco do LF, VT ou FF com CR.

ECMA-48 Comandos de Resultado de Estado

Informa o estado do dispositivo (DSR): A resposta é ESC [ 0 n (Terminal OK).
Informa a posição do cursor (CPR): A resposta é ESC [ y; x R, onde x,y é a localização do cursor.

Seqüência do Modo Privativo DEC (DECSET/DECRST)

Ele não é descrito no ECMA-48. Nós listamos a seqüência dos modos de configuração; as seqüências do Modo de Reinicialização são obtidas pela troca do 'h' final por 'l'.

DECCKM (Padrão Desativado): Quando definido, as teclas de cursor enviam um prefixo ESC O, ao invés de ESC [.
DECCOLM (Padrão Desativado = 80 colunas): Alterna de 80/132 colunas. Este parâmetro sozinho nem sempre é suficiente, alguns utilitários em modo usuá rio como o resizecons(8) altera os registradores do equipamento na placa de vídeo.
DECSCNM (Padrão Desativado): Define o modo de vídeo reverso.
DECOM (Padrão Desativado): Quando definido, o endereçamento do cursor é relativo ao canto superior esquerdo da região de rolagem.
DECAWM (Padrão Ativo): Define quebra de linha automática. neste modo, um caracter gráfico emitido após a coluna 80 (ou coluna 132 se DECCOLM ativo) força uma quebra para o inicio da primeira linha seguinte.
DECARM (Padrão Ativo): Define autorepetição do teclado ativo.
X10 Informações do Mouse (Padrão Desativado): Define o modo de informações para 1 (ou reinicia para 0)—veja abaixo.
DECTECM (Padrão Ativo): Torna o cursor visivel.
X11 Informações do Mouse (Padrão Desativado): Define o modo de informações para 2 (ou reinicia para 0)—veja abaixo.

Seqüência de Console Linux Privada - CSI

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 ] Define cor n como cor de sublinhado.
ESC [ 2 ; n ] Define cor n como cor dim.
ESC [ 8 ] Torna o par de cor atual os atributos padrões.
ESC [ 9 ; n ] Ajusta o tempo de tela preta para n minutos.
ESC [ 10 ; n ] Ajusta a freqüencia do bip em Hz.
ESC [ 11 ; n ] Ajusta a duração do bip em segundos.
ESC [ 12 ; n ] Traz a console especificada para a frente.
ESC [ 13 ] Tela não vazia.
ESC [ 14 ; n ] Define o tempo para redução de consumo energia (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).

O Linux conhece entorno de 4 traduções de bytes em símbolos de console de tela. As 4 tabelas são: a) Latin1 -> PC, b) VT100 gráfico -> PC, c) PC -> PC, d) definição-usuário.

Existem dois conjuntos de caracteres chamados G0 e G1 e um deles é o conjunto corrente. (Inicialmente G0.) Digitar ^N torna o G1 o corrente, ^NO torna o G0 corrente.

Estas variáveis G0 e G1 estão na tabela de tradução e podem ser alteradas pelo usuário. Inicialmente elas apontam a tabela a) e b), respectivamente. As seqüências ESC ( B e ESC ( 0 e ESC ( U e ESC ( K fazem G0 apontar para a tabela de tracução a), b), c) e d), respectivamente. As seqüências ESC ) B e ESC ) 0 e ESC ) U e ESC ) K fazem G1 apontar para a tabela de tradução a), b), c) e d), respectivamente.

A seqüência ESC c reinicializa o terminal, que é o que você vai querer se a tela está com sujeiras. O aviso "echo ^V^O" tornará apenas G0 corrente, mas não há garantias de que G0 aponta a tabela a). Em algumas distribuições há um programa reset(1) que apenas executa um "echo ^[c". Se sua entrada terminfo para a console está correta (e tem uma entrada rs1=\Ec), então "tput reset" funcionará.

A tabela de mapeamento definida pelo usuário pode ser usada através do mapscrn(8). O resultado do mapeamento é que se o símbolo c é impresso, o símbolo s = map[c] é enviado para a memória de vídeo. O bitmap que corresponde a s é encontrado na ROM de caracter e pode ser alterado usando o setfont(8).

A facilidade de rastreamento do mouse pretende retornar informações de estado do mouse compatível com xterm(1). Devido ao controlador de console não ter como saber o dispositivo e o tipo do mouse, estas informações são retornadas na seqüência de entrada da console apenas quando o controlador de terminal virtual recebe uma atualização através do ioctl. Estes ioctls são gerados pela aplicação relacionada ao mouse em modo usuário, tal como, o gpm(8).

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.

O modo de compatibilidade X10 envia um seqüência escape ao pressionar um botão codificando a localização e o botão pressionado. Isto é habilitado enviando ESC [ ? 9 h e desativado com ESC [ ? 9 l. Ao pressionar o botão, o xterm(1) envia ESC [ M bxy (6 caracteres). Aqui b é o botão-1, e x e y são as coordenadas x e y do mouse quando o botão foi pressionado. Este é o mesmo código que o núcleo também produz.

O modo de rastreamento normal (não implementado no Linux 2.0.24) envia uma seqüência escape quando o botão é pressiondo e liberado. Modificadores de informações também são enviados. Isto é habilitado enviado ESC [ ? 1000 h e desativado com ESC [ ? 1000 l. Ao pressionar e liberar o botão, o xterm(1) envia ESC [ M bxy. Os dois bits baixos de b codifica informações do botão: 0=MB1 pressionado, 1=MB2 pressionado, 2=MB3 pressionado, 3=liberado. Os bits altos codificam que os modificadores foram teclados quando o botão foi pressionado e acrescentado junto: 4=Shift, 8=Meta, 16=Control. De novo x e y são as coordenadas x e y do mouse. O canto superior esquerdo é (1,1).

Diferentes tipos de terminais são descritos, com a console Linux sendo "VT100-compatível". Aqui nós discutimos diferenças entre a console Linux e outros dois mais importantes, o DEC VT102 e xterm(1).

Tratamento dos caracteres de controle

O VT102 também reconhece os seguintes caracteres de controle:

foi ignorado;
resposta disparada;
transmissão reiniciada;
faz o VT100 ignorar (e parar de transmitir) todos os códigos exceto XOFF e XON.

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

O programa xterm(1) (no modo VT100) reconhece os caracteres de controle BEL, BS, HT, LF, VT, FF, CR, SO, SI, ESC.

Seqüências Escape

Seqüências de console VT100 não implementadas na console Linux:

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 Caracteres de Controle de Dispositivo (terminada por ESC \)
ESC X SOS Inicio de cadeia de caracteres.
ESC ^ PM Mensagem privada (terminada por ESC \)
ESC \ ST Terminador de cadeia de caracteres
ESC * ... Conjunto de caracteres G2 especificado
ESC + ... Conjunto de caracteres G3 especificado

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 Define o nome do ícone e título da janela para txt.
ESC ] 1 ; txt ST Define o nome do ícone para txt.
ESC ] 2 ; txt ST Define o título da janela para 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 ; nome ST Change log file to name (normally disabled by a compile-time option).
ESC ] 5 0 ; fn ST Define o fonte para fn.

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

ESC 7 DECSC Grava o cursor
ESC 8 DECRC Restaura o cursor

Ele também reconhece

ESC F Cursor to lower left corner of screen (if enabled by xterm(1)'s hpLowerleftBugCompat resource).
ESC l Bloqueia Memória (para terminais HP).
Bloqueia memória acima do cursor.
ESC m Desbloqueia Memória (para terminais HP).
ESC n LS2 Invoca o conjunto de caracteres G2.
ESC o LS3 Invoca o conjunto de caracteres G3.
ESC | LS3R Invoca o conjunto de caracteres G3 como GR.
ESC } LS2R Invoca o conjunto de caracteres G2 como GR.
ESC ~ LS1R Invoca o conjunto de caracteres G1 como GR.

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

Seqüência CSI

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 %.

In Linux 2.0.23, CSI is broken, and NUL is not ignored inside escape sequences.

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)

A tradução para português brasileiro desta página man foi criada por Fábio Henrique F. Silva <fabiohfs@mail.com> e André Luiz Fassone <lonely_wolf@ig.com.br>

Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.

Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores.

5 fevereiro 2023 Linux man-pages 6.05.01