Rücktaste, Tab funktioniert nicht im Terminal (mit ssh)

37

Wenn ich mit meinem Konto (mit sudo-Berechtigungen) auf einen anderen Computer mit Debian sshe, erzeugt meine Rücktaste beim Drücken einige unangenehme Symbole. Auch Tab& delTasten funktionieren nicht.

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

gopi1410
quelle

Antworten:

37

Ich habe solche Probleme schon einmal gesehen.

Nehmen wir zum Beispiel die Rücktaste, der entfernte Host erwartet, dass ein Zeichen als "Löschen / Rücktaste" verwendet wird, während Sie die Rücktaste im Terminal drücken, sendet das Terminalprogramm ein Zeichen an den entfernten Host, wenn dies vom entfernten Host erwartet wird Bei den vom Terminalprogramm gesendeten Zeichen tritt dieses Problem auf. So ist eine schnelle Lösung wie folgt:

  1. Führen Sie den Befehl #stty -aauf dem Remote-Host aus und suchen Sie in der Ausgabe nach einem erwarteten Löschcode. Sprich erase=^?.
  2. Geben Sie im Terminal CtrlvIhre Rücktaste ein und drücken Sie sie. Sie werden sehen, welcher Code als "Löschen" gesendet wird. Sagen wir es ist ^H.
  3. Führen Sie auf dem Remote-Host aus #stty erase ^H.
    (Hinweis: Verwenden Sie Ctrlv+ Backspace, und geben Sie das ^ nicht manuell ein.)

Sie können das Tab-Problem wie oben beschrieben beheben.

Derui Si
quelle
Mein Backspace-Zeichen ist ein besonderes Symbol wie ein umgekehrtes Dreieck. Also es funktioniert nicht
gopi1410
1
Dieser einfache Kommentar ist mit Sicherheit die beste Lösung, die ich bisher gesehen habe. Es fühlt sich an wie ein Kludge, aber es funktioniert.
Paulo Matos
Das hat bei mir funktioniert! Was ich jedoch nicht verstehe, ist, warum meine Shell die Rücktaste wie erwartet behandelt, das Lesen von stdin in meiner App jedoch nicht. Wenn Sie die von Ihnen vorgeschlagene Änderung vornehmen, funktioniert die Rücktaste für beide. Ich verstehe, dass die Shell die Stdin-Pufferung übernimmt. Sollte die Rücktaste nicht für die Shell und eine App gleich sein?
Samuel
1
Was ist, wenn überhaupt kein Code gesendet wird? Strg + Rücktaste erzeugt nichts ...
Manfredo
Für mich ist der Backspace-Code derselbe wie die stty -aAusgabe, funktioniert aber immer noch nicht
Matej J vor
35

Neben der "stty" -Lösung können Sie auch die "TERM" -Lösung ausprobieren.

Sie können von einem Terminal (Putty, Solaris Dterm, Debain Xterm, You-Name-It) auf Ihr Debian-System zugreifen, wobei diese Terminal-Announce-Funktionen (einschließlich Tasten wie Backspace und Tab) über die Umgebungsvariable TERM ausgeführt werden.

Setzen Sie also nach ssh to unix host (es hängt nicht von debian it oder einem anderen Host ab) die TERM-Variable entsprechend Ihrem Terminal. Stellen Sie sich vor, Sie verwenden bash als Shell und vt100 als Terminal:

export TERM=vt100

ps: TERM sollte automatisch über ssh angekündigt werden, aber unter bestimmten Umständen schlägt diese Magie fehl.

paul
quelle
funktioniert immer noch nicht :(
gopi1410
Welches Terminal benutzen Sie? Und was ist der Wert von TERM, den Sie ausprobiert haben?
Paul
Ich habe versucht vt100. Wie erfahre ich den Wert von TERM? Ich habe ssh von Cygwin (in Windows) nach Debian ausprobiert. Wenn es Probleme mit Cygwin gibt, habe ich es sogar vom Ubuntu-Terminal aus versucht, aber das gleiche Problem.
gopi1410
Ich bin mir nicht sicher, ob Cygwin eine gute Terminalemulation hat, soweit ich weiß, verwendet Cygwin nur eine normale Windows-Konsole, der die Terminalemulation fehlt (kann falsch sein). Von Ubuntu sollte alles gut funktionieren. Etwas stimmt nicht mit der Shell- oder Termcap-Bibliothek unter Debian. Melden Sie sich bei Ubuntu an und geben Sie die folgenden Befehle aus: 1. echo $ TERM 2. stty -a
paul
2
Dies hat mir zwar nicht direkt geholfen, da TERM richtig eingestellt war, hat es aber geholfen, das Problem zu identifizieren. Ich habe die terminfo-Einträge für mein Terminal vermisst. Ich verwende urxvt und auf arch müssen Sie rxvt-unicode-terminfo installieren, um dieses spezielle Problem zu beheben
Xandaros
15

Dies liegt daran , Ihre Standard - Shell ist sh, zu verwenden bash, führen Sie einfach bashvon Ihrem Shell.

bash

So legen Sie bashals Standardshell fest:

chsh -s /bin/bash 

oder

sudo chsh -s /bin/bash yourusername
Eisflamme
quelle
2
Dieser hat es für mich behoben. Niemals auf meine Login-Shell schauen!
James Pack
2
Ich sehe dieses Problem, aber meine Muschel ist heftig.
fraxture
6

Ihre Shell kann auf /bin/shanstelle von gesetzt werden/bin/bash

jm.
quelle
1
Bezogen auf diese Antwort: unix.stackexchange.com/questions/50542/…
Samuel
Dies wäre hilfreicher, wenn es ein bisschen mehr erklären würde und wie man es ändert, aber es war das Problem, das ich hatte. Vielen Dank an @Tom für Ihren Link, der das Problem für mich behoben hat.
Jake
Dies war der Grund in meinem Fall .. für diesen bestimmten Benutzer. Es wurde keine Shell definiert /etc/passwd, als ich :/bin/bashseine Zeile hinzufügte , funktionierte es. Sie können herausfinden, mit welcher Shell gearbeitet wirdecho $0
MSpreij
6

Normalerweise verwende ich dies, um die Ausgabe von funky Zeichen in meinem Terminal zu korrigieren. Alle Sonderzeichen werden auf ihre Standardwerte zurückgesetzt.

stty sane

Aus der stty-Manpage:

Das Gleiche wie Cread -xcase -tostop -echoprt echoctl echoke, alle Sonderzeichen auf ihre Standardwerte

David Morales
quelle
2

Zusätzlich zu Pauls Antwort können Sie xterm-88color verwenden, wenn Sie die Fähigkeit behalten möchten, eine farbenfrohe Ausgabe zu erhalten

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc
beenotung
quelle
1
toe -aZeigt eine Liste der unterstützten Terminaltypen an. Dies xterm-88colorist bei weitem nicht die einzige Option, die auf bestimmten Systemen möglicherweise nicht verfügbar ist.
0xC0000022L