Ich verwende FreeBSD 11 mit PuTTY für SSH. Die Tastencodes der Tastatur scheinen überhaupt nicht richtig eingerichtet zu sein – zum Beispiel piepst sie beim Aufwärtspfeil und fügt „~“ für die meisten Navigationstasten ein, einschließlich Grundlagen wie Pfeile und Löschtaste. Die Tastatur ist eine Standardtastatur für UK-Englisch. Das Tippen ist eine echte Qual.
Ich habe eine Reihe von Threads über das Festlegen von Tastencodes gelesen, sowohl in rc als auch in der Shell, daher weiß ich, dass ich es als letzten Ausweg so einrichten kann.
Aber es wäre sehr seltsam für einen Client mit so viel Konfigurierbarkeit und einem Betriebssystem mit so weit verbreiteter Verwendung, keine Terminaloption / Einstellung gemeinsam zu haben, die beide „einfach verstehen“, dass ich beide einstellen kann und voila – die Tasten alle (oder die meisten) funktionieren. Das Problem ist, dass ich keine Ahnung habe, wie ich es finden kann, und wenn ich es finde, wie ich es für alle zukünftigen Sitzungen einstellen soll.
Ich verstehe, wie ich den Schlüsselcode finde, der vom Terminal für einen einzelnen Schlüssel gesendet wird, damit ich meine Schlüssel einzeln auf diese Weise einrichten kann. Aber ich würde gerne grundlegende Terminaleinstellungen für meine Shell rc und für PuTTY finden, die möglichst viele Schlüssel von beiden verstehen, sodass ich nur ein paar Ausnahmen einrichten muss, wenn ich sie brauche.
Wie kann ich das tun?
Akzeptierte Antwort:
Es gibt so viele Knöpfe zum Drehen und Drehen. Und vielen Ratschlägen im Internet folgen die Menschen blind. Wie immer viele Wege nach Rom, aber wenn man weiß, wie die Dinge zusammenhängen, sind sie sehr einfach.
Die ultrakurze Antwort lautet:
Ändern Sie die Terminalzeichenfolge in Putty von xterm
zu putty
(unter Verbindung -> Daten -> Zeichenfolge vom Typ Terminal).
Die typische Fallstricke, die es zu vermeiden gilt:
Stellen Sie sicher, dass Sie TERM
nicht festlegen an anderer Stelle in Ihren rc-Dateien.
Die etwas längere Antwort:
Zuerst würde ich damit beginnen, sicherzustellen, dass Sie tatsächlich die Standardeinstellungen verwenden. Von meinem persönlichen Windows 10-Laptop mit DK-Tastatur (und Mapping) verbinde ich mich mit einem FreeBSD 11.1-Setup mit DK-Mapping. In meinem Fall funktionieren die Pfeiltasten wie erwartet in der Befehlszeile. Links/rechts bewegt sich in der aktuellen Zeile. Auf/Ab geht durch den Befehlsverlauf.
Ich habe dies sowohl für /bin/sh (Standard-Benutzer-Shell) als auch für /bin/tcsh (Standard-Root-Shell) überprüft. Sie können sich über Muscheln informieren.
Sie schreiben, dass Sie wissen, wie Sie Ihre Tastenbelegung in der Shell-RC-Datei vornehmen können. Viele Vorschläge, wie dies zu tun ist, kursieren herum. Aber es ist normalerweise nicht das, was Sie tun sollten.
Sie werden Vorschläge wie diese für tcsh-Tastenkombinationen finden:
# Del(ete), Home and End
bindkey "\e[3~" delete-char
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
Und Vorschläge wie dieser für bash ( ~/.inputrc)
"\x7F": backward-delete-char
"\e[3~": delete-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
Aber anstatt diese Bindungen lokal für jede Sitzung und jede Shell festzulegen, sollten Sie für diesen Zweck lieber termcap/termininfo verwenden (dazu später mehr).
In diesem Zusammenhang ist Putty Ihr Terminal.
Die Standardeinstellung für Putty ist, TERM für Ihre Sitzung auf „xterm“ zu setzen. Dies geschieht, weil es einigermaßen xterm-kompatibel ist. xterm
bezieht sich nicht auf irgendein Terminal, sondern auf das Programm Xterm.
PuTTY-Konfiguration
Connection -> Data -> Terminal-type string: `xterm`
Wenn Sie sich angemeldet haben, können Sie überprüfen, ob diese Einstellung für Ihre Sitzung gilt:
echo $TERM
xterm
Wenn $TERM nicht mit dem übereinstimmt, was Sie in Putty festgelegt haben, haben Sie möglicherweise eine Überschreibung in Ihren rc-Dateien festgelegt. Beachten Sie die Warnung für /bin/sh
in ~/.profile
:
# Setting TERM is normally done through /etc/ttys. Do only override
# if you're sure that you'll never log in via telnet or xterm or a
# serial line.
# TERM=xterm; export TERM
Weil wir nicht mehr viele physische DEC VT100 verwenden xterm
ist das, was Sie an vielen Orten sehen werden.
Auch wenn Sie nur TERM
beibehalten als xterm
Sie erhalten eine Farbausgabe mit standardmäßigem Putty und FreeBSD als ls -G
wird funktionieren.
Einige werden empfehlen, dass Sie TERM
festlegen zu xterm-color
, xterm-256
oder rxvt-256color
um „richtige“ Farbunterstützung zu erhalten.
Aber denken Sie daran: All diese magischen TERM
Werte sind nur Zuordnungen in einer Datenbank. Ein Grund xterm
ist heute so weit verbreitet, dass einige Programme und Skripte prüfen, ob $TERM
beginnt mit xterm
(was eine schreckliche Vorstellung ist).
Dies bringt uns dann zurück zu termcap, das die Standardeinstellung von FreeBSD ist. Wenn Sie terminfo verwenden möchten, müssen Sie devel/ncurses installieren. Weitere Informationen hierzu finden Sie unter:Wie kann ich terminfo-Einträge unter FreeBSD verwenden?
Die Quelle der Termcap-Datenbank finden Sie in der Textdatei /usr/share/misc/termcap
. Wenn Sie Änderungen an dieser Datei vornehmen, müssen Sie cap_mkdb
ausführen damit das System die Änderung bestätigt. Hier finden Sie die Antwort auf Ihr Rätsel. Es gibt einen expliziten TERM
Einstellung für Putty mit dem Namen:putty
.
FreeBSD hat sich dann entschieden, die Einstellungen für xterm
nicht zu ändern um dem Verhalten von Putty zu entsprechen (wahrscheinlich aufgrund von Bedenken hinsichtlich der Kampffähigkeit). Aber sie waren so nett, eine Einstellung für Putty bereitzustellen.
Wenn Sie also die Putty-Standardeinstellung für Terminal-type string:
ändern von xterm
zu putty
dann spiegelt sich dies in TERM
wider wenn Sie sich anmelden. Und die standardmäßige FreeBSD-Termcap hat einen Eintrag dafür.
Und durch Magie und ohne viele rc-Dateien zu berühren, haben Sie jetzt funktionierende Pfeiltasten (ich hatte das auch mit xterm), aber auch Home/End bewegt sich zum Anfang/Ende der Zeile und Del(ete) löscht.
Bonus:
Es scheint, dass die Standard-Putty-Definition nicht alle 256 Farben unterstützt. Sie können dann Ihre Termcap ändern und diese beiden Zeilen hinzufügen (und cap_mkdb ausführen):
putty-256color:\
:pa#32767:Co#256:tc=putty:
Dann können Sie Ihren TERM
festlegen zu putty-256color
. Scott Robison schlug vor, dies hinzuzufügen – aber die Änderung wurde von FreeBSD nicht aufgegriffen. Ich kann diesen PR nicht mehr in der Datenbank finden.
Bonus 2:
Wenn Sie es vorziehen, TERM
beizubehalten als xterm
dann sollten Sie Zeit damit verbringen, Putty so zu konfigurieren, dass es den Erwartungen von FreeBSD an das xterm-Terminal entspricht.
Gehen Sie zu den Einstellungen Terminal -> Keyboard in der Einstellung Die Pos1- und Ende-Tasten Sie können „Standard“ in „rxvt“ ändern.
Mit dieser Änderung werden Sie feststellen, dass die Home-Taste auf der Befehlszeile funktioniert (bewegt sich zum Zeilenanfang). Aber Ende tut jetzt nichts.
Es geht also darum, Putty dazu zu bringen, dem zuzustimmen, was FreeBSD von einem xterm erwartet. Nur um zu zeigen, dass es auch andersrum geht.
Verwandte:Wie konfiguriere ich Influx richtig?