如何设置grub 使linux启动后直接进入字符界面

如何设置grub 使linux启动后直接进入字符界面,第1张

分类: 电脑/网络 >> *** 作系统/系统故障

问题描述:

RedHat Linux 9.0 图形界面登陆,使用 ctrl + Alt + F1到F6 进入字符界面后键盘没有反应

然后键盘不能输入任何东西,数字键盘的"Num lock"也没有反应

只是显示

Red Hat Linux release 9 (Shrike)

Kernel 2.4.20-8 on an i686

Shrike login:

解析:

redhat linux9.0的配置

1.安装samba

首先验证您的机器中是否已经安装samba

rpm -qa|grep samba,如果出现

samba-mon-2.2.7a-7.9.0

samba-client-2.2.7a-7.9.0

samba-2.2.7a-7.9.0

那么恭喜你,你已经安装好了samba,如果没有以上那些东东,请安装,安装方法很简单,redhat

linux 9.0第一张光盘里就有cdrom/RedHat/RPMS/

以下是我的详细安装过程

把第一张光盘放进光驱,他会自动挂接的,省得自己动手mount了

#cd /mnt/cdrom/RedHat/RPMS(主意大小写字母,否则会出错的啊)

#rpm -ivh samba-mon-2.2.7a-7.9.0 (这个要先安装,安装的时候不一定要把后面的samba-mon-2.2.7a-7.9.0全部写完,比如写到samba-c的时候,多按几次Tab键,很省事的哦)

#rpm -ivh samba-2.2.7a-7.9.0

#rpm -ivh samba-client-2.2.7a-7.9.0(客户端)

安装了以上的东西之后,基本上就可以了,但为了配置的方便以及利用REDHAT LINUX9.0新特性,我建议在安装以下两个东东redhat-config-samba-1.0.4-1,samba-swat-2.2.7a-7.9.0光盘里都有,其中redhat-config-samba-1.0.4-1在第一张光盘里,samba-swat-2.2.7a-7.9.0在第二张光盘里,安装方法和上面的一样了.

通过上面的简单介绍,我想你已经安装好了,试验一下

#rpm -qa|grep samba(这是什么含义应该知道吧,如果不知道,建议先学学LINUX的基本命令)

redhat-config-samba-1.0.4-1

samba-mon-2.2.7a-7.9.0

samba-client-2.2.7a-7.9.0

samba-swat-2.2.7a-7.9.0

samba-2.2.7a-7.9.0

OK,安装成功!(建议,以上东西最好自己安装一次,系统上如果装的有,还是先卸载,这样,才能加深印象,如果卸载以后,安装出问题,可能是你没有完全卸载,解决方法要不继续查找卸载,要不强制安装)

2.配置

(1)方法1

利用我们安装的redhat-config-samba-1.0.4-1进行配置,方法如下:

开始--->系统设置--->服务器配置--->samba服务器

(我是在LINUX写这个文章,所以图形的东西我不会剪切,只好用简单的说一下了)

首选项-->服务器设置,这里你可以对samba服务器进行一些基本的设置里,应该说比较简单了,我看没有必要介绍了,配置好之后,记住重新启动服务.

重新启动的方法有两种:

#service *** b start或restart

#/etc/rc.d/init.d/ *** b start

(2)方法2

利用samba-swat-2.2.7a-7.9.0

首先,你要修改swat的配置文件,默认的情况下是关闭的

service swat

{

port = 901 (swat用到的端口是901)

socket_type = stream(类似tcp协议的东西,呵呵这是我自己的理解)

wait = no

only_from = 127.0.0.1(只从这个启动swat,关键!)

user = root(启动swat用到的名子)

server = /usr/ *** in/swat

log_on_failure += USERID

disable = yes (一定要把yes改成no)

}

修改过之后,启动xid就可以了

启动方法跟刚才我说的一样

然后在浏览器里些上127.0.0.1:901/重重的按回车,你发现你成功了 !(注意,这个IP地址要跟你在SWAT配置文件里的IP地址一样才形,切记!)

至于如何使用swat,自己摸索一下应该不成问题了,配置完成以后,记得重新启动服务就可以了.对了,为了使得samba和swat在每次开机的时候启动,你可以这样:

#setup,然后找到system service,在SMB和SWAT前搞个*,也可以#ntsysv,同样的效果.

(3)方法3

利用samba-2.2.7a-7.9.0,这是最根本的东西,不管用什么工具,掌握其原理才是最重要的,像网页制作一样,虽然工具很多,但一定要熟悉HTML语言,才能编的好的网页(扯蛋!呵呵)

装好samba-2.2.7a-7.9.0之后,会在/etc/samba/下形成己个文件

*** b.conf *** bpasswd *** busers lmhosts,如果没有其中的一个,你可以touch创建

修改 *** b.conf文件

我只做简单的说明:guest ok 和public是一样的,read only 和writable是相反的,没什么区别

workgroup=(工作组名子,填上你目前的LAN的工作组)

bios=(最好是你的机器名,如果把改句注消,默认的是你LINUX机器名,不过,最好还是自己填上)

