我有 Ubuntu 16.04.04 LTS 服务器。我当时正在做一些工作tty1
,然后午休了。与此同时,我的桌面显示器进入了睡眠状态。当我回来时,我按了一下Esc,我的屏幕被唤醒,我就在提示符下tty1
,就在我上次停下来的地方。然而,当我开始打字时,我注意到我输入的字符没有在提示符下显示。就好像键盘不起作用,但我可以看到屏幕上预先存在的文本会随着我每次按下按键而闪烁。所以,我认为(A)物理键盘连接不是问题,(B)由于短暂的闪烁,按键正在某处注册。
为了再次检查,我按CtrlAltF2下去tty2
并开始输入(用户名和密码),并且我在键盘上按下的字符按应有的方式显示。所以,我的键盘似乎在tty2
(以及tty3
、tty4
等)中工作得很好。
因此,我返回tty1
并再次发现按键没有显示。tty1
除了转到另一个终端的功能键之外,似乎没有任何组合键可以工作。
因为,我不知道如何让我的按键显示在 中tty1
,我尝试过shutdown
,但无法shutdown
输入tty1
。所以,我去了tty2
并进入了shutdown
。在 中tty2
,该命令注册并说明计算机关闭的时间。当需要关闭时,显示一条消息,指出(我不记得确切的措辞)有另一个进程正在发生。我尝试CtrlC退出关机状态,但它也卡住了。所以,我去tty3
尝试在那里关闭并再次陷入困境。因此,我最终按下计算机上的电源按钮几秒钟,然后以丑陋的方式关闭了计算机。当计算机重新启动时,问题就消失了,一切似乎都正常工作。
中的按键不显示(但使屏幕闪烁)是怎么回事tty1
? 渴望了解这一点。
答案1
基于字符的控制台(tty1
等tty2
)是一个终端仿真器:它模仿串行端口连接终端的操作,并具有一些 Linux 特定的扩展。该仿真包括对 XON/XOFF 握手的支持……并且即使是偶然,也可以在键盘上轻松生成用于此类握手的字符。
如果您按 Control-S,它会发送 XOFF 控制字符,该字符将停止向终端输出,直到您按 Control-Q(也称为 XON 字符)。请注意,输入实际上并未与输出一起停止:如果您在 XOFF 有效时键入任何内容,那么一旦您按下 Control-Q,这些字符就会被输出。
stty
可以使用命令(特别是使用ixon
和标志)来控制此功能ixany
。要完全禁用该功能,请使用stty -ixon
;要再次启用它,请使用stty ixon
.如果在该功能启用时使用stty ixany
,任意键将恢复输出;如果使用stty -ixany
,则只能使用 Control-Q 来恢复。
该ixoff
标志用于相反方向的传输:如果服务器端输入缓冲区有溢出的危险,服务器将向终端发送 Control-S 以使其停止传输,直到处理完前一个输入。在 Linux 控制台上,这显然不是很有用,因为“服务器”和“终端”共享相同的物理处理器。但该ixon
标志仍然有用,因为您可以使用它来暂停滚动文本以便阅读它。
Linux 控制台的默认状态似乎是ixon -ixoff -ixany
,即 Control-S 可以停止向控制台的输出,只有 Control-Q 可以恢复它。