reply:
系统启动过程中,kernel 最后会调用init,这个程序会读取 /etc/inittab文件进行设置。在/etc/inittab文件中有定义系统登陆:如下
1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6/sbin/minigetty (有的系统是getty )的内容是获取终端属性并正确进行设置。然后minigetty调用 login进行用户密码验证来登陆系统。当然login做的工作不仅仅是这些还有与用户相关的资源系统设置等等。所以你要想不进行用户密码验证工作可以替换
上面的/sbin/mingetty,也可以替换init,也可以替换login,也可以在核心中更改直接登陆而不需要进行这些繁琐的验证。但是为了保证系统终端的正常,推荐改动login比较好。具体的改动,你可以看看login
,mingetty的源代码就可以了。
ask again:
我已经通过修改/sbin/minigetty为/bin/ash实现了直接登陆系统,但当修改为/bin/bash时,使用很不正常,键盘输入老是打印不出来,不知原因何在?
login的源码在哪里?redhat7.3中自带吗?
reply:
使用不正常是因为你的系统没有进行终端设置.正常情况下这些设置是由
mingetty来设置的.你用 bash来取代mingetty,就没有作这个操作,所以终端显示就会出些莫名其妙的问题.
推荐改动mingetty 和login来实现.
你可以用如下命令来获取源码包的名称:
rpm -qf /bin/login
rpm -qf /sbin/mingetty
从源码盘上下载相应的源码包.
===========================================================================
使用beaglebone black板子试验过了,使用了一个脚本文件替换/bin/login文件。
inittab文件如下:
z6:6:respawn:/sbin/sulogin
S:2345:respawn:/sbin/getty 115200 ttyO0
替代/bin/login的文件为
#!/bin/sh
则运行如下:
输入用户名后没有反应,进不了系统。看来/sbin/getty会输出am335x-evm:
然后login启动登陆验证。
看来还得重新配置编译根文件系统或修改编译login程序来取消登陆验证了。