As teclas Backspace, Tab, Del e seta não funcionam no terminal (usando ssh)

44

Quando ssh em outra máquina Ubuntu com minha conta (com permissões sudo), minha tecla backspace gera alguns símbolos estranhos ao pressionar. As teclas Tab, Del e Arrow também não funcionam.

Por outro lado, eu também tenho outra conta na mesma máquina e quando ssh através dessa conta, seu terminal funciona perfeitamente. Eu não conseguia descobrir por que isso está acontecendo.

gopi1410
fonte
Eu tenho o mesmo problema - meu host é o Win7-64 e meus sistemas de convidados remotos são o Ubuntu Server 10.04. Em um servidor, as chaves funcionam, em outro, não.
Mateng 26/10/12
Informação adicional:
Entro
Você pode tentar ssh através de um programa diferente ou criar um novo perfil para o sistema de destino?
22412 belacqua
Eu enfrentei o problema com cygwin (em win 7) também
gopi1410
O que é retornado digitando echo "$ TERM" , quando isso ocorre?
David6 28/10/12

Respostas:

32

EDIT: Referência: resposta de Mateng

Mateng está perto de pensar que você provavelmente está executando o Bourne Shell. Mas você não deve editar seu /etc/passwdarquivo diretamente. Tente usar o chshcomando:

chsh -s /bin/bash

O sinalizador -s fará do novo shell (Bash neste caso) o seu shell de login, daqui para frente.

Aaron
fonte
Parece legítimo. Se gopi1410 concordar, os 50 representantes são seus.
Mateng
@Mateng: concordou, e um link para a sua resposta para torná-lo completo
gopi1410
1
Executar como root: sudo chsh -s /bin/bash
KrisWebDev 5/15
1
@ Trabalhou para mim mais de três anos depois. Muito obrigado! Você é incrível!
Goncalotomas
17

As seguintes alterações resolveram o problema para mim. Primeiro, verifiquei qual shell estava sendo executado:

$ echo $0

que retornou:

/bin/sh

Como eu li neste post no Ubuntuforums , mudar o shell para /bin/bashtrazer a solução. Então editei minhas configurações de usuário /etc/passwdpara:

johndoe:x:1001:104:John Doe:/home/johndoe:/bin/bash

Eu saí, depois entrei novamente. Estranhamente, tive que alternar manualmente o shell (talvez algum cache estivesse ativo) digitando o seguinte:

/bin/bash

Voila!
[O problema surgiu devido a uma atualização de distribuição.]

Mateng
fonte
13

quando você entra pela primeira vez, tente estes dois comandos

stty sane
export TERM=linux

Eu tenho que fazer isso em algumas máquinas que eu vou para corrigir exatamente esse problema

Drake Clarris
fonte
1
Eu tentei isso, mas os persiste problema
Mateng
1
você tentou o termo como VT100 em vez de linux? que tal stty erase <backspace>(<backspace> estar onde você realmente pressiona a tecla) #
Drake Clarris 26/10/12
Com (Seta para cima): $ stty erase '^[[A' stty: invalid integer argument '\033[A'. Com [Backspace]: $ stty erase '^?'funciona. Com [Tab]: $ stty erase ' ' nenhum erro, mas depois [Backspace] está de volta ao comportamento estranho.
26512 Mateng
Eu tentei export TERM=VT100, mas sem sucesso.
26512 Mateng
1
stty tab0não ajuda. Eu acho que é necessário algum tipo de reconfiguração geral do xterm. Ou o mapa de teclas está simplesmente errado?
Mateng
5

Uma das maneiras mais fáceis de corrigir esse problema é digitar / bin / bash no prompt da interface da linha de comandos:

$ / bin / bash

O comando mencionado acima executará o Bourne Again Shell no topo do shell existente como um subprocesso. Isso apresenta a desvantagem de utilizar mais recursos, mas nada precisa ser editado e nenhuma permissão especial é necessária. Por exemplo, nas versões recentes do Kubuntu, ele iniciará uma sessão / bin / bash no topo da interface shell de linha de comando padrão / bin / dash.

Para persistir nas alterações, no entanto, uma possibilidade é editar o arquivo / etc / passwd e adicionar / editar / substituir o shell padrão em / bin / bash após o último caractere ':' na linha correspondente ao usuário. Para editar esse arquivo, porém, seriam necessários privilégios de administrador.

nightsinwhiteaustin
fonte
1

'Terminal Gbnome' não emula exatamente 'xterm' ..

de: Wikipedia >> Terminal GNOME

O Terminal GNOME emula o emulador de terminal xterm e fornece alguns dos mesmos recursos.


Um tratado sobre o problema e as soluções podem ser encontradas aqui:

Backspace do Linux / Excluir mini-HOWTO

Todo usuário do Linux foi preso, mais cedo ou mais tarde, em uma situação em que ter as teclas Backspace e Delete trabalhando no console e no X parecia impossível. Este artigo explica por que isso acontece e sugere soluções. As noções fornecidas aqui são essencialmente independentes de distribuição: devido ao conteúdo amplamente diferente dos arquivos de configuração do sistema em cada distribuição, tentarei fornecer ao leitor conhecimento suficiente para pensar em suas próprias correções, se necessário.

Suponho que a tecla Backspace retorne um caractere e depois apague-o sob o cursor. Por outro lado, a tecla Delete deve excluir o caractere sob o cursor, sem movê-lo. Se você acha que a função das duas teclas deve ser trocada, apesar de a maioria dos teclados apresentar uma seta apontando para a esquerda (←) na tecla Backspace, este documento não fornecerá soluções imediatas, mas certamente você pode achar úteis as explicações dadas aqui.

A solução mais simples fornecida (que pode funcionar aqui) é usar: bash $ export TERM = gnome

david6
fonte
1

Como usuário root, edite o arquivo / etc / passwd para seu usuário e altere de / bin / sh para / bin / bash

hdfs: x: 1020: 1001 :: / home / hdfs: / bin / sh para hdfs: x: 1020: 1001 :: / home / hdfs: / bin / bash

Isso funcionou para mim.

Nagaraj Vittal
fonte
1

Eu tentei todas as notas acima e mais de ( neste link ) sem sucesso. Você pode querer verificar se o vim está instalado.

Eu costumo usar vi não vim. Então eu instalei o vim.

$ sudo apt-get install vim

Depois disso, os toques no teclado começaram a funcionar corretamente quando eu executei o vi. Observando a saída a seguir, parece que o vi foi transformado em um alias para o vim após a instalação:

$ ls -al /etc/alternatives | grep vi 
lrwxrwxrwx   1 root root    18 Jan 13 09:38 vi -> /usr/bin/vim.basic
jtlindsey
fonte
0

Esse é um problema de compatibilidade com o teclado, ou seja, como é interpretado no sistema host. Pode ser necessário usar j ou h para mover no editor vi no modo de comando. As setas não funcionarão.

Verifique as preferências de perfil-> compatibilidade no sistema host para esse usuário específico.

sai siva sundar
fonte
0

Ok, eu sei que essa não é uma "solução", por exemplo, e pode não ajudar muitos de vocês , mas espero que ajude pelo menos um de vocês . Corrigiu o meu problema.

Minha criança de seis meses bateu no teclado e minhas teclas de seta pararam de funcionar na minha sessão de massa em uma caixa Debian. Eles trabalharam em qualquer outro lugar (todos os outros programas fora da massa). Depois de pesquisar no Google e até de desembarcar aqui (eu ia fechar essa guia, isso não resolveu para mim). Eu tentei alguma coisa. Abri uma nova sessão ssh na mesma caixa e minhas teclas de seta funcionaram. Entrei na minha sessão de tela e eles não funcionaram. Então, aconteceu algo ligado à sessão de tela atual, desativando as teclas de seta. Infelizmente, eu estava no meio de um grande projeto, tenho 28 janelas abertas na minha sessão de tela e não queria fechar a sessão, perdendo meu lugar nas 28 janelas.

Assim..

Enquanto estava no shell bash, tentei todas as combinações possíveis: CTRL + cima, baixo, esquerda direita, ALT + cima, baixo, esquerda, direita, SHIFT + cima, baixo, esquerda direita, CTRL + ALT + cima, baixo , esquerda direita, CTRL + SHIFT + cima, baixo, esquerda direita, etc. Ainda sem sorte, também tentei o menu do Windows e as teclas de aplicativos do Windows com as teclas acima, abaixo, esquerda e direita.

Agora minhas flechas funcionam novamente! Algo sobre uma das combinações do que está acima e as teclas de seta o consertaram.

PyTis
fonte
0

Nenhuma das respostas acima resolveu o meu problema idêntico, ou seja, não é possível usar backspace ou chaves semelhantes após sshing para um controle remoto a partir de um Ubuntu (aqui ubuntu-17.10 com ncurses-6.0).

Isso acaba sendo um problema com o terminfo. Basicamente, meu gnome-terminal diz que é um terminal xterm-256color (através da variável TERM, que é exportada pelo ssh para o controle remoto), mas o controle remoto não tinha uma configuração terminfo para o xterm-256color.

O seguinte problema foi corrigido:

$ host: echo $ TERM
xterm-256color
$ host: infocmp> terminfo.src
$ host: tic terminfo.src
$ host: scp .terminfo / x / xterm-256color $ remote: / usr / share / terminfo / x / xterm-256color

O infocmp, sem nenhuma opção, produz uma lista de fontes para o terminal na variável de ambiente $ TERM. Portanto, é equivalente a infocmp -I $ TERM.

Em seguida, a fonte resultante é compilada via tic.

Por fim, instale a configuração terminfo correspondente no local remoto. Portanto, na próxima vez que eu conectar ao $ remote via $ host, ele saberá sobre o meu terminal.

user1448926
fonte
O que seu bloco de código faz? criar um termo config de alguma forma? Seria bom ter alguma explicação, a execução de código mistério não é a melhor idéia, mesmo suas páginas do homem não são super clara sobre o efeito padrão de infocmp, ou como isso é útil
Xen2050
@ Xen2050: adicionei uma explicação para cada comando. infocmp sem qualquer opção é equivalente a infocmp -I $ TERM. Isso é descrito na página do manual, mas em duas partes: "Se nenhuma opção for especificada e zero ou um nome de termo for especificado, a opção -I será assumida. [...] As opções -I, -L e -C produzirá uma lista de fontes para cada terminal nomeado. -Eu uso os nomes terminfo Se nenhum nome de termo for fornecido, a variável de ambiente TERM será usada para o nome do terminal. "
user1448926