Yuhang Zheng

可调整大小的串行控制台窗口

N 人看过

在使用串口登录Linux嵌入式板卡时,只需要设置好相应的比特率和串口号,然后再打开调试串口并登录,就像使用 telnet 或 ssh 一样方便。

但是我们发现有一种情况,当你一旦使用像是vim的编辑器的时候 ,无论其实际大小,它都假定你的终端窗口只有 24 行高。

image-20211103094604863

即使在退出编辑器后,不知何故窗口都将被改变,它的窗口都会冻结在24行,底下的串口部分留空,这种情况下当输入长命令的时候它就会出现错位,无法看到命令的全部内容,很是难受

image-20211103094337626

后来通过网上找资料,发现这个和stty设置的行和列的大小有关,我们可以通过stty size命令来查看当前窗口的行和列的大小

forlinx@ubuntu:~$ stty size
24 80

当然我们也可以手动设置将行和列的值改大一点

forlinx@ubuntu:~$ stty rows 58 cols 237
forlinx@ubuntu:~$ stty size
58 237

设置完成之后,我们再使用vim命令去编辑文件的时候就可以看到效果了。

这个最终的问题是,在使用串口登录系统的时候,屏幕没有像 ssh、rsh 或 telnet 等远程登录程序那样传递终端大小信息的协议。那么,如何在登录时自动去设置终端大小呢?

我在网上找到了两个方法:

第一个是一个bash的脚本,可以命令为resize,这个只在运行的时候起作用,可以调整窗口的大小

old=$(stty -g)
stty -echo
printf '\033[18t'
IFS=';' read -d t _ rows cols _
stty "$old"
stty cols "$cols" rows "$rows"

第二个是一个命令,这个可以在每次运行命令的时候都进行窗口的大小的调整,不过有一个小问题就是会影响命令执行的速度

trap 'resize > /dev/null' DEBUG

亲测这两个都可以使用,可以把这些语句加到.profile里面。

以下是参考链接:

https://qastack.cn/unix/16578/resizable-serial-console-window

https://shallowsky.com/blog/tags/embedded/