繁体   English   中英

使用串行端口linux上的交互式bash脚本替换登录提示

[英]Replace login prompt with interactive bash script on serial port linux

我正在使用CentOS盒子。

我的期望:在启动时运行我自己的CLI / setup,而不是在串行控制台(telnet)上运行登录提示。

到目前为止我做了什么: - 我在serial.conf中调用了“agetty”命令,在/ etc / init /下更改了serial-ttyUSB0.conf文件,如下所示: -

exec /sbin/agetty -n -l <path-to-my-custom-script> ........

我的custom.sh脚本是: -

#!/bin/bash

LOOP_FLAG=0
while [ $LOOP_FLAG -eq 0 ]; do
        for TTY in /dev/ttyS0 /dev/tty0; do
            echo "Please choose to enter in 'setup' or 'cli'. (s/c)?  " > $TTY
        done
        read sc
        case $sc in
            [Ss]* ) LOOP_FLAG=1; <some-executable-cli-file-path>; break;;
            [Cc]* ) LOOP_FLAG=1; <some-executable-setup-file-path>; break;;
            * ) for TTY in /dev/ttyS0 /dev/tty0; do
                    echo "Please press 's' or 'c'." >$TTY
                done;;
        esac
done

但是当系统启动时,在telnet会话中,我只能在屏幕上看到“请选择输入...”问题,之后我无法在控制台上输入任何内容。

还有一个更新:如果我在shell提示符上运行上面的agetty命令(例如从ssh session),那么它在串行控制台(telnet)上运行正常。 但是,从上面的启动脚本,它不起作用。

有人可以帮我解决这个问题吗?

提前致谢。

-Neo

对不起,我迟到了几年。 希望这对将来寻求解决此问题的人们有所帮助。

问题在于:

-n, - skip-login不提示用户输入登录名。 这可以与-l选项一起使用,以调用非标准登录进程,例如BBS系统。 请注意,使用-n选项时,agetty不会从登录用户获取任何输入,因此无法确定连接的奇偶校验,字符大小和换行处理。 它默认为空格奇偶校验,7位字符和ASCII CR(13)行尾字符。 请注意agetty启动的程序(通常是/ bin / login)以root身份运行。

因此,您需要在要替换登录提示的脚本中自己初始化终端。 我发现下面的设置效果很好:

/bin/stty -F /dev/ttyO0 115200 cs8 sane

请记住将波特率和终端名称替换为您自己的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM