Les touches de retour arrière, de tabulation, de suppression et de flèche ne fonctionnent pas dans le terminal (avec ssh)

44

Lorsque je ssh sur une autre machine Ubuntu avec mon compte (avec des autorisations sudo), ma touche de retour arrière génère des symboles peu pratiques en appuyant sur. De plus, les touches Tab, Suppr et Flèche ne fonctionnent pas.

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
J'ai le même problème - mon hôte est Win7-64 et mes systèmes invités distants sont tous deux Ubuntu Server 10.04. Sur un serveur, les clés fonctionnent, sur un autre, pas.
Mateng
Informations complémentaires:
J'entre
Pouvez-vous essayer de ssh via un programme différent ou créer un nouveau profil pour le système cible?
belacqua
J'ai aussi fait face au problème avec cygwin (dans la victoire 7)
gopi1410
Qu'est-ce qui est retourné en tapant echo "$ TERM" , quand cela se produit?
david6

Réponses:

32

EDIT: Référence: la réponse de Mateng

Mateng est proche dans le sens où je pense que vous utilisez probablement Bourne Shell. Mais vous ne devriez pas modifier votre /etc/passwdfichier directement. Essayez d'utiliser la chshcommande à la place:

chsh -s /bin/bash

L'option -s fera du nouveau shell (Bash dans ce cas) votre shell de connexion, à l'avenir.

Aaron
la source
Semble légitime. Si gopi1410 est d’accord, les 50 représentants sont à vous.
Mateng
@Mateng: accepté, et ajout d'un lien vers votre réponse pour le rendre complet
gopi1410
1
Exécuter en tant que root:sudo chsh -s /bin/bash
KrisWebDev
1
@Worked pour moi plus de 3 ans plus tard. Merci beaucoup! Vous êtes génial!
Goncalotomas
17

Les modifications suivantes ont résolu le problème pour moi. Tout d'abord, j'ai vérifié quel shell était en cours d'exécution:

$ echo $0

qui a rendu:

/bin/sh

Comme je l'ai lu dans ce post dans Ubuntuforums , changer le shell pour /bin/bashapporter la solution. J'ai donc modifié mes paramètres utilisateur /etc/passwdpour:

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

Je me suis déconnecté, puis connecté à nouveau. Bizarrement, je devais changer de shell manuellement (peut-être une partie du cache était-elle active) en entrant ceci:

/bin/bash

Voila!
[Le problème est dû à une mise à jour de la distribution.]

Mateng
la source
13

quand vous commencez à utiliser ssh, essayez ces deux commandes

stty sane
export TERM=linux

Je dois le faire sur certaines machines dans lesquelles je vais résoudre exactement ce problème

Drake Clarris
la source
1
J'ai essayé ça, mais le problème persiste
Mateng
1
avez-vous essayé terme comme VT100 au lieu de Linux? qu'en est-il stty erase <backspace>(<backspace> étant l'endroit où vous appuyez sur la touche)
Drake Clarris
Avec (flèche vers le haut): $ stty erase '^[[A' stty: invalid integer argument '\033[A'. Avec [Backspace]: $ stty erase '^?'ça marche. Avec [Tab]: $ stty erase ' ' pas d'erreur, mais [Backspace] revient alors à un comportement étrange.
Mateng
J'ai essayé export TERM=VT100, mais sans succès.
Mateng
1
stty tab0n'aide pas. Je suppose qu’une sorte de reconfiguration générale de xterm est nécessaire. Ou le keymap est tout simplement faux?
Mateng
5

L'un des moyens les plus simples de résoudre ce problème consiste à taper / bin / bash à l'invite de l'interface de ligne de commande:

$ / bin / bash

La commande susmentionnée exécutera le Bourne Again Shell par-dessus le shell existant en tant que sous-processus. Cela présente l’inconvénient d’utiliser plus de ressources, mais rien ne doit être modifié et aucune autorisation spéciale n’est requise. Par exemple, dans les versions récentes de Kubuntu, une session / bin / bash sera lancée sur l’interface shell de ligne de commande / bin / dash par défaut.

Toutefois, pour conserver les modifications, une possibilité consiste à modifier le fichier / etc / passwd et à ajouter / modifier / remplacer le shell par défaut dans / bin / bash après le dernier caractère ':' de la ligne correspondant à l'utilisateur. Pour pouvoir modifier ce fichier, des privilèges d’administrateur sont nécessaires.

nuits en blanc
la source
1

'Gbnome Terminal' n'émule pas exactement 'xterm' ..

à partir de: Wikipedia >> terminal GNOME

Le terminal GNOME émule l'émulateur de terminal xterm et fournit certaines des mêmes fonctionnalités.


Un traité sur la question et la solution (s) peuvent être trouvés ici:

Mini-HOWTO Linux Backspace / Delete

Tous les utilisateurs de Linux ont été tôt ou tard pris au piège dans une situation où il était impossible de disposer des touches de retour arrière et de suppression sur la console et sur X. Ce document explique pourquoi cela se produit et suggère des solutions. Les notions données ici sont essentiellement indépendantes de la distribution: en raison du contenu très différent des fichiers de configuration système dans chaque distribution, je vais essayer de donner au lecteur suffisamment de connaissances pour imaginer ses propres solutions, si nécessaire.

