为什么byobu只能使用终端拆分成标签,而不是在console / tty中做同样的事情?

我已经使用了Byobu并注意到一些奇怪的事情:当我使用终端模拟器时,我可以将Byobu分成标签,但当我在控制台或tty时,按Shift + F2只输入波形符( ~ )和Ctrl + F2无效。

这是技术限制吗? 如果是这样,它是如何工作的?

这是一个很好的问题!

遗憾的是,Linux中的实际控制台TTY并不是一个真正的Xterm ,它可以捕获并支持更多的按键操作。

我一直怀疑可以教Linux TTY来支持Shift-F-key,尽管我从来没有尝试过。 抱歉。

一点背景:

从历史上看,有很多“终端类型”(“终端”是键盘和文本显示 – xterm是终端类型,控制台也是如此),所有这些都有不同的密钥。 如果你现在看一下你的键盘,它可能在空格键的左边有一个“Windows键”。 Mac没有这些,他们可能有一个“Apple键”(谷歌,如果你想看到这个)。 有些键盘上有一个“Del”键,退格键位于大多数现代键盘上。 在某些终端类型上(例如电传打字机 – 实际上它使用打印机作为屏幕),您无法“删除”一个字符。 它有function键吗? 多少? 哪个字符会使光标向后移动一个字符? “回车”字符是否移动到当前行的开头或下一行? 屏幕的字符宽度如何? 你能“显示”文字颜色吗? 你怎么改变颜色?

为了使Unix / Linux尽可能可用,在尽可能多的终端上,有文件描述了每个终端能够做什么,以及哪些键应该执行哪些function(例如当你点击“Del”键时,它可能会工作作为“Del”,或者它可能作为“Backspace”)。 这些文件(在Linux中)可以在/ usr / sare / terminfo中找到。 实际使用的是由环境变量“TERM”决定的。 如果你“回应$ TERM”,你可以看到它的想法。

如果终端定义没有说明你有特定的密钥,那么程序就无法接收这些密钥。

xterm,gnome-terminal使用’xterm’终端类型,它支持function键之类的东西; 控制台使用(默认情况下)“linux”终端类型,它不认为它有这些密钥。 由于终端类型描述了如何按下键(并告诉接收程序如何监听它),因此byobu无法接收它们,因此无法对它们采取行动。

这就是“为什么”。 现在的解决方案。 据我所知,有3个(“最方便,最方便的顺序”):

  1. 设置不同的终端类型,与实际终端兼容,但具有更多function。 注意:这必须在运行byobu之前完成,而不是在其中。 我的安装有超过1,600种终端类型,如果您将其设置为错误,您可能无法键入,按Enter键等。 并将其设置为其他function并不一定能为您提供该function – 例如,如果您在控制台上,并且将终端类型设置为“xterm”,则无法使用您的控制台调整控制台大小鼠标,也不会将其设置为“dec”给你一个“设置”键。 但是,大多数终端类型大多相同 – ‘a’仍然是’a’。 您可能会看到垃圾字符,但通常不会。 我发现“TERM = linux-vt”似乎工作得很好。 我尝试的所有按键都正常工作,除了Alt-Function键和Alt-direction键。 请注意,Alt-Function键和Alt-direction键由控制台直接处理,以在虚拟终端之间切换。

  2. 使用其他组合键。 所有(据我所知)无法从控制台访问的键绑定具有替代键绑定。 例如,在默认安装中,Control-A后跟%将执行水平拆分,Control-A后跟垂直管道(“|”)将执行垂直拆分。 Control-A后跟一个问号将显示键绑定。 我认为理解你正在阅读的东西需要一段时间,但主要是“-T”(root表示它始终可用,前缀意味着你必须首先点击Control-A。如果你“bind-key -T”扎根“对某事,你将无法再输入’a’了!)。 下一列(紧接在键表之后)是键。 最后一列是它运行的内容。 因此,如果它显示“bind-key -T prefix%split-window -h”,那么如果按“前缀”(control-A)后跟’%’,它将分割窗口(水平)。

  3. 你可以从命令行运行这些东西(通常这只在byobu中有意义),如果你知道byobu调用它(以及什么选项)。 方便的是,这是键绑定页面的最后一列。 只需将’byobu’放在它前面即可从命令行执行此操作。 例如,keybindings页面显示“bind-key -T prefix%split-window -h”,所以我可以通过直接从byobu内部运行以下命令(来自bash等)来做同样的事情:“byobu split-window -H”。