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
  • 相关阅读:
    zookeeper
    消息中间件介绍
    Java实现动态代理的两种方式
    深入理解Java内存模型
    消息中间件(一)MQ详解及四大MQ比较
    synchronized关键字详解及分析锁升级过程
    JDK1.6的Synchronized底层优化(偏向锁、轻量级锁)
    分布式通信-tcp/ip socket
    技术点
    大众点评 cat
  • 原文地址:https://www.cnblogs.com/real-bert/p/14782293.html
Copyright © 2011-2022 走看看