Je suppose que la touche Retour arrière doit revenir d’un caractère à l’autre, puis effacer le caractère situé sous le curseur. D'autre part, la touche Suppr doit supprimer le caractère situé sous le curseur, sans le déplacer. Si vous pensez que la fonction des deux touches doit être remplacée, alors que la plupart des claviers comportent une flèche pointant vers la gauche (←) sur la touche Retour arrière, cet article ne vous donnera pas de solutions immédiates, mais certainement vous. peut trouver utiles les explications données ici.

La solution la plus simple donnée (ce qui peut fonctionner ici) est d'utiliser: bash $ export TERM = gnome

david6
la source
1

En tant qu'utilisateur root, éditez le fichier / etc / passwd pour votre utilisateur et passez de / bin / sh à / bin / bash

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

Cela a fonctionné pour moi.

Nagaraj Vittal
la source
1

J'ai essayé tout ce qui précède, plus les notes de ( ce lien ) sans succès. Vous voudrez peut-être vérifier que vim est installé.

J'utilise habituellement vi pas vim. J'ai donc installé vim.

$ sudo apt-get install vim

Après cela, les touches du clavier ont commencé à fonctionner correctement lorsque j'ai exécuté vi. En regardant le résultat de ce qui suit, il semble que vi ait été transformé en un alias pour vim après l’installation:

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

Il s’agit d’un problème de compatibilité avec le clavier, c’est-à-dire la façon dont il est interprété dans le système hôte. Vous devrez peut-être utiliser j ou h pour vous déplacer dans l'éditeur vi en mode commande. Les flèches ne fonctionneront pas.

Vérifiez les préférences de profil -> compatibilité dans le système hôte pour cet utilisateur spécifique.

sai siva sundar
la source
0

D'accord, je sais que ce n'est pas une "solution" à proprement parler, et que cela n'aidera peut-être pas beaucoup d'entre vous , mais j'espère que cela aidera au moins un d'entre vous . Cela a résolu mon problème.

Mon enfant de six mois a frappé sur mon clavier et mes touches de direction ont cessé de fonctionner lors de ma session de mastic dans une boîte Debian. Ils ont fonctionné partout ailleurs (tous les autres programmes en dehors du mastic). Après Googleing et même atterrir ici (j'allais fermer cet onglet, ça ne m'a pas résolu). J'ai essayé quelque chose. J'ai ouvert une nouvelle session SSH dans la même boîte et mes touches de direction ont fonctionné. J'ai rejoint ma session d'écran et ils n'ont pas fonctionné. Donc, quelque chose vient de se passer lié à la session d'écran en cours qui désactive les touches fléchées. Malheureusement, j'étais au milieu d'un gros projet, j'avais 28 fenêtres ouvertes dans ma session écran et je ne voulais pas la fermer, perdant ainsi ma place sur chacune des 28 fenêtres.

Alors..

Alors que sur le shell bash, j'ai essayé toutes les combinaisons que je pouvais penser, de CTRL + haut, bas, gauche droite, ALT + haut, bas, gauche, droite, MAJ + haut, bas, gauche droite, CTRL + ALT + haut, bas , gauche droite, CTRL + MAJ + haut, bas, gauche droite, etc. Toujours sans chance, j'ai aussi essayé le menu des fenêtres et les touches de l'application Windows avec haut, bas, gauche droite.

Maintenant mes flèches fonctionnent à nouveau! Quelque chose à propos de l’une des combinaisons de ce qui est au-dessus et des touches fléchées le corrige.

PyTis
la source
0

Aucune des réponses ci-dessus ne corrige mon problème identique, c'est-à-dire que je ne peux pas utiliser des touches de retour arrière ou des touches similaires après l'envoi d'une commande à une personne distante depuis Ubuntu (ici ubuntu-17.10 avec ncurses-6.0).

Cela finit par être un problème avec terminfo. En gros, mon gnome-terminal dit que c’est un terminal xterm-256color (via la variable TERM, qui est exportée par ssh vers la télécommande), mais la télécommande n’avait pas de configuration terminfo pour xterm-256color.

Procédez comme suit pour résoudre le problème:

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

infocmp, sans aucune option, produit une liste source pour le terminal dans la variable d'environnement $ TERM. Donc, cela équivaut à infocmp -I $ TERM.

Ensuite, la source résultante est compilée via tic.

Enfin, installez la configuration terminfo correspondante sur l’emplacement distant. Ainsi, lors de ma prochaine connexion à $ remote via $ host, il sera informé de mon terminal.

utilisateur1448926
la source
Que fait votre bloc de code? créer une config terme en quelque sorte? Ce serait bien d'avoir des explications, utiliser du code mystère n'est pas la meilleure idée, même leurs pages de manuel ne sont pas très claires sur l'effet par défaut d'infocmp, ou en quoi cela est utile
Xen2050
@ Xen2050: J'ai ajouté une explication pour chaque commande. infocmp sans option équivaut à infocmp -I $ TERM. Ceci est décrit dans la page de manuel, mais en deux parties: "Si aucune option n'est spécifiée et si un nom de terme est spécifié, l'option -I est utilisée. [...] Les options -I, -L et -C produira un listing source pour chaque terminal nommé. -J’utilise les noms terminfo Si aucun nom n’est donné, la variable d’environnement TERM sera utilisée pour le nom du terminal. "
user1448926