⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autologin.c

📁 Linux下定制自动登陆
💻 C
字号:
/*********************
****  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";
/*为了能说明问题又保持程序简洁,这里默认登录用户为root,实际上,
登陆用户名应该从/etc/sysconfig/autologin中得到,
程序实现时要注意过滤掉/etc/sysconfig/autologin中的无效用户名*/
	cmd="/usr/X11R6/bin/startx";
/*同样,这里直接指定启动X window的程序,实际上,该程序应该从/etc/sysconfig/autologin中得到*/
	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);
/*在配置完用户的相关信息后,执行启动X window操作。注意这里默认执行/usr/X11R6/bin/startx */
	printf("ERROR: Couldn't exec %s: %s\n", cmd, strerror(errno));
	return 2;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -