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.

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.


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.


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

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




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


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.