科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何自动登录Linux及自动运行相应程序 (1)

如何自动登录Linux及自动运行相应程序 (1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:yunyang 来源:赛迪网技术社区 2007年10月18日

关键字: 操作系统 程序 Linux 登录

  • 评论
  • 分享微博
  • 分享邮件
 

本文以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。

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

  
  ... ... 
  438 while ((logname = get_logname ()) == 0); //mingetty.c文件438行 
  439 execl (_PATH_LOGIN, _PATH_LOGIN, "--", logname, NULL); 
  440 error ("%s: can't exec " _PATH_LOGIN ": %s", tty, sys_errlist[errno]); 
  ... ...
  

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

  ... ... 
  438 // while ((logname = get_logname ()) == 0); //注释掉本行,不再提示login: 
  439 logname = "root"; //添加本行代码 
  440 execl (_PATH_LOGIN, _PATH_LOGIN, "--", logname, NULL); 
  441 error ("%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要实现的功能,并对相应部分作必要的修改。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章