O ponto de interrogação em uma caixa é o caractere de substituição Unicode. O console do Linux imprimirá isso em dois casos:
- o caractere não está na fonte atualmente carregada (512 glifos) ou
- o recurso de controles de exibição foi ativado no console.
O último tem estado no kernel há algum tempo, como visto em este link para console.c em 2.2.26 , que tem o comentário relevante:
1869 /* If the original code was a control character we
1870 * only allow a glyph to be displayed if the code is
1871 * not normally used (such as for cursor movement) or
1872 * if the disp_ctrl mode has been explicitly enabled.
1873 * Certain characters (as given by the CTRL_ALWAYS
1874 * bitmap) are always displayed as control characters,
1875 * as the console would be pretty useless without
1876 * them; to display an arbitrary font position use the
1877 * direct-to-font zone in UTF-8 mode.
1878 */
e é definido por duas seqüências de escape :
1051 case 11: /* ANSI X3.64-1979 (SCO-ish?)
1052 * Select first alternate font, lets
1053 * chars < 32 be displayed as ROM chars.
1054 */
1055 translate = set_translate(IBMPC_MAP,currcons);
1056 disp_ctrl = 1;
1057 toggle_meta = 0;
1058 break;
1059 case 12: /* ANSI X3.64-1979 (SCO-ish?)
1060 * Select second alternate font, toggle
1061 * high bit before displaying as ROM char.
1062 */
1063 translate = set_translate(IBMPC_MAP,currcons);
1064 disp_ctrl = 1;
1065 toggle_meta = 1;
1066 break;
e redefinir por um terceiro :
1040 case 10: /* ANSI X3.64-1979 (SCO-ish?)
1041 * Select primary font, don't display
1042 * control chars if defined, don't set
1043 * bit 8 on output.
1044 */
1045 translate = set_translate(charset == 0
1046 ? G0_charset
1047 : G1_charset,currcons);
1048 disp_ctrl = 0;
1049 toggle_meta = 0;
1050 break;
O último (se TERM
for linux
) pode ser roteirizado como
tput rmpch
usando este recurso:
exit_pc_charset_mode rmpch S3 Exit PC character
display mode
ou
tput sgr0
mas não os comandos reset
ou stty
.
Leitura adicional: