我有一台可以通过 SSH 访问的 Fedora 机器。我想使用的程序之一偶尔会使用功能键。问题是我从 Android 平板电脑(ASUS Transformer Infinity)使用物理键盘进行 SSH,但没有F1-F12键。因此,在我使用的终端应用程序 (VX ConnectBot) 决定将它们添加为一项功能之前,我一直在寻找一种使用键盘其余部分发送它们的方法。
我可以使用所有可打印的 ASCII 字符、Esc、Ctrl、Shift、Enter和Tab。
答案1
终端只能识别字符,不能识别按键。因此,所有功能键都使用控制字符编码为字符序列。除了一些具有关联控制字符(Tabis Ctrl+I
、Enteris Ctrl+M
、Escis 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
- 。F10
0
F10
当在电话或其他缺乏物理 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+Number
F-Number
我不知道是否有一种打字方式F11
或F12
这种方式,因为我从来不需要这样做。