- 论坛徽章:
- 0
|
我有一台FC10 X64的系统,现在希望找到一种方法能让机器在启动后自动登录到图形桌面下后并运行一些程序和脚本变量。
根据论坛精华帖(redhat7自动登录)的提示已经可以自动登录了,但是用户配置没有加载。
到这一步就报错了- 、/usr/sbin/autologin可执行文件的实现:
- /*********************
- **** autologin.c ****
- *********************/
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- 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;
- }
- 运行gcc -o autologin autologin.c,拷贝autologin可执行文件到/usr/sbin/autologin,拷贝autologin配置文件到/etc/sysconfig/autologin。 重新启动系统,会直接进入X window并保留用户原来所有的风格。
复制代码 当我gcc的时候出现- [root@vpc sysconfig]# gcc -o autologin autologin.c
- autologin.c:4:10: #include expects "FILENAME" or <FILENAME>
- autologin.c:5:10: #include expects "FILENAME" or <FILENAME>
- autologin.c:6:10: #include expects "FILENAME" or <FILENAME>
- autologin.c:7:10: #include expects "FILENAME" or <FILENAME>
- autologin.c:8:10: #include expects "FILENAME" or <FILENAME>
- autologin.c:9:10: #include expects "FILENAME" or <FILENAME>
- autologin.c:10:10: #include expects "FILENAME" or <FILENAME>
- autologin.c: In function `main':
- autologin.c:14: error: storage size of 'st' isn't known
- autologin.c:15: error: `FILE' undeclared (first use in this function)
- autologin.c:15: error: (Each undeclared identifier is reported only once
- autologin.c:15: error: for each function it appears in.)
- autologin.c:15: error: `f' undeclared (first use in this function)
- autologin.c:18: error: `uid_t' undeclared (first use in this function)
- autologin.c:18: error: syntax error before "uid"
- autologin.c:19: error: `gid_t' undeclared (first use in this function)
- autologin.c:21: error: `NULL' undeclared (first use in this function)
- autologin.c:26: warning: assignment makes pointer from integer without a cast
- autologin.c:28: error: `uid' undeclared (first use in this function)
- autologin.c:28: error: dereferencing pointer to incomplete type
- autologin.c:29: error: `gid' undeclared (first use in this function)
- autologin.c:29: error: dereferencing pointer to incomplete type
- autologin.c:29: error: dereferencing pointer to incomplete type
- autologin.c:30: error: dereferencing pointer to incomplete type
- autologin.c:51: error: `errno' undeclared (first use in this function)
- [root@vpc sysconfig]#
复制代码 求教该如何解决?
如果不能加载用户配置也没关系,只要启动后能加载我需要的配置也可以.
(例如我之前将启动的命令添加到了 /etc/rc.local或者/etc/profile中,但是他没有生效) |
|