通过 SSH 发送功能键 (F1-F12)

通过 SSH 发送功能键 (F1-F12)

我有一台可以通过 SSH 访问的 Fedora 机器。我想使用的程序之一偶尔会使用功能键。问题是我从 Android 平板电脑(ASUS Transformer Infinity)使用物理键盘进行 SSH,但没有F1-F12键。因此,在我使用的终端应用程序 (VX ConnectBot) 决定将它们添加为一项功能之前,我一直在寻找一种使用键盘其余部分发送它们的方法。

我可以使用所有可打印的 ASCII 字符、EscCtrlShiftEnterTab

答案1

终端只能识别字符,不能识别按键。因此,所有功能键都使用控制字符编码为字符序列。除了一些具有关联控制字符(Tabis Ctrl+IEnteris Ctrl+MEscis Ctrl+[)的常见按键之外,功能键还发送以Ctrl+[ [或开头的转义序列Ctrl+[ O。您可以使用tput命令来查看应用程序对终端上的每个功能键期望的转义序列。这些序列存储在terminfo数据库。例如,下面的 shell 片段显示了与每个功能键对应的转义序列。

$ for x in {1..12}; do echo -n "F$x "; tput kf$x | cat -A; echo; done
F1 ^[OP
F2 ^[OQ
F3 ^[OR
F4 ^[OS
F5 ^[[15~
F6 ^[[17~
F7 ^[[18~
F8 ^[[19~
F9 ^[[20~
F10 ^[[21~
F11 ^[[23~
F12 ^[[24~

查看功能键的转义序列的另一种方法是在不重新绑定+键的终端应用程序(例如 shell)中按Ctrl+ 。 +按字面意思插入下一个字符(这将是转义字符),您将能够看到序列的其余部分,其中包含普通字符。VCtrlVCtrlV

由于序列可能难以键入,因此请研究更改应用程序中的键绑定或使用其他终端模拟器。另请注意,您可能有时间限制:某些应用程序仅在转义序列进入足够快的情况下才识别它们,以便它们可以Esc单独为键赋予含义。

答案2

Jack Palevich 开发的 Android 终端模拟器使用音量键的组合键来发送各种按键,包括功能键。还有黑客键盘,它具有真正键盘所具有的所有可用键。

答案3

正如 Drake Clarris 所建议的,在 Android 上,您可以安装备用键盘,例如黑客的键盘包括 F 键。

但是,如果由于某种原因您无法安装新键盘,则还有其他选择,只要您的终端应用程序允许您按Esc和/或Alt

您通常可以使用Esc后跟Number,或使用forAlt+Number来模拟F1- 。F100F10

当在电话或其他缺乏物理 F 键的受限设备上使用终端模拟器时,这些快捷键非常有用。当您的终端程序或在同一会话中运行的另一个程序(例如 byobu/screen/tmux)出于其自身目的拦截 F 键时,它们对于物理键盘也很有用。

  • 示例Esc:我想按F10退出mc,午夜指挥官,但 Gnome 终端拦截F10并将其解释为菜单键。相反,我按Esc,然后0。 Gnome 终端单独传递输入,mc将它们解释为F10,然后mc退出。

  • 示例Alt:我想按F4过滤htop,但byobu拦截F4并将其解释为“下一个窗口”。相反,我按住Alt并按4。 Byobu 传递组合键,htop将其解释为F4,并启用过滤。

如果应用程序将其解释为与 不同的组合键,则该Alt方法可能不起作用。我在实践中没有遇到过这个问题。Alt+NumberF-Number

我不知道是否有一种打字方式F11F12这种方式,因为我从来不需要这样做。

相关内容