client code page=936(默认是850,936是简体中文的意思,这个要记住,难道不记得你mount你windows系统下的中文名子都是???,就是因为你没有加-o iocharset=cp936的原因!)

guest account=nobody(guest帐号,这于你定义的共享文件颊有关,其中nobody在 *** busers里有)

security = SHARE(有四个级别,不多说)

encrypt passwords = Yes(加密的密码, win98/2000传送的密码都是加密的,所以这里要yes)

以上都是[global]的内容,其实,很多呢,水平有限不多说了.

下面就是你要开的共享的东西,要说明的是,文件夹共享的属性取决于该文件颊在LINUX里的权限设定

[myxfc]

ment = myxinfc

path = /home/xinfc

read only = No

guest ok = Yes

[tmp]

path = /home

valid users = hehl

write list = @staff

read only = No

guest ok = Yes

共享的设定其实很简单,主要是路径和权限的问题,这两个搞清楚了 ,应该没问题了

该介绍的我都介绍完了,重新启动服务!

或许您会发现客户端无法连接,奶奶的,真让人生气,忙了这么久,还是不能访问,why?

1)客户端应安装tcp/ip bios ipx(这个东东不太懂)

2lmhosts, IP地址和bios名子对应.

3)iptables(这个东西最坏,就是因为他,我浪费了两天时间!我得出一个小小的结论,做各种配置前把iptables给关闭!)

由于我对iptables不太懂,我的解决方式有两种:

1:#setup 然后选择防火墙,然后关闭

2.修改/etc/sysconfig/iptables

-A INPUT -j RH-Lokkit-0-50-INPUT

-A FORWARD -j RH-Lokkit-0-50-INPUT

-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT

-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j ACCEPT

-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT

COMMIT

把0:1023的两行的REJECT改成ACCEPT

重新启动防火墙就可以了

#service iptables start

本文以redhat 8.0 *** 作系统平台为背景,阐述如何实现启动级别为3时的自动登录,及自动运行相应程序,并简要介绍了如何在redhat 8.0下自动登录X window(系统启动级别为5),并自动运行指定的应用程序。

一、启动级别为3时自动登录的实现

启动级别为3时自动登录的实现涉及两个软件包:mingetty-1.00-3.src.rpm软件包及util-linux-2.11r-10.src.rpm软件包。

(1)mingetty-1.00-3.src.rpm软件包

对于启动级别为3的自动登录的实现,仍然需要考察/etc/inittab脚本,

3:123:respawn:/sbin/mingetty tty3

因此,如果想在启动级别3的情况下实现自动登录,必须要了解mingetty的功能,甚至要修改mingetty的代码。用命令rpm -qf /sbin/mingetty 可知redhat 8.0版本的mingetty包含在mingetty-1.00-3.src.rpm软件包中,下载该软件包,安装源代码,缺省情况下,代码会安装在/usr/src/redhat/下,我们关心的只是mingetty.c源文件。mingetty.c约有五百行代码,主要实现如下功能:

打开指定的tty(由参数指定);

提示用户登录(login:);

获得登录用户名;

把用户登录名作为参数,调用/bin/login。

我们所关心的部分实质上只有以下三行:

... ...

438while ((logname = get_logname ()) == 0) //mingetty.c文件438行

439execl (_PATH_LOGIN, _PATH_LOGIN, "--", logname, NULL)

440error ("%s: can't exec " _PATH_LOGIN ": %s", tty, sys_errlist[errno])

... ...

第一行的功能是输出login提示,并获得用户输入的登录用户名,登录用户名由logname返回。因此,可作如下修改

... ...

438// while ((logname = get_logname ()) == 0) //注释掉本行,不再提示login:

439logname = "root" //添加本行代码

440execl (_PATH_LOGIN, _PATH_LOGIN, "--", logname, NULL)

441error ("%s: can't exec " _PATH_LOGIN ": %s", tty, sys_errlist[errno])

... ...

注意,这里假定用户以超级用户身份登录。

第二行以用户登录名为参数,调用/bin/login程序,进一步实现登录。因此,要想实现自动登录,还应该了解/bin/login的功能,必要时还应修改其源代码。

第三行为出错处理。

(2)util-linux-2.11r-10.src.rpm软件包

采用同样的方法,查看/bin/login所属软件包(redhad8.0版本的login包含在util-linux-2.11r-10.src.rpm软件包中),下载并安装util-linux-2.11r-10.src.rpm,login可执行文件有几个源文件编译而成,我们最关心的是login.c源文件(大约1500行的代码)。下面简要分析一下login要实现的功能,并对相应部分作必要的修改。

Login程序主要可以分为以下几个主要部分:

1.Login首先检查登录者是否为超级用户,如果不是超级用户,并且存在/etc/nologin文件,则输出该文件内容,并中止登录过程;主要由checknologin()实现;

2.如果登录用户是超级用户,那么login必须在/etc/securetty/中指定的tty列表中实现登录,否则将导致登录失败。同样可以不指定/etc/securetty文件,此时,超级用户可以在任何tty上登录。

