Por que caracteres aleatórios aparecem em terminais no Windows?

1

Eu tenho programado no Windows há alguns anos, e tem havido um problema que está se tornando cada vez mais frustrante, já que comecei a usar vários terminais no Windows para o meu propósito de desenvolvimento. Para fazer login em máquinas remotas, eu uso o PuTTy, e recentemente descobri o Cygwin, que eu descobri ser um shell realmente ótimo. Eu também tenho um MacBook Pro e uso o Terminal um pouco também.

O que eu notei é que sem eu digitar nada, o 8 ~ digita a si mesmo no meu terminal, e se eu deixar o computador por 10 ou 15 minutos, eu regularmente verei algo como:

8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~ 8 ~

Além disso, quando estou no emacs, noto que os números aparecerão aleatoriamente sem ter digitado eles como 012, ou 34, etc. Isso aconteceu comigo em várias máquinas Windows diferentes, e eu tentei provavelmente centenas de diferentes pesquisas do Google para tentar descobrir por que isso está ocorrendo, e não tive absolutamente nenhuma sorte em descobrir o que está causando isso.

Eu realmente aprecio qualquer ajuda nisso. Eu sei que isso não é realmente uma questão de programação em si, mas eu assumi que o Stack Overflow não apreciaria essa pergunta e como todos vocês são programadores, acho que um de vocês teria alguma idéia.

Muito obrigado.

EDITAR : Originalmente publiquei isso em www.programmers.stackexchange.com e recebi três comentários pedindo esclarecimentos, então estou repostando a questão com o esclarecimento solicitado.

  1. É quase certamente alguma forma de keepalive, mas o contexto não é bem claro. Você está no Windows, usando o PuTTy e conectando-se ao emacs em outra máquina, e recebendo caracteres aleatórios? O que você tem tentou isolá-lo? Eles aparecem se você acabou de abrir uma janela e não conecte? Se você acabou de abrir uma janela de console?

Acontece quando eu uso o emacs / Cygwin localmente, e também acontece quando eu uso o emacs via PUTTy quando estou logando no servidor linux da minha escola. Eu realmente não sei o que posso fazer para isolá-lo, nem sei a causa! Isso nunca acontece no mac, seja localmente ou quando eu fizer login no mesmo servidor, então presumo que o problema deva ser local. Como isso acontece quando eu entro no meu servidor da escola através do Cygwin ou do putty, assim como quando estou usando o Cygwin com o emacs localmente, deve ser algo com o Windows.

  1. Isso acontece apenas no Windows ou também no Mac? Isso acontece apenas quando você está se conectando a uma máquina específica ou a outras pessoas também? Se for apenas para uma máquina em particular, qual sistema operacional está sendo executado (qual distribuição, qual versão)? Isso está correlacionado com o movimento do mouse? Sua pergunta está fora do tópico aqui, mas se você adicionar as informações que solicitamos, poderá repassá-las no Superusuário.

Não, isso não acontece no Mac localmente ou quando eu entro no servidor da escola. Acontece comigo com o Windows 8 Pro e o Windows 7 Ultimate.

    
por Arthur Collé 08.08.2013 / 23:18

3 respostas

2

Às vezes, caracteres aparentemente "aleatórios" podem aparecer em terminais ou em alguns programas do Linux no Cygwin / SSH porque você digitou uma tecla do teclado que não está mapeada na máquina. Um grande culpado disso seria macro ou teclas multimídia em teclados estendidos, ou (em circunstâncias mais raras) se você tiver uma tecla Fn no seu teclado que você precisa usar para determinadas teclas digitadas. Essas chaves podem não ser mapeadas pelo sistema operacional que você está controlando e, portanto, podem aparecer em terminais ou outros locais onde o texto pode ser digitado como o código / caractere de teclado bruto que o teclado envia para o sistema operacional a ser interpretado. É a mesma razão pela qual Conrol + C aparecerá nos terminais como ^C , por exemplo.

O que pode estar acontecendo é que você pressiona uma combinação de teclas ou pressiona uma tecla no teclado que não está mapeada pelo Linux naquela máquina específica e acabou sendo digitada no terminal ou no editor de texto. Ou pode haver um evento regular configurado no computador que aciona o pressionamento de tecla automaticamente e faz com que ele apareça.

Você não especificou se isso acontece quando você digita algo ou mesmo quando não está. Mas na minha experiência, é por isso que você pode ver isso acontecer.

ATUALIZAÇÃO:

Por meio de algumas tentativas e erros com o Cygwin, descobri com o que o 8~ está associado.

Aparece quando você digita a combinação de teclas Ctrl + Alt + Deslocamento + Del . Não sei por que aparece com tanta frequência, mas algo no seu computador aparentemente está acionando essa entrada. Pode ser algum software rodando em segundo plano ou talvez um teclado defeituoso.

Você pode tentar verificar isso sozinho. Primeiro, tentei um teclado diferente e, se isso não ajudar, comece a analisar seus processos em execução e use o processo de eliminação para tentar isolar qual deles é.

    
por 08.08.2013 / 23:25
2

No meu caso, a saída periódica da sequência de caracteres 8 ~ é devida a um processo em segundo plano, sendo a janela do meu cygwin shell (Windows de 64 bits) a janela ativa. Para impedir que o modo de proteção de tela seja inserido a cada x minutos e bloquear meu computador de trabalho, instalei um programa chamado caffeine.exe, que, em segundo plano, simula a atividade de entrada periódica (teclado ou mouse; não tenho 100% de certeza agora). Eu vejo a mesma seqüência periódica de 8 caracteres sobre cada minuto, que é provavelmente quando a entrada simulada é gerada. Em resumo, se a minha janela cygwin não é a janela ativa, ou se a minha janela cygwin é a janela ativa, mas eu desabilito a cafeína, não aparecem 8 caracteres; caso contrário, vejo 8 ~.

Atenciosamente, Greg

    
por 04.03.2015 / 18:22
0

Em sistemas operacionais do tipo Unix, os programas usam vários recursos de terminal (cores, movimento do cursor, etc.) enviando seqüências de escape para o terminal. O próprio terminal envia seqüências de escape para programas quando você pressiona várias teclas especiais, ou (se o programa tiver habilitado) usa o mouse dentro da janela do terminal, ou em resposta a certas consultas.

Estas sequências sempre começam com ESC byte, que em vários lugares pode aparecer como ^[ (o que na verdade significa Ctrl [, mas é o mesmo byte por causa de como o ASCII funciona), então ^[[2~ é realmente ESC , [ , 2 , ~ .

(O shell bash é executado no modo "bruto" e interpreta algumas sequências de pressionamento de tecla, como teclas de seta. Quando não reconhece a sequência que está sendo inserida, descarta a parte que viu e continua interpretando a parte restante como pressionamentos de tecla regulares - é por isso que metade da sequência, como ~ , acaba sendo inserida na linha de comando. Por outro lado, quando você executa cat ou compila alguma coisa, tudo que você insere é exibido na íntegra pelo próprio terminal, para que você possa ver as sequências completas "não danificadas". Foi por isso que pedi que você executasse cat .

Freqüentemente, seqüências que representam pressionamentos de tecla terminam com ~ . Das duas que você mencionou no seu comentário, ESC [ 2 ~ , corresponde à tecla Insert . O outro ( ESC [ 8 ~ ) não consigo encontrar nem mesmo no código-fonte do PuTTY [ainda]. Então, não tenho certeza se você se lembrou dos códigos corretamente.

    
por 09.08.2013 / 00:05