System Admin

본문 바로가기
사이트 내 전체검색


RedHat Linux >> System Administration for Redhat Linux
[목차]
제5장 X 윈도우 시스템

    4. X 윈도우 구동 원리

x 윈도우를 구동하기 위해서 startx라는 명령어를 사용했을 것입니다. 그런데 startx는 바이너리로 된 실행 파일이 아니라 셸 스크립트일 뿐입니다. 이전에 셸 스크립트에 대한 기본기를 익혔다면 이 파일의 내용을 분석하는 것 자체는 어렵지 않을 것입니다. 셸 스크립트에 대한 내용은 administration of the linux system에서 다시 다룹니다. 그러면 먼저 이 셸 스크립트의 내용을 보도록 합시다. 이 파일은 /usr/x11r6/bin/에 있습니다.

#!/bin/sh

#

# (c) 1999 Red Hat Software, Inc.

bindir=/usr/X11R6/bin

userclientrc=$HOME/.xinitrc

userserverrc=$HOME/.xserverrc

sysclientrc=/etc/X11/xinit/xinitrc

sysserverrc=/etc/X11/xinit/xserverrc

clientargs=""

serverargs=""

if [ -f $userclientrc ]; then

clientargs=$userclientrc

else if [ -f $sysclientrc ]; then

clientargs=$sysclientrc

fi

fi

if [ -f $userserverrc ]; then

serverargs=$userserverrc

else if [ -f $sysserverrc ]; then

serverargs=$sysserverrc

fi

fi

display=:0

whoseargs="client"

while [ "x$1" != "x" ]; do

case "$1" in

/''*|\.*) if [ "$whoseargs" = "client" ]; then

if [ "x$clientargs" = x ]; then

clientargs="$1"

else

clientargs="$clientargs $1"

fi

else

if [ "x$serverargs" = x ]; then

serverargs="$1"

else

serverargs="$serverargs $1"

fi

fi ;;

--) whoseargs="server" ;;

*) if [ "$whoseargs" = "client" ]; then

clientargs="$clientargs $1"

else

case "$1" in

:[0-9]) display="$1"

;;

*) serverargs="$serverargs $1"

;;

esac

fi ;;

esac

shift

done

# set up default Xauth info for this machine

mcookie=`mcookie`

serverargs="$serverargs -auth $HOME/.Xauthority"

xauth add $display . $mcookie

xauth add `hostname -f`$display . $mcookie

xinit $clientargs -- $display $serverargs

# various machines need special cleaning up,

# which should be done here

결과적으로 startx 스크립트 파일은 xinit라는 명령을 호출한다는 것을 알 수 있을 것입니다. 또한 X 윈도우가 구동될 때 어떤 파일을 참조하는지도 알 수 있습니다.

전체적으로 클라이언트 리소스, 서버 리소스를 찾게 되는데 찾는 순위를 보면 사용자 홈디렉토리에서 먼저 찾는다는 것을 알 수 있습니다.

여기에 정의되어 있는 파일이 실제로 존재하는지 확인하기 바랍니다. 아마 없을 것입니다. 그러면 앞의 스크립트 파일에서 나와 있듯이 일반적인 xinitrc 파일을 참조합니다. 그러면 이 파일을 봅시다.

다음은 xinitrc 파일입니다.

#!/bin/sh

# (c) 1999 Red Hat Software, Inc.

# if LANG is not set, set default to LANG ko

if [ -z "$LANG" ]; then

export LANG=ko

fi

userresources=$HOME/.Xresources

usermodmap=$HOME/.Xmodmap

userxkbmap=$HOME/.Xkbmap

sysresources=/etc/X11/xinit/Xresources

sysmodmap=/etc/X11/xinit/Xmodmap

sysxkbmap=/etc/X11/xinit/Xkbmap

# backward compatibility

oldsysresources=/usr/X11R6/lib/X11/xinit/.Xresources

oldsysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap

# merge in defaults

if [ -f $oldsysresources ]; then

xrdb -merge $oldsysresources

fi

if [ -f $sysresources ]; then

xrdb -merge $sysresources

fi

if [ -f $userresources ]; then

xrdb -merge $userresources

fi

# merge in keymaps

if [ -f $sysxkbmap ]; then

setxkbmap `cat $sysxkbmap`

XKB_IN_USE=yes

fi

if [ -f $userxkbmap ]; then

setxkbmap `cat $userxkbmap`

XKB_IN_USE=yes

fi

# xkb and xmodmap don't play nice together

if [ -z $XKB_IN_USE ]; then

if [ -f $oldsysmodmap ]; then

xmodmap $oldsysmodmap

fi

if [ -f $sysmodmap ]; then

xmodmap $sysmodmap

fi

if [ -f $usermodmap ]; then

xmodmap $usermodmap

fi

fi

unset XKB_IN_USE

if [ -f $usermodmap ]; then

xmodmap $usermodmap

fi

if [ -z "$BROWSER" ] ; then

