자동로그인 다시보기
이 글은 한글번역판입니다. 원문은 여기에서 볼 수 있습니다. 점점 많은 사람들이 자신의 PC에서 GNU/Linux를 사용하기때문에 사용자가 한명인 경우가 늘고 있다. 그 경우 여러 사람이 로그인하는 기능을 거의 사용하지 않는다. 그래서 많은 데스크탑 사용자들은 리눅스가 ID나 암호를 물어보지않고 자동으로 (KDE나 GNOME과 같은) 그래픽 데스크탑 환경으로 부팅되게 설정하길 원한다.
이런 질문은 흔하지만, 이에 대한 HOWTO가 없는 것이 놀랍다. (어쨌든 나는 찾지 못했다.) 이 글은 이 역할을 만족시키는데 완전하지는 않지만 사용자에게 옳은 방향을 제시할 것이다.
Prepackaged solutions
자동로그인의 해결책은 이미 제안되었고, 그중 한 방법은 Linux Gazette에서 전에 (http://www.linuxgazette.com/issue27/kodis.html) 소개되었다. 이 방법은 부팅시 init가 실행하는 /sbin/mingetty 프로그램을 패치해야 한다. (패치와 적용 방법은 http://users.jagunet.com/~kodis/autologin/autologin.html을 참고하라.) 그러나 가상콘솔에서 자동로그인은 해결되지만 자동으로 그래픽 데스크탑을 실행하지는 않는다. 이 방법을 아래서 설명한다.
아니면 autologin 패키지를 (http://www.linux-easy.com/development/autologin/) 설치할 수도 있다. 이는 부팅시 그래픽 데스크탑을 실행한다. 모든 GNU/Linux 배포본에 기본으로 포함되있지는 않는다.
최근 버전의 kdm은 (KDE 스타일의 xdm -- X11 로그인 매니저) 자동로그인을 지원한다. /etc/kde2/kdmrc에서 다음 줄들의 주석을 제거한다.
AutoLoginEnable=true AutoLoginUser=fred
그러면 kdm는 시작시 자동으로 fred로 로그인하여 fred의 그래픽 데스크탑 환경을 자동으로 실행한다. Mandrake는 이런 kdm 기능을 활성화시키는 GUI를 제공해서 파일을 직접 편집할 필요는 없다.
그러나 kdm 설치를 원하지 않는 사람이 있을 것이다. (아마도 디스크 공간이 부족하거나, 오래된 PC에서 kdm은 매우 버거운 프로그램이다.) 다행히도 패치나 다운로드없이 부팅후 가상콘솔중 하나로 자동로그인하는 방법이 있다. 이 과정은 다소 복잡할 수 있지만, GNOME, KDE, QT의 무거운 kdm 없이 최소한의 GNU/Linux에서도 잘 동작한다. 게다가 X가 없다면 부팅시 명령행 프롬프트(혹은 대화적인 콘솔 프로그램)로 자동로그인은 매우 쉽다.
방법
편집기로 autologinfred.c 파일을 만들고 내용으로 아래 짧은 C 프로그램을 입력한다.
int main() { execlp( "login", "login", "-f", "fred", 0); } execlp 시스템콜은 현재 프로그램을 "login -f fred" 명령어로 대체한다. login manpage는 -f 옵션을 설명한다. 이 C 프로그램을 GNU C 컴파일러로 컴파일한다.
$ gcc -o autologinfred autologinfred.c
(su를 사용하여) root 권한으로 실행파일을 복사한다.
# cp autologinfred /usr/local/sbin/
이제 /etc/inittab을 살펴보자. 이 파일은 리눅스가 초기화할때 가장 먼저 시작하는 프로세스인 init의 설정파일이다. 다음과 비슷한 줄이 보일 것이다.
1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3
/etc/inittab의 정확한 내용은 배포본마다 차이가 난다. Debian에서는 다음과 같다.
1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3
"1:2345"로 시작하는 줄을 다음과 같이 수정한다.
1:2345:respawn:/sbin/getty -n -l /usr/local/sbin/autologinfred 38400 tty1
그러면 첫 가상콘솔에서 fred가 자동으로 로그인된다. (RedHat과 같은) 어떤 GNU/Linux 배포본에서는 대신 /sbin/agetty를 사용해야 한다. getty의 -l <alternative login> 옵션은 기본 /sbin/login 프로그램 대신 전에 컴파일한 프로그램을 사용하게 한다. -n 옵션은 getty가 사용자 ID를 물어보지않게 한다.
로그인시 데스크탑 실행하기
리부팅하면 init 프로세스는 자동으로 첫번째 가상콘솔에 fred로 로그인하여 쉘을 실행한다. 사용자 fred는 그래픽 데스크탑을 실행하는 startx 명령어를 실행해야 한다. 이것도 자동화시킬 수 없을까?
fred의 로그인쉘이 /bin/bash라면, ~fred/.bash_profile 파일에 있는 명령어가 처음으로 실행된다. 우리는 startx 명령어를 이 파일에 추가할 수 있지만, .bash_profile이 두번째 가상콘솔에 로그인하거나 xterm을 여는 등 다른 상황에서도 실행되므로 문제가 생긴다. 대신 다음과 같이 한다.
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then startx fi
첫번째 가상콘솔에서 시작한 로그인쉘은 자동으로 그래픽 데스크탑을 시작할 것이다. 주위의 if문은 첫번째 이외의 가상콘솔이나 데스크탑에서 로그인쉘이 실행된다면 새로운 GUI 데스크탑을 실행하지 않게 한다. /bin/sh 사용자는 위의 내용을 ~fred/.profile에 추가하고, tcsh 사용자는 위의 내용을 같은 의미의 csh 스크립트로 변경해야 한다.
(xdm, gdm, kdm 등을 통해) 이미 GUI 데스크탑이 실행되고 있다면 대신 startx -- :1을 실행한다. 그러면 두번째 GUI 데스크탑이 생긴다. 오직 한 데스크탑만 실행되게 하려면 (RedHat에서) run level을 낮추거나 (Debian에서) /etc/rc?.d/S99?dm 시작 설정파일을 지워서 기존의 Xserver 프로그램을 비활성화한다.
응용
이제 부팅때마다 암호를 물어보지않고 자동으로 fred가 첫번째 가상콘솔로 로그인되고 bash 로그인쉘이 시작하여 (~/.bash_profile을 읽고) startx가 실행된다. 좋지않나?
우리는 여기서 더나가 특정 데스크탑 프로그램을 실행시키기위해 ~/.xinitrc를 사용할 수 있다. (자세한 내용은 man startx) 좋아하는 게임을 추가해두면 리눅스를 반짝반짝 화려하지는 않지만 오락실 기계처럼 사용할 수 있다. Ogg Vorbis 재생기의 시각(visualisation) 기능을 사용하여 음악 머쉰으로 사용할 수도 있다.
자동로그인은 비그래픽 환경에서도 유용하다. 어떤 사람은 /usr/bin/top을 로그인쉘로 사용하는 특별한 사용자로 로그인하게 하기도 한다. 그러면 한 가상콘솔은 대화적인 프로세스 목록을 전담한다. 가능성은 무한하다.
결론
여러 사용자 운영체제인 GNU/Linux는 점점더 사용자가 한명인 환경에서 사용되고 있다. 이 경우 사용자 로그인 과정이 필요없을 수가 있다. 이 글은 UNIX 혈통때문에 리눅스를 이런 특별한 영역에서 사용할 수 없지 않다는 것을 보여준다. 간단한 설정 변화와 작은 프로그램으로 대부분의 GNU/Linux 배포본에서 자동로그인이 가능하며, 많은 활용 방법들이 있다.
Adrian J Chung
(케리비안해의) 트리니다드토바고의 West Indies 대학에서 학부생을 가르키지 않을 때면 Andrian은 웹메일 다운로드를 자동화하는 스크립트를 작성하고 직접 만든 그래픽 렌더러와 자료 시각화 라이브러리를 사용하여 다양한 스크립트 환경을 경험한다.
원문 : http://www.coffeenix.net/doc/lg/issue72/chung.html