Backspace, Tab, Del und Pfeiltasten funktionieren nicht im Terminal (mit ssh)

44

Wenn ich mit meinem Konto (mit Sudo-Berechtigungen) auf einen anderen Ubuntu-Rechner shge, erzeugt meine Rücktaste beim Drücken einige unangenehme Symbole. Auch Tab, Entf und Pfeiltasten funktionieren nicht.

Andererseits habe ich auch ein anderes Konto auf demselben Computer und wenn ich dieses Konto durchschaue, funktioniert sein Terminal einwandfrei. Ich konnte nicht herausfinden, warum das passiert.

gopi1410
quelle
Ich habe das gleiche Problem - mein Host ist Win7-64 und meine Remote-Gastsysteme sind beide Ubuntu Server 10.04. Auf einem Server funktionieren die Schlüssel, auf einem anderen nicht.
Mateng
Zusätzliche Info: Ich betrete die entfernten Maschinen mit Putty / Kitty
Mateng
Können Sie versuchen, über ein anderes Programm zu ssh oder ein neues Profil für das Zielsystem zu erstellen?
Belacqua
Ich war auch mit Cygwin (in Win 7)
konfrontiert
Was wird bei der Eingabe von echo "$ TERM" zurückgegeben , wenn dies auftritt?
David6

Antworten:

32

EDIT: Referenz: Matengs Antwort

Mateng ist ziemlich nah dran, dass Sie wahrscheinlich Bourne Shell ausführen. Sie sollten Ihre /etc/passwdDatei jedoch nicht direkt bearbeiten . Verwenden Sie stattdessen den chshBefehl:

chsh -s /bin/bash

Das Flag -s macht die neue Shell (in diesem Fall Bash) zu Ihrer Login-Shell.

Aaron
quelle
Klingt plausibel. Wenn gopi1410 einverstanden ist, gehören Ihnen die 50 Wiederholungen.
Mateng
@Mateng: Einverstanden, und ein Link zu Ihrer Antwort hinzugefügt, um es zu vervollständigen
gopi1410
1
Als root sudo chsh -s /bin/bash
ausführen
1
@ Mehr als 3 Jahre später für mich gearbeitet. Ich danke dir sehr! Du bist unglaublich!
Goncalotomas
17

Die folgenden Änderungen haben das Problem für mich gelöst. Zuerst habe ich überprüft, welche Shell läuft:

$ echo $0

was zurückkehrte:

/bin/sh

Wie ich in diesem Beitrag in Ubuntuforums gelesen habe , /bin/bashbringt das Ändern der Shell die Lösung. Also habe ich meine Benutzereinstellungen bearbeitet, /etc/passwdum:

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

Ich habe mich abgemeldet und mich dann wieder angemeldet. Seltsamerweise musste ich die Shell manuell wechseln (vielleicht war ein Teil des Cache aktiv), indem ich Folgendes eingab:

/bin/bash

Voila!
[Das Problem ist auf ein Distributionsupdate zurückzuführen.]

Mateng
quelle
13

Probieren Sie diese beiden Befehle aus, wenn Sie zum ersten Mal ssh eingeben

stty sane
export TERM=linux

Ich muss dies auf einigen Computern tun, auf denen ich genau dieses Problem behebe

Drake Clarris
quelle
1
Ich habe es versucht, aber das Problem besteht weiterhin
Mateng
1
hast du term als vt100 anstatt linux probiert? Was ist mit stty erase <backspace>(<Rücktaste>, wo Sie tatsächlich die Taste gedrückt haben)
Drake Clarris
Mit (Pfeil nach oben): $ stty erase '^[[A' stty: invalid integer argument '\033[A'. Mit [Backspace]: $ stty erase '^?'es funktioniert. Mit [Tab]: $ stty erase ' ' kein Fehler, aber dann ist [Backspace] wieder auf merkwürdiges Verhalten.
Mateng
Ich habe es versucht export TERM=VT100, aber es hat nichts gebracht.
Mateng
1
stty tab0hilft nicht. Ich denke, eine Art allgemeine Neukonfiguration von xterm ist notwendig. Oder ist die Keymap einfach falsch?
Mateng
5

