안녕하세요
뚱보 프로그래머 입니다.
X윈도우 즉, GUI 환경에서는 좀더 편하게 리눅스를 다룰수 있습니다.
다만, 리소스를 좀더 먹는다는 단점이 있죠.
리소스에 민감한 환경에서의 Linux는 오히려 독이 될수 있습니다.
X 윈도우 역사
X란 이름이 유래한 것은 W라는 윈도우 시스템을 기반으로 개발하였기 때문이다. 현재 X 윈도우 시스템은 X.org에서 관리한다. 리눅스가 사용자층을 증가시킬 수 있는 토대가 된 것이 GUI(Graphical User Interface) 환경을 사용할 수 있도록 해주는 X 윈도우이었다. 하지만 X 윈도우는 여러 다른 시스템에서 GUI 환경을 사용할 수 있도록 제공해주는 기본 플랫폼이다. 또한 네트워크 시스템에 알맞은 구성 방식을 구현하기 위해 서버/클라이언트 모델을 도입하였다. 이에 따라 개발자들은 아키텍쳐 구별없이 개발하는 것이 가능해졌다. 그래서 WINE같은 애뮬레이터를 이용하여 X 윈도우에서 MS의 Windows도 사용이 가능한 것이다. 이는 프로그램에 높은 이식성을 제공하는 것이다.
X 윈도우 시스템은 서버/클라이언트로 구성되었고, 클라이언트는 애플리케이션에 해당하고 서버는 클라이언트와 입출력기기와 중개를 담당하는 프로그램으로 정의될 것이다. 그래서 네트워크에 연결되지 않은 상태에서도 X 윈도우는 클라이언트/서버의 지속적인 통신으로 작동하는 것이다.
1. 서버/클라이언트
클라이언트는 응용프로그램을 말한다. X 윈도우 클라이언트는 직접적으로 사용자와 통신할 수 없다.
클라이언트는 서버로부터 키보드나 마우스 입력같은 사용자의 입력을 얻을 수 있다. 예를 들어 클라이언트에서 서버가 그림을 그리도록 요구하는 명령을 내리면 서버는 이 요청을 받아들여서 그래픽 디스플레이 하드웨어를 제어하고 원하는 입출력을 다시 클라이언트에 넘겨준다.
X 서버란 애플리케이션 사용자의 컴퓨터에서 작동하며 그래픽 디스플레이 하드웨어를 제어해 그림을 화면에 뿌린 뒤 답신을 보낸다.
2. X protocol
X 윈도우에서 각종 처리는 클라이언트와 서버라는 두가지 프로그램이 나누어서 하고 있다. 즉, 클라이언트는 IPC(InterProcess Communication)를 이용하여 서버의 입력, 출력을 제어한다. 이러한 X 서버와 X 클라이언트의 상호작용은 메시지 교환을 통해서 이루어지는데, 메시지 형태와 사용법을 X 프로토콜이라 한다.
X 윈도우의 중요한 특징 중 하나가 이러한 메시지 교환이 같은 시스템뿐만이 아니라 네트워크를 통해서도 이루어질 수 있다는 것이다. 그래서 시스템 사양이 낮은 컴퓨터 사용자도 네트워크 컴퓨터에 존재하는 X 클라이언트 프로그램을 자신의 화면에 표시하여 실행시키는 것이 가능하다.
X protocol은 서버와 클라이언트 사이에서 통신되는 Request, Replay, Event, Error의 기본 메시지이다. 클라이언트가 윈도우를 생성해 달라거나 도형을 출력해 달라는 요구를 Request queue에 넣어 서버에 보내면, 서버는 하드웨어를 제어, 화면에 디스플레이한 후 답신을 보낸다.
그리고 서버는 하드웨어로부터 들어오는 입력(예를 들어 마우스나 키보드의 입력)을 받아들여 event queue에 넣어 클라이언트가 그에 따른 처리를 한다.
3. Xlib, Xtoolkit
X에서의 프로그램 개발은 시스템의 OS나 하드웨어 의존적인 조작을 처리해주는 서버와 통신할 수 있는 X protocol을 이해해야 한다.
그리고 이 X protocol은 Xlib이라는 라이브러리 루틴으로부터 발생시킨다. 그러나 Xlib의 기능은 화면에 그림을 그리고 마우스에 반응하는 정도의 기능만을 가지고 있다. 즉, 저수준 인터페이스이다. 그래서 Xlib보다 상위 라이브러리인 X toolkit을 사용한다.
Xt Intrinsics, Xaw, XView, Motif, Qt, GTK 등이 있다.
설치와 설정
XFree86은 인텔 x86계열의 유닉스 계열 운영체제에서 동작하는 X 서버이다.
1. 설치
XFree86을 설치하기 위해서는 CD-ROM의 RPMS 디렉토리로 이동해서 다음과 같은 명령을 실행시킨다.
설정하기 전에 기본적으로 알아야 할 하드웨어 사양은 비디오 메모리 용량, 비디오 카드 칩의 종류, 모니터의 최대 해상도, 모니터 모델 정보, 모니터 수평/수직 해상도이다. 비디어 카드에 대한 정보를 알려면 SuperProbe 유틸리티를 이용하고 해상도를 모른다면 xvidtune 유틸리티를 이용하면 된다.
[root @edu00 linux]#mount -t iso9660 /dev/cdrom /mnt/cdrom
[root @edu00 linux]#cd /mnt/cdrom
[root @edu00 cdrom]#cd Redhat/RPMS
[root @edu00 RPMS]#rpm -ivh XFree86*.rpm
[root @edu00 RPMS]#cd /home/linux
[root @edu00 linux]#SuperProbe
비디오 카드에 대한 자세한 정보를 볼 수 있다.
[root @edu00 linux]#xvidtune
비디오 모드를 조정할 수 있는 유틸리티이다.
/etc/X11/XF86Config 파일의 해상도 부분에 입력하면 설정이 적용된다.
2. 설정 방법
1] 설정 유틸리티들
1> xf86config
2> XF86Setup
3> Xconfigurator
4> setup
2] 설정 파일 위치
/etc/X11 디렉토리에 XF86Config 파일이 생성되고 /usr/X11R6/lib/XF86Config 파일로 링크된다.
3] 설정 파일
[root @edu00 linux]#vi /etc/X11/XF86Config
X 윈도우 실행 방법들
1. xinit
xinit을 실행시키면 X 윈도우 서버가 구동 되고 사용자 홈 디렉토리에서 실행시킬 X 클라이언트를 결정하기 위해 .xinitrc 스크립트를 이용한다.
2. startx
콘솔에서 startx를 입력하면 된다. startx는 사용자 제어를 높이기 위해 쉘 스크립트로 만들어져 있다. startx는 처음 사용자의 홈 디렉토리에서 .xinitrc를 찾고 없으면 /usr/X11R6/lib/xinit/.xinitrc 파일을 찾는다.
.xinitrc 파일에 의해 각종 자원들이 호출되어 실행되고 사용자의 홈 디렉토리에서 .XClients 스크립트를 찾아 실행하게 된다. 없으면 /etc/X11/xinit/XClients를 실행한다. .Xclients 스크립트는 어떠한 desktop 환경을 사용할 것인지 /etc/sysconfig/desktop 파일에서 프로그램을 찾아 실행시킨다.
가상 콘솔에서 startx -- :[1-5]를 실행하여 X 윈도우를 실행한다.
이때 숫자는 display되는 화면을 지정하는 것이다. 0부터 시작된다.
[root @edu00 linux]#startx -- :1
[root @edu00 linux]#startx -- :2
[root @edu00 linux]#startx -- -bpp 32
3. Client에서 X 서버 프로그램 사용하기
클라이언트에서 서버의 프로그램을 실행하는 유틸리티는 xhost이다.
1] xhost options
[root @edu00 linux]#xhost +
: X 서버에 접속할 수 있는 모든 클라이언트를 허용
[root @edu00 linux]#xhost -
: X 서버에 접속된 모든 클라이언트를 해제
[root @edu00 linux]#xhost + IP or Domain Name
: X 서버에 접속할 수 있는 클라이언트를 지정
[root @edu00 linux]#xhost - IP or Domain Name
: X 서버에 접속된 클라이언트를 해제
2] 예제
서버의 주소를 192.168.1.10로 가정하고 클라이언트의 주소를 211.170.43.123으로 가정한다.
[root @edu00 linux]#xhost + 192.168.1.10
[root @edu00 linux]#telnet 192.168.1.10
[root @edu01 linux]$export DISPLAY=192.168.1.10
[root @edu01 linux]$xclock &
/etc/hosts.allow 파일에 해당 호스트를 적어두면 호스트 이름을 입력하지 않아도 된다.
[root @edu00 linux]#xhost +
[root @edu00 linux]#DISPLAY=192.168.1.10:0 xwd -root | convert – screen.png