web-dev-qa-db-fra.com

Retour arrière, l'onglet ne fonctionne pas dans le terminal (en utilisant ssh)

Lorsque je ssh sur une autre machine avec Debian avec mon compte (avec les autorisations Sudo), ma touche de retour arrière génère des symboles maladroits en appuyant sur. Aussi Tab & del les clés ne fonctionnent pas trop.

D'un autre côté, j'ai également un autre compte sur la même machine et quand je ssh via ce compte, son terminal fonctionne parfaitement bien. Je ne pouvais pas comprendre pourquoi cela se produisait.

42
gopi1410

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

Prenez le retour arrière par exemple, l'hôte distant s'attend à ce qu'un caractère soit utilisé comme "effacement/retour arrière", tandis que vous appuyez sur retour arrière dans le terminal, le programme du terminal enverra du caractère à l'hôte distant, si ce que l'hôte distant attend diffère avec les caractères envoyés par le programme du terminal, vous rencontreriez ce problème. Donc, une solution rapide est la suivante:

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

Vous pouvez résoudre le problème de tabulation avec le même que ci-dessus.

40
Derui Si

A côté de la solution "stty", vous pouvez essayer la solution "TERM".

Vous accédez à votre Debian à partir d'un terminal (PuTTY, solaris dterm, debain xterm, you-name-it), ce terminal annonce des capacités (qui incluent des touches telles que Backspace et Tab) via la variable d'environnement TERM.

Donc, après ssh pour unix Host (cela ne dépend pas de Debian ou d'un autre hôte), définissez la variable TERM en fonction de votre terminal. Considérez que vous utilisez bash comme Shell et vt100 comme terminal:

export TERM=vt100

ps: TERM devrait être annoncé via ssh de manière automatique, mais dans certaines circonstances, cette magie échoue.

40
paul

C'est parce que votre Shell par défaut est sh, pour utiliser bash, exécutez simplement bash à partir de votre Shell.

bash

Pour définir bash comme shell par défaut:

chsh -s /bin/bash 

ou

Sudo chsh -s /bin/bash yourusername
17
iceflame

Votre shell peut être défini sur /bin/sh au lieu de /bin/bash

7
jm.

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

stty sane

Depuis la page de manuel stty:

identique à cread -ignbrk brkint -inlcr -igncr icrnl -iutf8 -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo-echl -xcase -tostop -echoprt echoctl echoke, tous les caractères spéciaux à leurs valeurs par défaut

7
David Morales

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

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc
2
beenotung
# stty -a
speed 38400 baud; rows 34; columns 134; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = 
<undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff - 
iuclc -ixany imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl 
echoke

Ma clé d'accueil affiche un ^ [[1 ~, selon la solution de @Derui Si, ma clé de retour arrière fonctionne correctement, je ne sais pas quoi faire pour la clé d'accueil.

1
Aditya

Essayez cette commande

stty sane

Je pense que vos paramètres de ligne de terminal ont été corrompus, cette commande réinitialisera tout par défaut.

0
Aravind Ekan