Backspace 和 CTRL 命令打印问号

Backspace 和 CTRL 命令打印问号

我在新安装 gentoo 时遇到了一个特殊的问题。在控制台内,Backspace按键打印了一个可爱的小问号,刻在一个正方形内,而不是其预期功能。另外,我发现Tab除了任何命令之外,其行为方式完全相同Ctrl。这些按键在安装过程中工作得很好,但在正确启动系统并执行初始设置后,它们似乎就放弃了。

localectl状态输出如下:

System Locale: LANG=en_US.utf8 
               LC_COLLATE=C 
    VC Keymap: us 
   X11 Layout: us 
    X11 Model: pc105+inet 
  X11 Options: terminate:ctrl_alt_bksp

基本上,我无法在控制台中使用BackspaceCtrl键,并且尚未安装 x11。我被困住了。有任何想法吗?

答案1

评论空间不足..

对于退格键,stty erase '^?'应该可以得到你想要的。

当您说 CTRL 命令不起作用时,您的意思是CTRL+吗C?如果是这样,那又怎样呢stty intr ^C?还可以用++切换CTRL终端ALTF#?无论如何,粘贴以下输出可能会有所帮助stty -a

当涉及到 stty 设置时,以下链接应该会有所帮助: http://docstore.mik.ua/orelly/unix3/upt/ch05_08.htm

另外,还有一个问题:既然您正在使用该localectl命令,这是否意味着您正在运行systemd?安装盘使用systemd还是openRC?我很确定它是这样的openRC,这可能就是它在安装程序中而不是在操作系统中工作的原因。

答案2

框中的问号是 Unicode 替换字符。 Linux 控制台会在两种情况下打印:

  • 该字符不在当前加载的字体(512 字形)中,或者
  • 控制台中的显示控制功能已启用。

后者已经在内核中存在很长一段时间了,如所示此链接到 2.2.26 中的 console.c,其中有相关评论:

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                  */

它由以下任一设置两个转义序列:

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;

重置三分之一:

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;

最后一个(如果TERMlinux) 可以编写为

tput rmpch

使用此功能:

   exit_pc_charset_mode      rmpch    S3   Exit PC character
                                           display mode

或者

tput sgr0

不是reset或命令stty

进一步阅读:

相关内容