真实终端

真实终端

我使用的是 FreeBSD。

我想设置控制台宽度(只是控制台,而不是 ssh 或 telnet)。

我使用了这个命令:

stty cols 132

这仅适用于控制台还是适用于所有连接(控制台、ssh 和 telnet)?

答案1

stty实际上并没有重新调整终端的大小。它只是改变线路规则中记录的一些值。更改终端显示的实际高度和宽度是通过根据控制台设备是真实终端、内核虚拟终端还是用户空间虚拟终端而变化的机制来完成的。

真实终端

控制台可以是一个真正的真实终端,连接到串行设备。在这种情况下,告诉终端重新调整其显示大小需要发出一个控制序列某种形式,通过电线到达终端。该控制序列的内容因终端类型而异。此外,没有 termcap 功能可以轻松提供它。

通常,但并不总是取决于串行线路另一端实际拥有的终端,终端将遵循 DEC VT340 及更高版本遵循的 DEC 私有控制序列:DECSLPP/DECSNLSDECSCPP小吃工具集console-resize(又名resizecons)命令发出这些:

$ 调整大小 80x25

请注意,大多数实际终端将实际执行的列和行组合限制为相当有限的预定义终端尺寸集。例如,传统上,DEC VT 仅支持 80 或 132 列。

真实终端是这样的情况:在更改终端的显示大小后,必须通过运行 来显式更新线路规则的终端大小概念stty。线路规则对控制序列一无所知,并且终端设备本身无法影响线路规则,并且实际上不知道它正在与操作系统进行通信线路纪律这样的概念。

用户空间虚拟终端

nosh 工具集的用户空间虚拟终端遵循相同的 DEC 私有控制序列,并且可以使用命令进行类似调整console-resize。与真实终端一样,它们始终以相同模式启动,直到控制序列将其更改。与真实终端不同,但与它们旨在取代的内核虚拟终端一样,它们以 80×25 模式启动,而不是许多真实终端的 80×24 模式。

同样,与真实终端不同,但与内核虚拟终端类似,在告诉终端更改其大小后,您不需要调用stty来更新行规则,因为大小更改操作会更新行规则本身。

与真实终端和内核虚拟终端不同,它们支持控制序列中允许的更广泛的大小范围,从 2×2 到 65535×65535。

这将我们带到内核虚拟终端。

内核虚拟终端

这些是由内核本身内置的终端仿真器提供的。他们可能是你天真地认为的思考成为“控制台”,直到您阅读手册并意识到控制台(定义为内核诊断和跟踪输出以及输出发送到的位置/dev/console)可以是串行设备上的真实终端 ( comconsole)、内核虚拟终端( vidconsole),或者什么都没有( nullconsole)。

它们不被控制序列操纵;相反,人们打开这样一个终端设备并执行特定于设备的ioctl()请求。幸运的是,有一个工具可以包装一些更常见的ioctl()请求,使它们无需编写自己的程序即可访问。

从登录会话在要更改的内核虚拟终端上本身,或使用从此类终端设备重定向的标准输入:

  1. 获取可用模式列表:

    $ vidcontrol -i 模式
  2. 确定具有合适行和列的模式。在我的一台机器上,恰好是这台机器,它的字体为 8×16,有 160 列和 64 行:

    283 (0x11b) 0x0000001f G 1280x1024x32 D 8x16 0xa0000 64k 64k 0xf1000000 5120k
  3. 更改为该模式:

    $视频控制MODE_283
  4. 通过在引导程序中运行上述命令,使此大小调整持久化:

    # sysrc allscreens_flags=MODE_283

您的大小选择取决于您使用旧的 syscons 还是新的 vt 内核终端模拟器,以及它对支持模拟显示器的显示适配器的了解。

进一步阅读

相关内容