Eine der einfachsten Möglichkeiten, dieses Problem zu beheben, besteht darin, an der Eingabeaufforderung der Befehlszeile / bin / bash einzugeben:

$ / bin / bash

Mit dem oben genannten Befehl wird die Bourne Again-Shell als Unterprozess über der vorhandenen Shell ausgeführt. Dies hat den Nachteil, dass mehr Ressourcen verwendet werden, jedoch nichts bearbeitet werden muss und keine besonderen Berechtigungen erforderlich sind. In neueren Kubuntu-Versionen wird beispielsweise eine / bin / bash-Sitzung über der Standard-Befehlszeilen-Shell-Schnittstelle / bin / dash gestartet.

Um die Änderungen beizubehalten, besteht eine Möglichkeit darin, die Datei / etc / passwd zu bearbeiten und die Standard-Shell nach dem letzten ':' - Zeichen in der dem Benutzer entsprechenden Zeile in / bin / bash einzufügen / zu bearbeiten / zu ersetzen. Zum Bearbeiten dieser Datei sind jedoch Administratorrechte erforderlich.

Nächte in Weiß in
quelle
1

'Gbnome Terminal' emuliert nicht genau 'xterm'.

aus: Wikipedia >> GNOME Terminal

GNOME Terminal emuliert den xterm-Terminalemulator und bietet einige der gleichen Funktionen.


Eine Abhandlung über das Problem und die Lösung (en) finden Sie hier:

Linux Backspace / Mini-HOWTO löschen

Jeder Linux-Benutzer war früher oder später in einer Situation gefangen, in der es unmöglich schien, die Backspace- und Delete-Tasten auf der Konsole und auf X zu verwenden. In diesem Artikel wird erläutert, warum dies geschieht, und es werden Lösungen vorgeschlagen. Die hier gegebenen Begriffe sind im Wesentlichen verteilungsunabhängig: Aufgrund des sehr unterschiedlichen Inhalts der Systemkonfigurationsdateien in jeder Distribution werde ich versuchen, dem Leser genügend Wissen zu vermitteln, um bei Bedarf seine eigenen Korrekturen zu finden.

Ich gehe davon aus, dass die Rücktaste ein Zeichen zurückgehen und dann das Zeichen unter dem Cursor löschen soll. Andererseits sollte die Entf-Taste das Zeichen unter dem Cursor löschen, ohne es zu verschieben. Wenn Sie der Meinung sind, dass die Funktion der beiden Tasten vertauscht werden sollte, obwohl die meisten Tastaturen über einen Pfeil verfügen, der auf der Rücktaste nach links (←) zeigt, werden Sie in diesem Dokument nicht sofort eine Lösung finden, sondern sicher Vielleicht finden die hier gegebenen Erklärungen nützlich.

Die einfachste Lösung (die hier funktionieren kann) ist: bash $ export TERM = gnome

david6
quelle
1

Bearbeiten Sie als Root-Benutzer die Datei / etc / passwd für Ihren Benutzer und wechseln Sie von / bin / sh zu / bin / bash

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

Das hat bei mir funktioniert.

Nagaraj Vittal
quelle
1

Ich habe alle obigen Plus-Notizen von ( diesem Link ) ohne Erfolg ausprobiert . Möglicherweise möchten Sie überprüfen, ob vim installiert ist.

Normalerweise benutze ich vi nicht vim. Also habe ich vim installiert.

$ sudo apt-get install vim

Danach funktionierten die Tastaturanschläge ordnungsgemäß, als ich vi ausführte. Wenn man sich die Ausgabe von Folgendem ansieht, sieht es so aus, als ob vi nach der Installation zu einem Alias ​​für vim gemacht wurde:

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

Dies ist ein Kompatibilitätsproblem mit der Tastatur, dh wie sie im Hostsystem interpretiert wird. Möglicherweise müssen Sie j oder h verwenden, um sich im vi-Editor im Befehlsmodus zu bewegen. Pfeile funktionieren nicht.

Überprüfen Sie die Profileinstellungen -> Kompatibilität im Hostsystem für diesen bestimmten Benutzer.