# we need to find a browser on this system

BROWSER=`which netscape`

if [ -z "$BROWSER" ] || [ ! -e "$BROWSER" ] ; then

# not found yet

BROWSER=

fi

fi

if [ -z "$BROWSER" ] ; then

# we need to find a browser on this system

BROWSER=`which lynx`

if [ -z "$BROWSER" ] || [ ! -e "$BROWSER" ] ; then

# not found yet

BROWSER=

else

BROWSER="hanterm -e lynx"

fi

fi

export BROWSER

# The user may have their own clients they want to run. If they don't,

# fall back to system defaults.

if [ -f $HOME/.Xclients ]; then

exec $HOME/.Xclients

elif [ -f /etc/X11/xinit/Xclients ]; then

exec /etc/X11/xinit/Xclients

else

# failsafe settings. Although we should never get here

# (we provide fallbacks in Xclients as well) it can't hurt.

xclock -geometry 100x100-5+5 &

xterm -geometry 80x50-50+150 &

if [ -f /usr/bin/netscape -a -f /usr/doc/HTML/index.html ]; then

netscape /usr/doc/HTML/index.html &

fi

if [ -f /usr/X11R6/bin/fvwm ]; then

exec fvwm

else

exec twm

fi

fi

처음 부분에 보면 LANG 변수를 ko로 설정한다는 것을 알 수 있습니다. 이것에 대한 내용은 다음에 설명하겠습니다. 그리고 각종 리소스를 로드하고 여기서 가장 중요한 Xclients 셸 스크립트를 실행한다는 것입니다. 물론 사용자 홈디렉토리 .Xclients 파일이 존재하지 않을 때입니다.

다음은 Xclients 파일입니다.

#!/bin/bash

# (c) 1999 Red Hat Software, Inc.

# check to see if the user has a preferred desktop

PREFERRED=

if [ -f /etc/sysconfig/desktop ]; then

if [ -n "`grep -i GNOME /etc/sysconfig/desktop`" ]; then

PREFERRED=gnome-session

elif [ -n "`grep -i KDE /etc/sysconfig/desktop`" ]; then

PREFERRED=startkde

elif [ -n "`grep -i AnotherLevel /etc/sysconfig/desktop`" ]; then

PREFERRED=AnotherLevel

fi

fi

if [ -n "$PREFERRED" -a "$PREFERRED" != "AnotherLevel" ] && \

which $PREFERRED >/dev/null 2>&1; then

PREFERRED=`which $PREFERRED`

exec $PREFERRED

fi

# now if we can reach here, either they want AnotherLevel or there was

# no desktop file present and the PREFERRED variable is not set.

if [ -z "$PREFERRED" ]; then

GSESSION=gnome-session

STARTKDE=startkde

# by default, we run GNOME.

if which $GSESSION >/dev/null 2>&1; then

exec `which $GSESSION`

fi

# if GNOME isn't installed, try KDE.

if which $STARTKDE >/dev/null 2>&1; then

exec `which $STARTKDE`

fi

fi

# Last, try AnotherLevel

# these files are left sitting around by TheNextLevel.

rm -f $HOME/Xrootenv.0

rm -f /tmp/fvwmrc* 2>/dev/null

# First thing - check the user preferences

if [ -f $HOME/.wm_style ] ; then

WMSTYLE=`cat $HOME/.wm_style`

case "$WMSTYLE" in

Afterstep | AfterStep)

exec /usr/X11R6/bin/RunWM --AfterStep

;;

WindowMaker | Windowmaker | WMaker | wmaker)

exec /usr/X11R6/bin/RunWM --WindowMaker

;;

Fvwm95 | fvwm95)

exec /usr/X11R6/bin/RunWM --Fvwm95

;;

Mwm | MWM | Lesstif)

exec /usr/X11R6/bin/RunWM --FvwmMWM

;;

esac

fi

# Argh! Nothing good is isntalled. Fall back to fvwm2 (win95-style) or twm

/usr/X11R6/bin/RunWM --Fvwm95 || {

# gosh, neither fvwm95 nor fvwm2 is available;

# fall back to failsafe settings

xclock -geometry 100x100-5+5 &

hanterm -geometry 80x50-50+150 &

if [ -f /usr/bin/netscape -a -f /usr/doc/HTML/index.html ]; then

netscape /usr/doc/HTML/index.html &

fi

if [ -f /usr/X11R6/bin/fvwm ]; then

exec fvwm

else

exec twm

fi

}

x윈도우의 윈도우 매니져를 선택할 수 있는 파일(/etc/sysconfig/desktop)을 찾을 수 있을 것입니다. 여기서는 윈도우 매니져를 선택해서 사용할 수 있는 파일을 찾는 것으로 만족하고 다음으로 넘어갑니다.

새로운 윈도우 매니져를 추가하기 실행하는 방법은 다음기회에....

자 이제, x 윈도우를 다시 구동해 보기 바랍니다.

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.