Wie kann ich Funktionstasten in einem tty an htop übergeben?

9

Ich versuche htopin tty1 zu verwenden. Einige der Funktionstasten scheinen jedoch nicht normal zu funktionieren. F1und F2nichts tun und F3scheint das Setup auszulösen (das normalerweise von ausgelöst werden sollte F2). Außerdem F4und F5nicht arbeiten. Wenn ich versuche Esc, diese Bildschirme zu verlassen, muss ich sie zweimal drücken.

In einem normalen Terminal ( terminator) funktionieren die Funktionstasten einwandfrei. Allerdings muss ich auch Eschier zweimal drücken , also ist das vielleicht ein roter Hering.

Wie kann ich diese Funktionstasten in tty1 verwenden?

BEARBEITEN

Wenn ich in tty1 Ctrl+ vdann F1auf F5usw. drücke, erhalte ich die folgende Ausgabe:

^[[[A
^[[[B
^[[[C
^[[[D
^[[[E

In terminatorbekomme ich

^[OP
^[OQ
^[OR
^[OS
^[[15~

Die darüber liegenden Funktionstasten sind äquivalent (zB ^[[17~für F6).

BEARBEITEN 2

Als Antwort auf Stéphane Chazelas ' Kommentar .

  • $TERMist in tty1 dasselbe wie in meinem "normalen" Arbeitsterminal. Es ist xterm-256color.
  • Ich benutze weder Bildschirm noch tmux.
  • Ich verwende htop1.0.3, obwohl meine erste Bearbeitung darauf hinzudeuten scheint, dass es sich um ein Problem handelt, das vor mir liegt htop.

"Entspricht das infocmp -L1 | grep key_f, was diese Schlüssel für Sie senden?

Ich bin nicht sicher, was Sie unter "Übereinstimmung mit dem, was diese Schlüssel für Sie senden" verstehen, aber ich habe diesen Befehl sowohl in meinem normalen Terminal als auch in tty1 ausgeführt, und die Ausgabe war wie unten identisch.

key_f1=\EOP,
key_f10=\E[21~,
key_f11=\E[23~,
key_f12=\E[24~,
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R,
key_f16=\E[1;2S,
key_f17=\E[15;2~,
key_f18=\E[17;2~,
key_f19=\E[18;2~,
key_f2=\EOQ,
key_f20=\E[19;2~,
key_f21=\E[20;2~,
key_f22=\E[21;2~,
key_f23=\E[23;2~,
key_f24=\E[24;2~,
key_f25=\E[1;5P,
key_f26=\E[1;5Q,
key_f27=\E[1;5R,
key_f28=\E[1;5S,
key_f29=\E[15;5~,
key_f3=\EOR,
key_f30=\E[17;5~,
key_f31=\E[18;5~,
key_f32=\E[19;5~,
key_f33=\E[20;5~,
key_f34=\E[21;5~,
key_f35=\E[23;5~,
key_f36=\E[24;5~,
key_f37=\E[1;6P,
key_f38=\E[1;6Q,
key_f39=\E[1;6R,
key_f4=\EOS,
key_f40=\E[1;6S,
key_f41=\E[15;6~,
key_f42=\E[17;6~,
key_f43=\E[18;6~,
key_f44=\E[19;6~,
key_f45=\E[20;6~,
key_f46=\E[21;6~,
key_f47=\E[23;6~,
key_f48=\E[24;6~,
key_f49=\E[1;3P,
key_f5=\E[15~,
key_f50=\E[1;3Q,
key_f51=\E[1;3R,
key_f52=\E[1;3S,
key_f53=\E[15;3~,
key_f54=\E[17;3~,
key_f55=\E[18;3~,
key_f56=\E[19;3~,
key_f57=\E[20;3~,
key_f58=\E[21;3~,
key_f59=\E[23;3~,
key_f6=\E[17~,
key_f60=\E[24;3~,
key_f61=\E[1;4P,
key_f62=\E[1;4Q,
key_f63=\E[1;4R,
key_f7=\E[18~,
key_f8=\E[19~,
key_f9=\E[20~,
Sparhawk
quelle
1
Drücken Sie auf tty1 an der Shell-Eingabeaufforderung Ctrl+Vdann F1und sehen Sie, was eingefügt wird. Wiederholen Sie dies für F2, F3, F4und F5, und dann das gleiche tun in Terminator. Sagen Sie uns, was Sie sehen.
Gilles 'SO - hör auf böse zu sein'
@ Gilles Die Frage wurde bearbeitet.
Sparhawk
Was ist der Wert $TERMdarin? Verwenden Sie Bildschirm oder tmux? Welche Version von htop? Entspricht das infocmp -L1 | grep key_f, was diese Schlüssel für Sie senden?
Stéphane Chazelas
@ StéphaneChazelas Ich habe die Frage bearbeitet.
Sparhawk
2
Es sollte TERM = Linux sein, die virtuelle Linux-Konsole hat kaum etwas mit xterm zu tun. getty sollte $ TERM für Sie festlegen, Sie sollten es nicht überschreiben.
Stéphane Chazelas

Antworten:

4

Indem man es einstellt:

export TERM=xterm-256color

Sie sagen htop(und jeder anderen visuellen Terminalanwendung, die die termcap- oder terminfo-Datenbank verwendet), dass Ihr Terminal ein xterm mit 256 Farben und keine virtuelle Linux-Konsole ist.

htopfragt die terminfo-Datenbank ab, um zu wissen, auf welche Zeichenfolge gesendet wird F1, F2... aber erhält diese für xterm.

xtermSendet andere Sequenzen als die virtuelle Linux-Konsole für die Schlüssel, die Sie überprüfen können, indem Sie die terminfo-Datenbank beispielsweise von Hand abfragen infocmp:

$ infocmp -L1 xterm-256color | grep 'key_f[1-5]='
        key_f1=\EOP,
        key_f2=\EOQ,
        key_f3=\EOR,
        key_f4=\EOS,
        key_f5=\E[15~,
$ infocmp -L1 linux | grep 'key_f[1-5]='
        key_f1=\E[[A,
        key_f2=\E[[B,
        key_f3=\E[[C,
        key_f4=\E[[D,
        key_f5=\E[[E,

So htopwird nicht erkennen , \E[[Awie ein F1, wird es erwarten \EOPdafür.

Hier wollen Sie nicht Werte zuweisen $TERMin ~/.bashrc. $TERMsollte von den Terminalemulatoren ( xterm, terminator) selbst und von gettyfür Linux virtuellen Konsolen (sollte vorhanden sein linux) festgelegt werden.

Wenn Sie mit dem Wert, den ein bestimmter Terminalemulator auswählt $TERM, nicht zufrieden sind , sollten Sie diese Konfiguration der Terminalemulatoren aktualisieren.

Stéphane Chazelas
quelle
Öffnen Sie auf dem Mac einfach die Terminaleinstellungen und wechseln Sie von "ansi" zu xterm-256color.
Xeoncross
Danke für die ausführliche Erklärung. In meinem Fall wurde KiTTY (Gabel von PuTTY) $TERMauf eingestellt xterm-256color, aber für die Verwendung von ESC[n~Funktionstasten eingerichtet. Ich habe die Funktionstasten geändert, die XTerm R6in den Einstellungen verwendet werden sollen, und jetzt funktioniert alles.
Alan