어떻게 Linux 운영 체제 의 자동 로그 인 을 실현 합 니까?

Linux 에 자동 으로 로그 인하 고 XWindow 응용 프로그램 을 자동 으로 실행 합 니 다.예 를 들 어 Linux 플랫폼 을 바탕 으로 하 는 모니터링 시스템,Linux 가 시 작 된 후에 인증 이 필요 없 이 모니터링 프로그램 을 직접 실행 하 는 등 특별한 응용 배경 이 있 습 니 다.본 고 는 Redhat 7.2 를 플랫폼 으로 하여 리 눅 스 시작 과정 과 결합 하여 인증 자동 로그 인 을 피하 고 X Window 에 직접 들 어가 프로그램 을 자동 으로 실행 하 는 방법 을 소개 한다.1.리 눅 스 가 시작 하 는 마지막 단계 의 작업 리 눅 스 는 시작 과정의 마지막 단계(구체 적 인 시작 절차 약)에서 init 는/etc/inittab 파일 의 마지막 줄 x:5:respawn:/etc/X11/prefdm-nodaemon 에 따라/etc/X11/prefdm 스 크 립 트 를 실행 합 니 다.(Redhat 7.2 가 부족 할 때 이 렇 습 니 다)prefdm 스 크 립 트 의 주요 임 무 는 X Window 의 시작 을 완성 하 는 것 입 니 다.X Window 를 시작 하 는 몇 가지 방법 이 있 습 니 다.모두 prefdm 스 크 립 트 에 포함 되 어 있 습 니 다.몇 가지 주요 방법 은 xdm 를 실행 하여 X Window 를 시작 하 는 것 입 니 다.gdm 를 실행 하고 gnome 데스크 톱 환경 에 들 어가 기;kdm 를 실행 하여 kde 데스크 톱 환경 에 들 어가 기;리 눅 스에 자동 로그 인 하기;prefdm 스 크 립 트 프레임 워 크 는 다음 과 같 습 니 다:\#!/bin/sh PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin./etc/profile.d/lang.sh\#첫 번 째 단계:자동 로그 인 if[-f/etc/sysconfig/autologin-a-x/usr/sbin/autologin]인지 확인 합 니 다.then   if /usr/sbin/autologin; then exit 0 fi\#두 번 째 단계:자동 로그 인 방식 이 아니라면/etc/sysconfig/desktop 에서 사용자 가 선 호 하 는 로그 인 방식 을 찾 습 니 다.2.자동 로그 인 실현(autologin 의 실현)은/etc/X11/prefdm 스 크 립 트 에서 자동 로그 인 을 실현 할 지 여 부 는 조건 부 테스트 스위치 가 있 습 니 다.사실은 여기 서 테스트 스위치 를 설명 하고 X Window 를 시작 하 는 작업 을 직접 수행 할 수 있 습 니 다.자동 로그 인 은 실질 적 으로 인증 을 피해 X Window 를 직접 시작 하 는 것 입 니 다.X Window 의 시작 은 xinit 에서 할 수 있 습 니 다.Xinit 는 X Window 시스템 서버 와 시스템 의 첫 번 째 클 라 이언 트 프로그램 을 시작 하 는 데 사 용 됩 니 다.xinit 에 명령 행 인 자 를 전달 하 는 형식 으로 시작 할 서버 와 클 라 이언 트 프로그램 을 지정 할 수 있 습 니 다.xinit 에 파 라 메 터 를 전달 하지 않 으 면 사용자 의 루트 디 렉 터 리 에서.xinitrc 스 크 립 트 를 찾 아 실행 하여 클 라 이언 트 프로그램 을 시작 합 니 다.사용자 의 루트 디 렉 터 리 에서.xserverrc 스 크 립 트 를 찾 아 실행 하여 서버 를 시작 합 니 다.만약 xinit 가 사용자 의 루트 디 렉 터 리 에서.xinitrc,.xserverrc 를 찾 지 못 한다 면,xinit 는 결 성 된 X:0 을 사용 할 것 입 니 다.실제로 startx 로 X 를 시작 하 는 것 이 편리 하 다.단일 세 션 을 실행 하 는 XWindow 시스템 에 대해 startx 는 더욱 좋 은 사용자 인 터 페 이 스 를 제공 합 니 다.마찬가지 로 startx 는 먼저 사용자 의 루트 디 렉 터 리 에서.xinitrc 및.xserverrc 스 크 립 트 를 찾 습 니 다.이 두 스 크 립 트 를 찾 지 못 하면 startx 는/etc/X11/xinit/xinitrc 및/etc/X11/xinit/xserverrc 스 크 립 트 를 사용 합 니 다.startx 스 크 립 트 의 가장 기본 적 인 프레임 워 크 는 a.xinitrc 를 찾 고 없 으 면 xinitrc 를 사용 합 니 다.b.xserverrc 를 찾 습 니 다.없 으 면 xserverrc 를 사용 합 니 다.c.찾 은 스 크 립 트 에 따라 xinit 의 인 자 를 확인 합 니 다.이 를 통 해 알 수 있 듯 이 startx 는 어떠한 매개 변 수 를 전달 하지 않 아 도 X 를 시작 하 는 작업 을 수행 할 수 있 습 니 다.따라서 다음 과 같이/etc/X11/prefdm 스 크 립 트 를 수정 하여 자동 로그 인 을 실현 할 수 있 습 니 다.\#!/bin/sh PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin./etc/profile.d/lang.sh\#첫 번 째 단계:자동 로그 인 여부 확인\#if[-f/etc/sysconfig/autologin-a-x/usr/sbin/autologin];then\#위의 조건 테스트 를 설명 하고 startx if/usr/X11R 6/bin/startx 를 직접 실행 합 니 다.then exit 0 fi\#fi 물론/etc/inittab 의 시작 단 계 를 5 로 확보 해 야 합 니 다.시스템 을 다시 시작 하면 시스템 이 사용자 신분 을 검증 하지 않 고 XWindow 에 직접 들 어 가 는 것 을 발견 할 수 있 습 니 다.이때 사용자 신분 은 루트 입 니 다.그러나 원래 루트 가 자신의 데스크 톱,기본 셸 이 있 을 때 상기 방법 으로 X 를 시작 하 는 것 이 원래 의 설정 을 가 질 수 있다 고 보장 하 는 것 은 아 닙 니 다.X 를 시작 한 후 인증 을 피 하 는 동시에 사용자 의 원래 설정 을 바 꾸 지 않 기 위해 서 는 startx 를 실행 하기 전에 해 야 할 일이 있 습 니 다.3.자동 로그 인 후 사용자 의 원래 설정(데스크 톱,셸 및 기타 환경 변수)을 유지 하고 원래/etc/X11/prefdm 스 크 립 트 의 자동 로그 인 부분 을 관찰 합 니 다...\#첫 번 째 단계:자동 로그 인 if[-f/etc/sysconfig/autologin-a-x/usr/sbin/autologin]인지 확인 합 니 다.then     if /usr/sbin/autologin; then exit 0 fi fi.........................................................................................1./etc/sysconfig/autologin 설정 파일 의 실현:\#config for autologin USER=root EXEC=/usr/X11R6/bin/startx 설명,USER 는 자동 로그 인 할 때 사용자 이름 을 지정 합 니 다.EXEC 는 X 를 시작 할 프로그램 을 지정 합 니 다.2./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"; /*문 제 를 설명 하고 프로그램 을 간결 하 게 유지 하기 위해 서 는 기본 로그 인 사용 자 를 루트 로 합 니 다.실제로 로그 인 사용자 이름 은/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!",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:exec%s:%s",cmd,strerror(errno))를 주의 하 십시오.  return 2; }gcc-o autologin autologin.c 를 실행 합 니 다.autologin 을 복사 하면 파일 을/usr/sbin/autologin 으로 실행 할 수 있 습 니 다.autologin 설정 파일 을/etc/sysconfig/autologin 으로 복사 합 니 다.시스템 을 다시 시작 하면 X Window 에 직접 들 어가 사용자 의 원래 스타일 을 유지 합 니 다.자동 로그 인 프로필/etc/sysconfig/autologin 이 필요 하지 않 으 면 모든 작업 이/usr/sbin/autologin 에서 기본 으로 이 루어 집 니 다(예 를 들 어 기본 로그 인 신분 은 루트 이 고 기본 실행 동작 은/usr/X11R6/bin/startx 등).그러면../etc/X11/prefdm 스 크 립 트 의 자동 로그 인 부분 은 다음 과 같이 간소화 할 수 있 습 니 다...\#첫 번 째 단계:자동 로그 인 if/usr/sbin/autologin 인지 확인 합 니 다.then exit 0 fi//두 번 째 단 계 는............................................................................4.kde 나 gnome 에 들 어 가 는 것 을 선택 하고 X Window 프로그램 을 자동 으로 시작 합 니 다.다시 시작 하면 시스템 이 kde 에 들 어 갑 니 다.사용 자 는 gnome 에 들 어가 야 합 니 다.switchdesk gnome 을 실행 하면 시스템 을 다시 시작 하면 됩 니 다.나중에 시작 할 때마다 gnome 에 자동 으로 들 어 갑 니 다.반대로 도 마찬가지다.일반 시스템 이 자동 으로 로그 인 하 는 목적 은 X Window 를 시작 한 후 XWindow 프로그램 을 자동 으로 실행 하 는 것 이다.시스템 의 기본 시작 단계 가 3 이면 시스템 이 시 작 된 후에 일부 프로그램 을 자동 으로 실행 하려 면 일부 스 크 립 트 에 해당 하 는 명령 만 추가 하면 됩 니 다.자세 한 설명 은 하지 않 습 니 다.XWindow 가 시 작 된 후에 프로그램 을 자동 으로 실행 하 는 것 은 복잡 합 니 다.다행히 kde 와 gnome 은 이 를 위해 자동 시작 인 터 페 이 스 를 남 겼 습 니 다.kde 데스크 톱 환경 에서 프로그램 을 자동 으로 시작 하려 면 프로그램 이름 을/root/.kde/autostart/디 렉 터 리 에 추가 하면 됩 니 다.gnome 데스크 톱 환경 에서 프로그램 을 자동 으로 시작 하면 프로그램의 이름 을/메 인 메뉴/프로그램/설정/세 션/세 션 특성 및 시작 프로그램의 startup programs 속성 페이지 에 추가 하면 됩 니 다.

좋은 웹페이지 즐겨찾기