zoukankan      html  css  js  c++  java
  • 自定义串口终端登陆界面,客制化getty

    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
  • 相关阅读:
    大数据并发控制思考
    同步和异步的区别
    java枚举使用详解
    利用反射实现动态方法调用
    利用反射查看类的声明信息
    用两个栈实现对列
    c标签 if else c标签 总结
    struts2标签获取parameter,request,session,application中的值
    mysql日期加减
    详细介绍Java中的堆、栈和常量池
  • 原文地址:https://www.cnblogs.com/real-bert/p/14782293.html
Copyright © 2011-2022 走看看