蒂尔达抱怨启动时屏幕尺寸是假的?

蒂尔达抱怨启动时屏幕尺寸是假的?

在 Ubuntu 14.04 上,MATE 桌面。我刚刚安装了 Tilda 终端,因此我将其添加到启动应用程序中,就像/usr/bin/tilda.重新启动,看到 Tilda 启动,然后注意到这一点:

蒂尔达

“您的 131072x1 屏幕尺寸是假的。预计会有麻烦”

然后我尝试了killall tilda,再次启动 tilda,出现同样的消息。

有人知道如何解决这个虚假的屏幕尺寸问题吗?

答案1

是什么生成了此消息

这不是由 Bourne Again shell 生成的。这不是蒂尔达制作的。

这是由ps以下命令生成的procps 工具集表演这个检查它的set_screen_size()功能。该ps命令要求您的终端设备至少为 9 列 x 2 行,以便能够合理地显示内容。在某个地方,您可能不知道,您正在调用ps.

ps命令直接从附加到其标准 I/O 文件描述符的终端设备(的线路规则)获取终端大小,并且如果它们的值是正确的数字,则允许被环境变量COLUMNS覆盖。LINES您可以ps通过运行以下命令来查看命令所看到的内容,以便做出决定:

stty 大小; printenv 列 行
您可以通过运行以下命令来尝试拉动ps腿:

列=65535 行=1 ps

如果您已将COLUMNSLINES环境变量设置为愚蠢的 131072×1 值(如 的输出所示)printenv,那么就不要这样做。 ☺ 然而,终端设备本身更有可能报告此大小,您可以从 的输出中看到这一点stty。 (请注意,Bourne Again shell 所做的全部工作checkwinsize就是设置这些 shell 变量的值,如果不导出,这些变量甚至不会传递到ps其环境中的命令,无论终端设备报告大小如何。checkwinsize红色也是如此。鲱鱼,如果环境变量是无意义的,终端设备本身正在报告废话,后者才是要解决的根本问题。)

这就是为什么虽然它没有产生蒂尔达可能有错的消息。终端设备大小是一种共享资源,任何具有终端设备打开文件描述符的东西都可以通过ioctl()系统调用任意更改。但它是按照惯例设置,在使用软件的场景中终端仿真程序与 Tilda 一样,当显示仿真的 GUI 窗口的大小发生变化时,由终端仿真器程序执行。终端仿真器程序获取 GUI 调整大小事件,将其转换为列和行,并使用 来设置设备大小ioctl()

这并不是说其他​​东西没有为这种废话设定大小。毕竟可以设置你自己只需运行以下命令即可达到任意无意义大小:

stty 列 1 行 65535

这让我们想到……

如何重置终端设备大小

如果您发现终端设备报告的大小是无意义的:

  • 如果您使用的是 GUI 终端仿真器,请按列/行左右调整 GUI 的大小。这应该触发ioctl()并将终端大小设置为合理的值。
  • 将大小设置为更合理的值(例如):

    stty 列 80 行 25
  • 使用reset命令。请注意,reset除了终端设备大小之外,还设置了许多其他内容。
  • 如果您的终端仿真器与 DEC VT340/VT420 兼容,请直接发出适当的 DECSCPP amd DECSLPP/DECSNLS 控制序列,或使用诺什工具集console-resize(又名resizecons) 命令来发出它们:

    调整大小 80x25

相关内容