linux在系统初始化完成后总是会提供一个登陆界面。
这个界面是由getty或者agetty程序产生的,输入用户名后会调用login程序进行密码验证。
现在在嵌入式arm产品的开发中遇到这样一个需求:在串口终端不登陆的情况下显示一些自定义信息,例如IP地址。
解决方案如下:
1.如果只是显示一些简单的静态信息,修改/etc/issue文件即可。
2.复杂情况,需要动态生成内容或者需要与用户交互。可以考虑用自己的程序代替getty。
我这里讲第二种情况。
1. 找到调用getty/agetty程序的位置
systemd系统中可能在/lib/systemd/system/serial-getty@.service。
下图是将agetty换成了我自己的脚本mygetty。
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