如何让 Linux 正确解释键盘字符?

如何让 Linux 正确解释键盘字符?

我通过 putty 访问 Linux 服务器 shell,但我使用的许多键都无法转换,
上、下、左、右都被视为 ^[[A、^[[B、^[[D 和 ^[[C;
但 C-up、C-down、C-left 和 C-right 也是如此。
而回车键被视为 Cj(向下移动到下一行),
退格键被视为 Ch,即向后删除。

我怎样才能阻止这些键被转换成其他键(这样我就可以例如配置 Ch 和 backspace 来执行两个不同的功能)以及是什么在进行这种转换(Putty、内核、shell)?

答案1

尝试改为$TERM“xterm”。

尝试将 PuTTY 的键盘设置设置为“rxvt”、“Esc[n~”和“Control-?”。

您使用的是什么 shell?如果是 Bash,那么您可能需要进行一些设置~/.inputrc

按键解释受以下因素影响:

  • PuTTY-或其他终端仿真器
  • 运行终端仿真器的操作系统
  • /etc/X11/xorg.conf- 如果您使用 X-Window 系统。
  • Bash/Readline 通过/etc/inputrc~/.inputrc- 或其他 shell 中的类似功能
  • terminfo 或者在某些情况下 termcap
  • 变量$TERM
  • 我可能忘记了什么

答案2

好的,这是我想到的解决方案 - 我放弃了 PuttyCyg 并开始使用 MinTTY。它似乎将我的更多实际密钥传递给了服务器。:>

详细说明 -
看到之后这篇博文 我觉得 Putty(Cyg) 可能需要进行修补才能完成我想要的工作,因此我尝试了其他可以与 cygwin 交互的终端仿真器。当我使用 Cv 查看服务器看到的内容时,MinTTY 显示了不同的代码,包括:
C-(箭头键)和(箭头键)的不同代码、
CM 表示 Return、C-^ 表示 C-Return,
以及 meta'd tab 和 backspace 的不同代码;
这意味着这些键现在注册为不同的,因此可以配置 emacs 以将它们用于不同的用途,例如 CM 可以是“换行和缩进”,而 C-^ 是“cua-set-rectangle-mode”。我一直在尝试修复我的 SSHed emacs 会话……
有关 emacs 的更多详细信息以及一般的键码,我还发现

答案3

是的,有很多参与者决定如何解释您的按键。如果您连接的是远程系统,那么 PuTTY 或您的终端仿真器可能是瓶颈——也就是说,如果它为 up 和 control-up 发送相同的数据,那么您在下游所做的任何事情都无法恢复差异。对于每个参与者来说都是如此,但我知道大多数其他参与者都是可配置的。我不知道您的终端仿真器的可配置性如何。有些即使能够看到 up 和 control-up 之间的差异,仍会向它们连接的进程发送相同的数据。

您是否在 Windows 中运行 PuTTYTel?那么其他人将不得不帮助您弄清楚如何让 PuTTYTel 检测 up 和 control-up 之间的差异,并为每个差异发送不同的数据。我只知道 *nix。

回车键和删除键等发送的键取决于终端仿真器设置的 TERM。您应该能够在另一端使用任何有 terminfo 文件的东西。在我的计算机上,vt100 的 terminfo 文件显示回车键应该是 ^M,而不是 ^J。(vt100 中的退格键是 ^H。)所以我不知道您有多依赖这个终端仿真器……

在 xterm 中,退格键也是 ^H。在其他 terminfo 定义中,它是 ^?,即 0x7f。例如,在“linux”和“rxvt-unicode”terminfo 定义中,这是正确的。

答案4

您想要的按键在vt100。它们根本无法与该终端类型共存。尝试将仿真设置为 xterm 或 rxvt(如果您使用可以进行 xterm 仿真的终端仿真器,它甚至可以与另一端的应用程序共享鼠标信息)。

相关内容