自定义串口终端登陆界面,客制化getty

linux在系统初始化完成后总是会提供一个登陆界面。

这个界面是由getty或者agetty程序产生的,输入用户名后会调用login程序进行密码验证。

现在在嵌入式arm产品的开发中遇到这样一个需求:在串口终端不登陆的情况下显示一些自定义信息,例如IP地址。

解决方案如下:

1.如果只是显示一些简单的静态信息,修改/etc/issue文件即可。

2.复杂情况,需要动态生成内容或者需要与用户交互。可以考虑用自己的程序代替getty。

我这里讲第二种情况。

1. 找到调用getty/agetty程序的位置

systemd系统中可能在/lib/systemd/system/serial-getty@.service。

下图是将agetty换成了我自己的脚本mygetty。

自定义串口终端登陆界面,客制化getty

 

 

2. 自己的程序中重定向输入输出到终端

我自己的登陆程序中简单的输出欢迎语句,如果用户输入1,则切换到默认的getty,否则重复显示欢迎语句。

最关键的点就是输入输出重定向。

脚本中$1=%I,其实就是终端名,例如ttymxc1。

shell脚本实现如下:

#!/bin/sh

tty=$1

while true
do
        echo 'Welcome!' > /dev/$tty
        echo *Enter 1 to switch to the login terminal > /dev/$tty
        read value </dev/$tty
        if [ "$value" = '1' ];then
                exec /sbin/agetty -8 -L $tty 115200 xterm
        fi
done

 

上一篇:计算C#中的百分比


下一篇:ubuntu 16.04 用户输入密码后循环重复登陆导致进不去桌面的方法以及tty的U盘挂载实现数据拷贝(英伟达显卡)