[英]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.