Backspace, Tab ne fonctionne pas dans le terminal (en utilisant ssh)

37

Lorsque je ssh sur une autre machine avec Debian avec mon compte (avec des autorisations sudo), ma touche de retour arrière génère des symboles difficiles en appuyant sur. De plus Tabet les deltouches ne fonctionnent pas trop.

D'autre part, j'ai aussi un autre compte sur la même machine et lorsque je passe à travers ce compte, son terminal fonctionne parfaitement. Je ne pouvais pas comprendre pourquoi cela se produit.

gopi1410
la source

Réponses:

37

J'ai déjà vu de tels problèmes.

Par exemple, l’hôte distant s'attend à ce que certains caractères soient utilisés comme "effacement / retour arrière", tandis que vous appuyez sur la touche Retour arrière dans le terminal, le programme du terminal envoie un caractère à l’hôte distant, si ce que l’hôte distant attend diff les caractères envoyés par le programme de terminal, vous rencontreriez ce problème. Donc, une solution rapide est comme ci-dessous:

  1. Exécutez la commande #stty -adans l'hôte distant et recherchez ce qui devrait être un code d'effacement dans la sortie. Dis erase=^?.
  2. Dans le terminal, tapez Ctrlvet appuyez sur votre retour arrière. Vous verrez quel code est envoyé comme "effacer". Dis-le ^H.
  3. Dans l'hôte distant, exécutez #stty erase ^H.
    (Remarque: utilisez Ctrlv+ Backspace, ne tapez pas ^ manuellement)

Vous pouvez résoudre le problème de l'onglet avec la même chose que ci-dessus.

Derui Si
la source
Mon caractère de retour arrière est un symbole spécial qui ressemble à un triangle inversé. Donc, cela ne fonctionne pas
gopi1410
1
Ce simple commentaire est certainement la meilleure solution que j’ai envisagée. Cela ressemble à un kludge mais ça marche.
Paulo Matos
Cela a fonctionné pour moi! Ce que je ne comprends pas, c’est pourquoi mon shell gère le retour arrière comme prévu, mais pas la lecture de stdin dans mon application. Faire le changement que vous suggérez a pour effet que le retour arrière fonctionne pour les deux. Si j'ai bien compris, le shell gère la mise en tampon stdin. La gestion du retour arrière ne devrait-elle pas être la même pour le shell et pour une application?
Samuel
1
Que se passe-t-il si aucun code n'est envoyé? Ctrlv + backspace ne produit rien ...
Manfredo Le
Pour moi, le code de retour arrière est identique à la stty -asortie, mais ne fonctionne toujours pas
Matej J
36

En plus de la solution "stty", vous pouvez essayer la solution "TERM".

Vous utilisez votre terminal Debian depuis un terminal (putty, solaris dterm, debain xterm, you-name-it), cette capacité d’annonce terminale (qui inclut des clés telles que Backspace et Tab) via la variable d’environnement TERM.

Ainsi, après ssh sur un hôte unix (cela ne dépend pas de debian, ni de tout autre hôte), définissez la variable TERM en fonction de votre terminal. Considérez que vous utilisez bash en tant que shell et vt100 en tant que terminal:

export TERM=vt100

ps: TERM devrait être annoncé via ssh automatiquement, mais dans certaines circonstances cette magie échoue.

Paul
la source
ne fonctionne toujours pas :(
gopi1410
Quel terminal utilisez-vous? Et quelle est la valeur de TERM que vous avez essayée?
Paul
J'ai essayé vt100. Comment puis-je connaître la valeur de TERM? J'ai essayé ssh de cygwin (dans Windows) à Debian. S'il y a des problèmes avec cygwin, je l'ai même essayé depuis le terminal d'ubuntu, mais le même problème.
gopi1410
Je ne suis pas sûr que cygwin possède une bonne émulation de terminal. Autant que je sache, cygwin utilise uniquement une console Windows classique qui ne présente pas l’émulation de terminal (peut-être faux). De Ubuntu tout devrait fonctionner très bien. Quelque chose ne va pas avec la bibliothèque shell ou termcap sur debian. Connectez-vous à partir d'Ubuntu et donnez-moi le résultat des commandes: 1. echo $ TERM 2. stty -a
paul
2
Bien que cela ne m'aide pas directement, puisque TERM est correctement défini, cela aide à identifier le problème. Il me manquait les entrées terminfo de mon terminal. J'utilise urxvt et sur arch, vous devez installer rxvt-unicode-terminfo pour résoudre ce problème particulier
Xandaros
15

Cela est dû au fait que votre shell par défaut est sh, pour l’utilisation bash, exécuté bashdepuis votre shell.

bash

Pour définir bashvotre shell par défaut:

chsh -s /bin/bash 

ou

sudo chsh -s /bin/bash yourusername
flamme de glace
la source
2
Celui-ci l'a réparé pour moi. Jamais même si regarder mon shell de connexion!
James Pack
2
Je vois ce problème, mais ma coquille est bash.
Fraxture
6

Votre shell peut être réglé au /bin/shlieu de/bin/bash

jm.
la source
1
Lié à cette réponse: unix.stackexchange.com/questions/50542/…
Samuel
Ce serait plus utile s'il expliquait un peu plus et comment le changer, mais c'était le problème que j'avais. Merci @Tom pour votre lien qui a résolu le problème pour moi.
Jake
C'était la raison dans mon cas .. pour cet utilisateur particulier. Aucun shell n'a été défini dans /etc/passwd, quand j'ai ajouté :/bin/bashà sa ligne cela a fonctionné. Vous pouvez savoir avec quel shell est utiliséecho $0
MSpreij
6

J'utilise généralement cela pour corriger les caractères géniaux dans mon terminal. Il réinitialise tous les caractères spéciaux à leurs valeurs par défaut.

stty sane

De la page de manuel stty:

la même chose que cread -ignbrk brkint -inlcr -igncr-signcr icrnl -iutf8 -xcase -tostop -echoprt echoctl echoke, tous les caractères spéciaux à leurs valeurs par défaut

David Morales
la source
2

en plus de la réponse de paul, si vous voulez conserver la possibilité d'avoir une sortie colorée, vous pouvez utiliser xterm-88color

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc
été
la source
1
toe -aaffiche une liste des types de terminaux pris en charge ... xterm-88colorn'est de loin pas la seule option et peut même ne pas être disponible sur des systèmes particuliers.
0xC0000022L