我在新安装 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
基本上,我无法在控制台中使用Backspace或Ctrl键,并且尚未安装 x11。我被困住了。有任何想法吗?
答案1
评论空间不足..
对于退格键,stty erase '^?'
应该可以得到你想要的。
当您说 CTRL 命令不起作用时,您的意思是CTRL+吗C?如果是这样,那又怎样呢stty intr ^C
?还可以用++切换CTRL终端ALT吗F#?无论如何,粘贴以下输出可能会有所帮助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;
最后一个(如果TERM
是linux
) 可以编写为
tput rmpch
使用此功能:
exit_pc_charset_mode rmpch S3 Exit PC character
display mode
或者
tput sgr0
但不是reset
或命令stty
。
进一步阅读:
- console_codes - Linux 控制台转义和控制序列
- terminfo 构建块克隆+SGR,包含
rmpch
- terminfo——终端能力数据库