Eu tenho o servidor Ubuntu 16.04.04 LTS. Eu estava fazendo algum trabalho tty1
e depois fiz uma pausa para o almoço. Nesse ínterim, meu monitor de desktop adormeceu. Quando voltei, apertei Esce minha tela acordou e eu estava no tty1
prompt, exatamente de onde parei. No entanto, quando comecei a digitar, percebi que os caracteres digitados não eram exibidos no prompt. Era como se o teclado não estivesse funcionando, mas eu podia ver que o texto pré-existente na tela piscava a cada tecla que eu pressionava. Portanto, acho que (A) a conexão física do teclado não é o problema e (B) as teclas pressionadas estão sendo registradas em algum lugar por causa da breve oscilação.
Apenas para verificar novamente, pressionei CtrlAltF2para ir para tty2
e comecei a digitar (nome de usuário e senha) e os caracteres que estava pressionando no teclado estavam sendo exibidos como deveriam. Portanto, meu teclado parecia funcionar bem em tty2
(e em tty3
, tty4
e assim por diante).
Então, voltei tty1
e, novamente, as teclas pressionadas não estavam sendo exibidas. Nenhuma combinação de teclas parecia funcionar, tty1
exceto as teclas de função para ir para outro terminal.
Como não consegui descobrir como fazer meus pressionamentos de tecla aparecerem em tty1
, tentei shutdown
, mas não consegui shutdown
entrar tty1
. Então, eu fui tty2
e entrei shutdown
. Em tty2
, o comando registrava e informava a hora em que o computador seria desligado. Quando chegou a hora de desligar, uma mensagem foi exibida informando que (não me lembro o texto exato) havia outro processo em andamento. Tentei CtrlCsair do desligamento, mas também estava travado. Então, fui tty3
e tentei desligar lá e fiquei preso novamente. Então, finalmente apertei o botão liga / desliga do meu computador por alguns segundos e desliguei meu computador da maneira feia. Quando o computador voltou a funcionar, o problema havia desaparecido e tudo parecia funcionar normalmente.
O que estava acontecendo com as teclas pressionadas não sendo exibidas (mas fazendo a tela piscar) em tty1
? Ansiosa para entender isso.
O console baseado em caracteres (
tty1
,tty2
etc.) é um emulador de terminal: ele imita a operação de um terminal conectado à porta serial, com algumas extensões específicas do Linux. Esta emulação inclui suporte para handshaking XON/XOFF... e os caracteres usados para este tipo de handshake podem ser facilmente produzidos em um teclado, mesmo por acidente.Se você pressionar Control-S, ele enviará o caractere de controle XOFF, que interrompe a saída para o terminal até que você pressione Control-Q (também conhecido como caractere XON). Observe que a entrada não é realmente interrompida junto com a saída: se você digitar qualquer coisa enquanto XOFF estiver em vigor, esses caracteres serão exibidos assim que você pressionar Control-Q.
Esse recurso pode ser controlado usando o
stty
comando, especificamente com os sinalizadoresixon
e .ixany
Para desativar completamente o recurso, usestty -ixon
; para ativá-lo novamente, usestty ixon
. Se você usarstty ixany
enquanto o recurso estiver habilitado, qualquer tecla retomará a saída; se você usarstty -ixany
, apenas Control-Q pode ser usado para retomar.O
ixoff
sinalizador é para transmissão na direção oposta: se o buffer de entrada do lado do servidor estiver em perigo de ser saturado, o servidor enviará um Control-S ao terminal para fazê-lo parar de transmitir até que a entrada anterior seja processada. No console Linux, isso obviamente não é muito útil, pois tanto o "servidor" quanto o "terminal" compartilham o mesmo processador físico. Mas oixon
sinalizador ainda é útil, pois você pode usá-lo para, por exemplo, pausar um texto em rolagem para lê-lo.O estado padrão para o console do Linux parece ser
ixon -ixoff -ixany
, ou seja, Control-S pode interromper a saída para o console e apenas Control-Q pode retomá-lo.