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 윈도우를 다시 구동해 보기 바랍니다. |
[목차] |