3.经过前两步测试后,login接下来将提示输入登录密码(由getpass()调用完成,有兴趣的读者可参考其手册页面),并进行验证,如果密码不对,则提示重新登录。

4.顺利经过密码验证后,login还将检查是否存在.hushlogin文件,如果该文件存在,则执行一次"quiet"登录(所谓的quiet登录指的是,登录时不再提示邮件mail,不再显示最后一次登录时间,不输出任何消息。启动级别为3时,正常情况下输出这些信息)

5.login接下来设置登录tty的用户ID和组ID,并设置相应的环境变量,包括HOME、PATH、SHELL、TERM、LOGNAME等。对于普通用户来说,PATH缺省被设置成/usr/local/bin: /bin/usr/bin:;对于超级用户来说,PATH被设置成/sbin: /bin: /usr/sbin: /usr/bin:

6.login的最后一步是为用户启动shell。如果在/etc/passwd中没有为用户指定shell,那么将使用/bin/sh,如果在/etc/passwd中没有给出当前工作目录,则使用"/"。

至此,一个完整的登录过程就结束了。

从以上对login源程序分析过程中可发现,如果要实现自动登录,应该在第三步做文章,设法绕过提示输入密码以及对密码进行验证这一过程。实际上很简单,login源程序对是否要求输入密码设置了一个开关控制passwd_req,缺省情况下,其值为1(passwd_req = 1),即要求输入密码进行身份验证。把该行代码改为(passwd_req = 0)后,问题就解决了。即对源文件作如下修改即可:

... ...

402fflag = hflag = pflag = 0 //login.c文件402行

403//passwd_req = 1 //缺省时,要求进行密码验证,注释掉本行

404passwd_req = 0//添加本行

... ...

修改后,可以直接使用util-linux-2.11r-10.src.rpm提供的Makefile进行重新编译,也可以自己对其编译:

gcc -o login login.c setproctitle.c checktty.c xstrncpy.c -Wall -lcrypt注意包含后面的编译选项-lcrypt,否则会出问题。

有了新版的mingetty及login后,拷贝mingetty到/sbin/目录,拷贝login到/bin目录,并将/etc/inittab中的启动级别设置为3,再重新引导系统即可(读者可以自己写一个脚本实现上述过程)。

如果读者对mingetty或login代码的其他部分感兴趣,可以反复修改login.c或mingetty.c的源代码,测试一下代码的功能,这里要注意的是,在拷贝新版mingetty和login之前,一定要把原来的mingetty和login备份,同时还要准备系统引导盘(有系统安装盘亦可,这样读者有机会键入linux rescue),在测试新版程序前更应如此,如果对代码修改稍有不当,系统将不能正常启动。

如果不想再作进一步的代码测试,只是按本文给出的方法进行代码修改,在系统启动上不会出现什么问题。

二、自动登录后,自动运行特定的应用程序

在实现了启动级别3时的自动登录后,自动运行应用程序非常简单,把应用程序添加在/etc/rc.d/rc.local脚本中既可。(读者可以尝试一下把startx加入脚本中,看一看效果如何。在某种意义上,又增加了一种自动登录X window的方法)

三、对自动登录X window(系统启动级别为5),并自动运行指定的应用程序的补充

在"如何实现自动登录linux"中,主要以redhat 7.2平台为背景进行阐述的,其中的自动登录部分可以直接用于redhat 8.0中,不需要任何修改。

但是,登录后自动运行应用程序的接口在redhat 8.0中有所不同,主要是登录gnome后,自动运行应用程序的接口有所改变:首先点击面板上的GNOME帮助(那个红色的小帽子),然后选择/其它/首选项/Sessions,在Session对话框的启动程序属性页中添加要启动的程序即可。

对于登录kde后,自动运行程序的接口没有改变。

四、结论

本文同"如何实现自动登录linux"一文,基本上解决了如何实现自动登录Linux,并自动运行相应应用程序的问题。对于两个最常见的启动级别(3、5),都给出了各自的方法。

在系统初始化到mingetty及login这一阶段,内核实际上已经完成了引导过程,已经到了系统初始化的最高阶段,与内核没什么关系了。此时,主要是/sbin/init根据/etc/inittab的内容而相机行事。读者可通过(man 8 init)或者(man 5 inittab)了解更多东西。

在对文中提到的软件包修改时,请遵守GNU General Public License(GPL)相关标准,另外,替换login通常被视为黑客行为,应当谨慎行事。

参考文献

1.login手册页面

2.mingetty-1.00-3.src.rpm,在redhat 8.0的发行版本的源代码中,包含该软件包;

3.util-linux-2.11r-10.src.rpm,

可在http://rpmfind.net/linux/RPM/redhat/8.0/i386/util-linux-2.11r-10.i386.html处下载,注意下载源代码包(..src.rpm)

关于作者

郑彦兴,男,现攻读国防科大计算机学院博士学位。您可以通过电子邮件 mlinux@163.com和他联系


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7499729.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存