X 윈도우 자동 로그인하기

GDM 등과 같이 덩치가 큰 디스플레이 관리자를 사용하지 않고, 시스템 부팅후 자동으로 X 서버를 실행하고 특정 계정으로 로그인한뒤 자동으로 특정 프로그램을 실행하는 기능은 의외로 많이 사용합니다. 이 글에서는 여러가지 방법 중에 제가 알고 있는 몇가지 방법을 정리해 보았습니다. 적용 가능한 배포판은 데비안(Debian) 혹은 우분투(Ubuntu) 리눅스 기반입니다.

첫번째 방법 - init 데몬 이용하기

How to autologin X without a display manager ” 글에서 설명하는 방법입니다.

먼저 init 데몬이 자동으로 실행할 수 있도록 /etc/inittab 파일에 다음 항목을 추가합니다.

6:23:respawn:/sbin/getty -L -n -l /usr/local/sbin/autologin

위 항목은 시스템 시작시 자동으로 /usr/local/sbin/autologin 프로그램을 실행합니다. 또한 프로그램이 종료해도 다시 자동으로 재시작합니다. 이제 사용자 로그인 과정을 자동으로 수행하도록 하려면 /usr/local/sbin/autologin 프로그램을 다음과 같이 작성합니다.

#!/bin/sh
/bin/login -f root

여기서 -f 뒤에 로그인할 계정을 적어줍니다. 이제 계정 홈 디렉토리에 있는 셸 스크립트 시작 파일(~/.bash_profile)을 수정해서 마지막에 다음 항목을 넣어줍니다.

startx
logout

이 스크립트는 X 서버를 시작하고 종료시 자동으로 로그아웃을 합니다. 마지막으로 X 서버가 실행하면서 자동으로 수행될 스크립트를 만들어야 합니다. 계정 홈 디렉토리에 있는 X 서버 시작 파일(~/.xsession 또는 ~/.xinitrc)을 다음과 같이 작성합니다.

#!/bin/sh
my-window-manager &

# If the touch screen is not calibrated, run the calibration
while [ ! -f /etc/touchscreen-calibration ]
do
  calibrate-touchscreen
done

# Run the main application: if it ends, the session ends
main-application

제일 먼저 창 관리자(여기서는 ‘my-window-manager’)를 백그라운드로 실행합니다. 그리고 필요한 선행작업(여기서는 ‘calibrate-touchscreen’)을 처리한 뒤 실제 어플리케이션(main-application)을 실행합니다.

두번째 방법 - upstart 데몬 이용하기

우분투 리눅스는 init 데몬 대신 Upstart 데몬을 이용하여 시스템 초기화 작업을 처리합니다. 따라서 첫번째 방법에서 /etc/inittab 파일을 수정하는 대신 /etc/event.d/ 디렉토리에 시작 파일을 등록해야 합니다. 예를 들면 /etc/event.d/autostart 파일을 다음과 같이 작성합니다.

start on runlevel 2
start on runlevel 6
respawn
exec /sbin/getty -L -n -l /usr/local/sbin/autologin

위 내용은 런레벨 2,6 에서 해당 프로그램을 실행하고 종료시 자동으로 재시작하도록 합니다. 나머지는 첫번째 방법과 동일합니다.

세번째 방법 - 런레벨(run-level) 이용하기

init 데몬이든 Upstart 데몬이든 상관없이 동작하는 방법입니다. 먼저 다음과 같은 스크립트를 /etc/init.d/autologin 파일로 만들어 줍니다.

#!/bin/sh
/usr/local/sbin/my-startx &
exit 0

그리고 런레벨 2로 동작한다는 가정하에 스크립트가 자동 실행할 수 있도록 다음 명령을 실행합니다.

# chmod +x /etc/init.d/autologin
# update-rc.d autologin defaults 05

여기서 마지막 ‘05’는 런레벨에서 다른 데몬보다 먼저 실행하도록 결정해주는 우선순위입니다. 이제 /usr/local/sbin/my-startx 스크립트를 작성합니다.

#!/bin/sh
while true; do
  sleep 1
  echo "xinit /root/.xinitrc -- /etc/X11/xinit/xserverrc" 
  | su - root
done

이 스크립트는 루트(root) 계정으로 X를 시작하면서 /root/.xinitrc 파일을 시작 스크립트 파일로 지정합니다. 따라서, 이 방법은 위 두가지와 다르게 사용자 셸(bash)을 거치지 않고 직접 X 서버를 실행합니다. 그리고, 다른 방법과 마찬가지로 종료시 자동으로 X를 재시작합니다.  X 실행 이후 시작하는 스크립트는 다른 방법과 동일합니다.

comments powered by Disqus

Related