Sai Siva Sundar
quelle
0

Okay, ich weiß , das ist keine „Lösung“ pro sagen, und es können viele von Ihnen nicht helfen , aber hoffentlich hilft es , mindestens 1 von Ihnen . Es hat mein Problem behoben.

Mein sechs Monate altes Kind schlug auf meine Tastatur und meine Pfeiltasten arbeiteten nicht mehr an meiner Putty-Sitzung in einer Debian-Box. Sie haben überall gearbeitet (alle anderen Programme außerhalb von Putty). Nachdem ich googelt und sogar hier gelandet war (ich wollte diesen Tab schließen, er hat ihn für mich nicht gelöst). Ich habe etwas versucht. Ich habe eine neue SSH-Sitzung in derselben Box eröffnet, und meine Pfeiltasten haben funktioniert. Ich nahm an meiner Bildschirmsitzung teil und sie funktionierten nicht. Es ist also etwas passiert, das mit der aktuellen Bildschirmsitzung zusammenhängt und die Pfeiltasten deaktiviert. Leider war (bin) ich mitten in einem großen Projekt, habe 28 Fenster in meiner Bildschirmsitzung geöffnet und wollte die Sitzung nicht schließen, wodurch ich meinen Platz in allen 28 Fenstern verlor.

Damit..

Während ich auf der Bash-Shell war, habe ich alle denkbaren Kombinationen ausprobiert: STRG + hoch, runter, links rechts, ALT + hoch, runter, links, rechts, UMSCHALT + hoch, runter, links rechts, STRG + ALT + hoch, runter , links rechts, STRG + UMSCHALT + hoch, runter, links rechts usw. Immer noch ohne Glück habe ich auch das Windows-Menü und die Windows-App-Tasten mit hoch, runter, links rechts ausprobiert.

Jetzt funktionieren meine Pfeile wieder! Irgendetwas an einer der Kombinationen von dem, was oben steht, und den Pfeiltasten hat es behoben.

PyTis
quelle
0

Keine der obigen Antworten behebt mein identisches Problem, dh ich kann keine Rücktaste oder ähnliche Tasten verwenden, nachdem ich von einem Ubuntu auf eine Fernbedienung geshingt habe (hier Ubuntu-17.10 mit ncurses-6.0).

Dies ist ein Problem mit terminfo. Grundsätzlich sagt mein Gnome-Terminal, dass es sich um ein xterm-256color-Terminal handelt (über die TERM-Variable, die von ssh zur Fernbedienung exportiert wird), aber die Fernbedienung hatte keine terminfo-Konfiguration für xterm-256color.

Folgendes behebt das Problem:

$ 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

infocmp erzeugt ohne jede Option eine Quellenliste für das Terminal in der Umgebungsvariablen $ TERM. Es ist also äquivalent zu infocmp -I $ TERM.

Dann wird die resultierende Quelle über TIC kompiliert.

Installieren Sie abschließend die entsprechende Terminfo-Konfiguration am Remote-Standort. Wenn ich mich das nächste Mal über $ host mit $ remote verbinde, wird mein Terminal bekannt.

user1448926
quelle
Was macht Ihr Codeblock? irgendwie eine term config erstellen? Wäre nett, eine Erklärung zu haben, Mystery-Code ist nicht die beste Idee, auch ihre Manpages sind nicht super klar über den Standardeffekt von infocmp, oder wie das nützlich ist
Xen2050
@ Xen2050: Ich habe für jeden Befehl eine Erklärung hinzugefügt. infocmp ohne Option entspricht infocmp -I $ TERM. Dies wird in der Manpage beschrieben, aber in zwei Teilen: "Wenn keine Optionen angegeben sind und kein oder ein Termname angegeben ist, wird die Option -I angenommen. [...] Die Optionen -I, -L und -C erzeugt eine Quellenliste für jedes Terminal mit dem Namen. -Ich verwende die Terminnamen. Wenn keine Terminnamen angegeben sind, wird die Umgebungsvariable TERM für den Namen des Terminals verwendet. "
user1448926