无法让键盘在腻子中正常工作

Ruf*_*fus 7 keyboard ssh putty

我在 win7 上使用 putty 作为客户端,在 debian 服务器上登录到 ssh。但是我在腻子控制台上遇到了一个关于键盘行为的奇怪问题。

我注意到它与腻子中的键盘配置有关。看了putty的手册后,我成功制作了backspacekey工作,但是还是有关于ESC,箭头,homeend,和F1-F12键的问题。

这是我在腻子中的键盘配置

在这里,我在下面列出了他们的行为。似乎错误映射ESC是根本原因。

  • ESC => ^[
  • up => ^[OA
  • down => ^[OB
  • right => ^[OC
  • left => ^[OD
  • home => ^[[1~
  • end => ^[[[4~
  • F1 => ^[[[11~
  • F12 => ^[[24~

================================================

在这里,我将说明为什么我认为 esc 映射错误:

在正常工作的 ssh 控制台中,我按esc,它应该什么都不显示。

(before)
root@somemachine:
(after)
root@somemachine:
Run Code Online (Sandbox Code Playgroud)

但是在这个出现故障的 ssh 控制台中,我按esc,它显示^[

(before)
root@somemachine:
(after)
root@somemachine: ^[
Run Code Online (Sandbox Code Playgroud)

我在两个 ssh 控制台上都运行了 od -c 并按下了esc,它们给出了相同的输出。

(normal one)
root@opengg:~# od -c
^[

(malfunctioning one)
$ od -c
^[
Run Code Online (Sandbox Code Playgroud)

Red*_*ick 15

问题是 TERM 环境变量的值与配置的终端特征不匹配 - 特别是“Home 和 End 键”和“功能键和键盘”设置。

这些可能很难做到。

Debian 服务器所期望的。

键入infocmp -I以查看您的计算机所期望的内容。

$ infocmp -I 
#       Reconstructed via infocmp from file: /usr/share/terminfo/a/ansi
ansi|ansi/pc-term compatible with color,
        …
        rmul=\E[m, il1=\E[L, kbs=^H, kcbt=\E[Z, kcud1=\E[B,
        khome=\E[H, kich1=\E[L, kcub1=\E[D, kcuf1=\E[C, kcuu1=\E[A,
        …
Run Code Online (Sandbox Code Playgroud)

khome=\E[H意味着ESC [ H当您按下 时,服务器预计会收到三个字符Home

您可以查看 TERM 的其他值的预期值

$ infocmp -I xterm
#       Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm
xterm|X11 terminal emulator,
        …
        is2=\E[!p\E[?3;4l\E[4l\E>, il1=\E[L, ka1=\EOw, ka3=\EOu,
        kb2=\EOy, kbs=\177, kbeg=\EOE, kc1=\EOq, kc3=\EOs,
        kdch1=\E[3~, kcud1=\EOB, kend=\E[4~, kent=\EOM, kf1=\EOP,
        kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
        kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
        kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR,
        kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
        kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kcub1=\EOD,
        kmous=\E[M, knp=\E[6~, kpp=\E[5~, kcuf1=\EOC, kcuu1=\EOA,
        …
Run Code Online (Sandbox Code Playgroud)

在这里您可以看到,如果TERM设置为xterm,则该服务器期望ESC [ 1 ~Home按下时接收( khome)

如果以上内容太神秘,请尝试 infocmp -L

你也可以做一些事情,比如tput khome | hexdump -C如果你知道你感兴趣的键的 terminfo 功能名称。

$ tput khome | hexdump -C
00000000  1b 5b 48                                          |.[H|
Run Code Online (Sandbox Code Playgroud)

或者,可以说更清晰

$ tput khome | hexdump -e '12/1 "%3_u" "\n"'
esc  [  H
Run Code Online (Sandbox Code Playgroud)

或查看另一个 TERM 设置可能意味着什么

$ TERM=xterm tput khome | hexdump -e '12/1 "%3_u" "\n"'
esc  [  1  ~
Run Code Online (Sandbox Code Playgroud)

如果输出为空,则服务器认为终端类型 (TERM) 没有该密钥。

Putty实际发送的内容。

要查看Home实际发送的内容,请运行vi,按i(对于插入模式)按Ctrl+V然后按Home并按Esc退出插入模式。

解决方案

调整 Putty 配置(或 TERM),直到发送的内容与另一端的预期相符。


例如

按照https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/terminfo.html中的说明进行操作,然后在 Putty、Configuration、Connection、Data、terminal-type string = PuTTY 中保存并保存。也许。


归档时间:

查看次数:

59014 次

最近记录:

7 年,9 月 前