Linux串口终端系统命令行显示颜色并自动调节行列大小

问题介绍

我们在使用SSH协议通过终端模拟器(如MobaXterm、Windows Terminal等)连接Linux系统,访问系统命令行时,通常命令行是可以输出彩色文字的,并且命令行的行列数可以随着终端模拟器窗口大小的变化而自动变化

但如果我们是用串口线连接Linux设备,然后通过终端模拟器走串口协议访问Linux系统命令行呢?在这种情况下,通常命令行输出的文字都是黑白色,并且行列数量固定为24x80(使用其它组合都会产生显示错位)。

我们的终端模拟器明明有能力显示颜色,为何用串口连接时就只能显示黑白字符了呢?下面我们就来解决这个问题,让串口终端的命令行“重焕光彩”~

快速设置

想快速解决问题的童鞋看这里~

注意
并不是所有串口终端模拟器都支持彩色字符显示等高级功能。

  • Windows下建议使用MobaXterm作为终端模拟器。串口终端连接成功后,MobaXterm支持使用键盘/鼠标与Linux终端程序交互,如Vim等程序。但博主测试MobaXterm在输出大量不可打印字符时可能出现bug,比如会莫名其妙地在命令行附加一堆xterm-256color字符串。博主通过执行head /dev/urandom命令可以复现这个bug,不知道大家有没有遇到。
  • Linux下可以使用picocomminicom,直接用apt等包管理器即可安装。博主测试了picocom,没有上述bug。
  • 如果想在Windows下使用picocom,可以安装Cygwin,在其中编译picocom源代码。Windows下串口COM{x}对应着Cygwin串口设备/dev/ttyS{x-1}。但Windows系统下picocom似乎在某些串口设备的初始化时有问题,无法直接与机器建立串口连接(首次连接时报错)。我们需要先使用其它串口工具连接一次机器,连接成功后退出串口工具,再使用picocom,此时可以成功连接。

首先通过串口连接到目标Linux机器,使用tty命令检查当前使用的串口终端设备文件。观察输出,只要我们是通过当前串口连接到机器,输出的终端设备应当保持不变。以下是我使用树莓派的示例:

pi@raspberrypi:~ $ tty
/dev/ttyGS0

接着检查命令行是否支持resize命令。如果该命令不存在,请安装Xterm程序:

sudo apt install xterm

安装完毕后,我们的系统命令行应当多出一个resize命令。只要运行这个命令,命令行就会自动调整行列数,来适应当前终端的窗口大小。SSH连接可以通过SIGWINCH信号自动实现该功能,可惜串口连接不能,因此我们用resize命令来尽量弥补这一缺陷。

接着打开当前用户的~/.bashrc自动脚本,找到其中首次涉及到终端类型变量$TERM的位置:
在这里插入图片描述

在该行上方另外新起一行,插入如下Shell代码:

if [ "$(tty)" = "刚才查询到的设备文件" ]; then
    TERM=一个支持256色和其它先进操作的终端,如xterm-256color
    trap "resize &> /dev/null" DEBUG
fi

脚本逻辑
如果当前终端为指定的串口终端,那么:
     ~~~~     告诉系统,当前用户所使用的终端是一个支持256彩色等功能的高级终端(如MobaXterm),而不是什么古老的终端(如vt100)。
     ~~~~     每次在Shell命令行执行一句命令,就自动适应当前终端的窗口大小(如果你发现在某些场合下,此功能影响到Shell脚本运行效率,可以注释掉这一行,自己按需手动resize)。

示例如下:
在这里插入图片描述

保存修改,执行该自动脚本,使改动生效。之后每次通过串口终端登录你的用户时,上述脚本都会被自动执行

source ~/.bashrc

大功告成~
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统的控制台定向到串口终端可以通过以下步骤完成。 首先,确保计算机上已经连接了串口终端设备。通常情况下,计算机上会有一个或多个串口接口,可以用来连接串口终端设备,比如串口线或串口转USB线。 接下来,在Linux系统中,打开终端,并以管理员权限运行命令行终端。 然后,通过编辑引导加载程序(Bootloader)的配置文件来配置将控制台定向到串口终端。常见的引导加载程序包括Grub和U-Boot。具体的配置文件位置和名称可能会因不同的Linux发行版和引导加载程序而有所不同,可以查阅相关文档或参考Linux发行版的官方网站来获取具体信息。 在配置文件中,找到关于console(控制台)的设置项。一般来说,设置项的格式为console=ttyX,其中X是串口终端的设备号。如果系统上只有一个串口终端设备,通常是ttyS0;如果有多个串口终端设备,可能会是ttyS1、ttyS2等。将设置项修改为对应的串口设备号即可。 最后,保存修改并重启计算机。接下来,Linux系统的控制台输出就会被重定向到串口终端,可以通过连接的串口终端设备来查看和操作控制台。 需要注意的是,串口终端的波特率(Baud rate)设置需要与Linux系统的配置一致,通常默认为115200bps。如果波特率不一致,可能会导致乱码或无法正常通信。可以在引导加载程序的配置文件中找到设置波特率的项,并进行相应的修改。 总的来说,将Linux系统的控制台定向到串口终端可以通过编辑引导加载程序的配置文件,修改console设置项,并设置波特率来完成。这样可以方便地通过串口终端设备来查看和操作Linux系统的控制台输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值