Como posso fazer com que o Linux interprete os recursos do teclado corretamente?

2

Eu acesso um shell do servidor linux via putty, mas muitas das chaves que eu uso não se traduzem,
para cima, para baixo, esquerda e direita, todos são vistos como ^ [[A, ^ [[B, ^ [[D e ^ [[C; Mas o mesmo acontece com C-up, C-down, C-left e C-right.
E enter é visto como C-j (que se move para a próxima linha),
e backspace é visto como C-h, que é deletado para trás.

Como posso impedir que essas chaves sejam traduzidas em outras chaves (para que eu possa, por exemplo, configurar o Ch e o backspace para executar duas funções diferentes) e o que está fazendo essa tradução (Putty, o kernel, o shell)?

    
por Chris2048 18.02.2010 / 01:04

4 respostas

4

Tente alterar $TERM para "xterm".

Tente configurar o teclado do PuTTY para "rxvt", "Esc [n ~" e "Control -?".

Qual shell você está usando? Se for Bash, existem algumas configurações que você pode querer fazer em ~/.inputrc .

A interpretação de Keypress é afetada por uma combinação de:

  • PuTTY - ou outro emulador de terminal
  • O sistema operacional no qual você está executando o emulador de terminal
  • /etc/X11/xorg.conf - se você estiver usando o sistema X-Window.
  • Bash / Readline via /etc/inputrc e ~/.inputrc - ou recursos semelhantes em outros shells
  • terminfo ou em alguns casos termcap
  • A variável $TERM
  • Provavelmente algo que estou esquecendo
por 18.02.2010 / 02:53
3

OK, então aqui está a solução que eu criei - larguei o PuttyCyg e comecei a usar o MinTTY. parece passar muito mais das minhas chaves reais para o servidor. : >

Para elaborar -
Depois de ver este post do blog descobriu que havia uma boa mudança Putty (Cyg) pode realmente precisa ser corrigido para fazer o que eu quero, então eu experimentei com outros emuladores de terminal que poderiam interagir com o cygwin. MinTTY mostrou códigos diferentes quando usei C-v para ver o que o servidor vendo, incluindo: Códigos diferentes para C- (tecla de seta) que (tecla de seta),
C-M para retorno, C- ^ para C-Return,
também códigos diferentes para aba meta e backspace; O que isto significa é que estas chaves agora se registram como diferentes, então pode configurar o emacs para usá-las para coisas diferentes, por exemplo. C-M pode ser 'newline and indent', enquanto C- ^ é 'cua-set-rectangle-mode'. Eu tenho tentado consertar minha sessão SSHed emacs por muito tempo ...
Para mais detalhes sobre o emacs em particular, e códigos de teclas em geral, eu também encontrei este

    
por 19.02.2010 / 02:02
2

Sim, há muitos jogadores que determinam como suas chaves são interpretadas. Se é um sistema remoto que você está se conectando ao PuTTY ou qualquer que seja o seu emulador de terminal é um provável gargalo - ou seja, se estiver enviando os mesmos dados para up e control, nada que você faça downstream pode recuperar a diferença. Isto é verdade para cada um dos jogadores, mas eu sei que a maioria dos outros é configurável. Eu não sei o quão configurável é o seu emulador de terminal. Alguns, mesmo que sejam capazes de ver a diferença entre up e control-up, ainda enviam os mesmos dados para os processos aos quais estão conectados.

Você está executando o PuTTYTel no Windows? Então alguém terá que ajudá-lo a descobrir como fazer com que o PuTTYTel detecte a diferença entre up e control-up, e envie dados diferentes para cada um. Eu só sei * nix.

Qual chave é enviada por retorno e por exclusão e assim por diante é determinada por qual TERM seu emulador de terminal está configurado para usar. Você deve ser capaz de usar qualquer coisa que você tenha um arquivo terminfo para o outro lado. Na minha máquina, o arquivo terminfo para vt100 diz que o retorno deve ser um ^ M, não um ^ J. (Backspace em vt100 é ^ H.) Então eu não sei o quanto você vai poder confiar neste emulador de terminal ...

Backspace também é ^ H no xterm. Em outras definições do terminfo é ^ ?, isto é 0x7f. Por exemplo, isso é verdade nas definições terminográficas "linux" e "rxvt-unicode".

    
por 18.02.2010 / 11:31
0

As teclas pressionadas que você deseja não são representáveis em um vt100 . Eles simplesmente não podem existir com esse tipo de terminal. Tente configurar a emulação para xterm ou rxvt (se você usar um emulador de terminal que possa fazer a emulação do xterm, ele poderá até mesmo compartilhar as informações do mouse com o aplicativo na outra extremidade).

    
por 19.02.2010 / 03:43