Linux下Xwindows自动登录的实现方法

发布时间:2021-01-17编辑:脚本学堂
Linux下Xwindows自动登录的实现方法,在/etc/X11/prefdm脚本中已预留了接口。

linux下Xwindows自动登录的实现方法

前言:
在/etc/X11/prefdm脚本中已预留了接口
 

复制代码 代码如下:
if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
        if /usr/sbin/autologin; then
                exit 0
        fi
fi

需要编写/etc/sysconfig/autologin 和 /usr/sbin/autologin两个文件
步骤:
1.编写autologin.c。
 

复制代码 代码如下:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pwd.h>

int main(int argc, char **argv)
{
struct stat st;
FILE *f;
char *cfg;
struct passwd *pw;
uid_t uid;
gid_t gid;
char *dir, *shell;
char *user=NULL;
char *cmd=NULL;

user="root";

cmd="/usr/X11R6/bin/startx";

pw = getpwnam(user);
//getpwnam返回包含用户信息的passwd结构(该结构在pwd.h中定义)。
if(pw) {
uid=pw->pw_uid;
gid=pw->pw_gid; dir=strdup(pw->pw_dir);
shell=strdup(pw->pw_shell);
}
//获得用户相关信息
else {
printf("ERROR: No such user %s!n", user);
return 1;
}

chown("/dev/console", uid, gid);
chown("/dev/tty", uid, gid);
//为控制台和终端设置用户ID及组ID

//下面是设置用户相关ID
setregid(gid, gid);
setegid(gid);
setgid(gid);
setreuid(uid, uid);
seteuid(uid);
setuid(uid);

setenv("HOME", dir, 1);
setenv("SHELL", shell, 1);
setenv("USER", user, 1);
setenv("LOGNAME", user, 1);
//设置用户相关环境变量

chdir(dir);
//切换到用户根目录
user=NULL;

execvp(cmd, argv);

printf("ERROR: Couldn't exec %s: %sn", cmd, strerror(errno));
return 2;
}

2.编译、拷贝。
 

复制代码 代码如下:
gcc -o autologin autologin.c
cp autologin /usr/sbin/

3./etc/sysconfig/autologin配置文件的实现。
 

复制代码 代码如下:
#config for autologin
USER=root
EXEC=/usr/X11R6/bin/startx

4.reboot即可。(/etc/inittab中的启动为5:即X11)