Linux/리눅스 실무의 이해

02-03 X 윈도우

바우네 2022. 1. 15. 20:00
반응형

X 윈도우

X 윈도우의 개념

X 윈도우의 정의

  1. 'X 윈도우'란 플랫폼 독립적으로 작동하는 GUI 환경을 구현하기 위해 서버 클라이언트 구조를 기반으로 X 프로토콜을 통해 디스플레이 장치에 윈도우를 그려준다.
  2. 디스플레이의 윈도우에 마우스 및 키보드 등 입력장치를 통한 사용자와의 상호작용을 가능하게 하는 플랫폼으로 유닉스 및 리눅스의 윈도우 시스템이다.

X 윈도우의 역사

  1. 1984년, IBM과 MIT, DEC 공동 '아데나 프로젝트'를 통해 밥 쉐이플러(Bob Scheifler)와 짐 게티스(Jim Gettys)가 처음 개발하였다.
  2. 1986년 밥 쉐이플러가 누구나 자유롭게 X를 사용하고 배포할 수 있도록 오픈소스화하기 위한 디자인을 수행하였다.
  3. 1987년 오픈소스 프로젝트하에 'X11'을 발표했다.
  4. 1988년 수많은 컴퓨터 제조업체로 이루어진 X 컨소시엄이 조직되어 X11R2가 릴리즈 되었다.
  5. 1996년 X 컨소시엄은 X11R6.3 버전을 발표하면서 해체되었다.
  6. 1996년 오픈 소프트웨어 재단과 X/Open으로 형성된 오픈 그룹이 X11R6.4 버전을 발표하였다. 그러나 오픈 그룹의 기존 공개 배포 라이선스 정책을 무시하고 XFree86과 같은 수많은 프로젝트와 일부 상용 제조업체들의 참여를 가로막는 새로운 라이선스 정책이 환영받지 못한 채 그 해 가을 X11R6.4를 기존 배포 라이선스 정책으로 다시 배포하였다.
  7. 1999년 오픈 그룹은 X.org를 만들었고 X11R6.5.1이 릴리즈 되었다.
  8. 2004년 X.org 재단이 만들어졌고 XFree86 4.4RC2와 X11R6.6을 기반으로 X11R6.7 버전을 개발하였다. 그리고 그 해 9월 투명창 지원, 체계적인 시각 효과 및 해상도 변경 기능, 3차원 가상현실 디스플레이 장치 도구 지원, 썸네일 기능 등 다양한 시각적 기능과 효과를 지원하는 X11R.6.8 버전도 발표했다.
  9. 2012년 6월, 안정화 버전인 X11R7.7이 발표됐다.
  10. 2019년 현재 기준, X11R7.8의 개별 컴포넌트의 개발은 모두 완료됐고 릴리즈 매니저를 맡아줄 자원자를 기다리고 있다.

X.org

X 윈도우의 특징

  1. X프로토콜이라 불리는 네트워크 프로토콜을 통해 서버 클라이언트 모델을 사용하기 때문에 네트워크로 연결되면 X윈도우를 이용할 수 있다.
  2. X서버는 X클라이언트 요청에 대해 처리 후 응답하거나 이벤트를 직접 X클라이언트에게 보낼 수 있다.
  3. X클라이언트는 원격지의 X서버 시스템에서 동작하는 응용 프로그램을 실행할 수 있다. 즉 X클라이언트를 사용하는 사용자가 응용 프로그램을 직접 설치할 필요가 없다.
  4. X윈도우는 사용자 인터페이스에 독립적이다. 즉 KDE, GNOME, XFCE 등의 데스크톱 환경은 X윈도우 환경에서 구현된 X클라이언트뿐이다.
  5. 서버 클라이언트 모델을 사용하므로 이론적으로 X프로토콜만 준수할 수 있다면 어떤 시스템이든 쉽게 X윈도우 이식이 가능하다.

X윈도우 구조

X서버

  1. 키보드, 마우스, 화면과 같은 디바이스와 직접 통신을 수행하고 관리한다.
  2. 특히 디스플레이 장치를 제어하여 X클라이언트에게 디스플레이 서비스를 제공한다.
  3. X서버는 로컬의 X클라이언트와 통신하기 위해 '/tmp/.X11-unix/X0'이라는 유닉스 도메인 소켓(Unix Domain Socket)을 사용한다.
  4. X서버는 원격지의 X클라이언트와 통신하기 위해 TCP 포트 6000번을 사용한다.
  5. 로컬 및 원격지의 X클라이언트 연결을 허용한다.
  6. 대표적 오픈소스 프로젝트로 XFree86과 X.org가 있다.

X클라이언트

  1. Xlib를 사용하여 작성된 일종의 응용 프로그램이다.
  2. '윈도우를 생성하라'와 같은 디스플레이 관련 서비스를 X서버에게 요청한다.
  3. 마우스 입력과 같은 X서버에서 발생한 이벤트를 받아 처리한다.

X프로토콜

  1. X프로토콜이란 X서버와 X클라이언트가 정보를 주고 받기 위한 메시지 형식을 정의한 통신 규약이다.
  2. X프로토콜의 기본 메시지는 Request, Reply, Event, Error로 구성된다.
  3. X서버와 X클라이언트는 X프로토콜의 메시지를 처리하기 위해 request queue, event queue를 운용한다.
  4. X프로토콜을 통해 X서버와 X클라이언트는 높은 이식성을 갖게 되었고 원격지에서 로컬에서 접속하는 것과 같은 동일한 사용자 경험을 갖는 것이 가능하게 되었다.

Xlib/XCB

  1. Xlib는 1985년 C언어로 작성된 X윈도우 시스템 프로토콜 클라이언트 라이브러리이다.
  2. 개발자는 X프로토콜에 대한 상세 내용을 알지 못해도 Xlib에서 제공하는 API를 통해 X클라이언트를 개발할 수 있다.
  3. 또한 Xlib 기반으로 강력한 라이브러리가 제공되고 있다. 예를 들면 Xr(X Toolkit Intrinsic), XaW(Athena widget set), Motif, FLTK, GTK+, Qt, Tk, SDL, SFML 등이 모두 Xlib 기반 라이브러리들이다.
  4. XCB는 Xlib를 대체하기 위해 2001년 바트 매시(Bart Massey)에 의해 시작된 프로젝트로 X.org에서는 XCB를 직접 사용하고 있다.

XToolkit

  1. Xt라고도 불리는 XToolkit은 X윈도우 시스템에서 GUI 프로그램 개발을 위해 C/C++로 개발된 API 프레임워크를 뜻한다.
  2. Xlib은 X클라이언트용 X프로토콜을 구현한 라이브러리이지만 버튼, 메뉴와 같은 그래픽 요소와 연관된 기능은 제공하고 있지 않아 XToolkit이 등장하였다.
  3. XToolkit은 그래픽 요소를 지원하지만 직접 제공하지 않고 XaW, Motif, OLIT와 같은 다른 라이브러리를 통해 구현되어 제공된다.
  4. 반면, FLTK, GTK+, Qt와 같은 최근 툴킷은 Xlib/XCB 기반으로 구현되었고 XToolkit을 사용하지 않는다.

XFree86과 X.org

XFree86

  1. IBM 호환 시스템을 사용하는 리눅스 및 유닉스 계열 오픈소스 X서버 프로젝트이며 1992년에 시작되었고 2004년 초기까지 가장 널리 사용됐다.
  2. 2004년 2월에 발표된 4.4.0 버전이 GPL 라이선스와 호환되지 않으면서 X.org 프로젝트를 더 많이 사용하기 시작했다.

X.org

  1. XFree86의 4.4RC2 버전과 X11R6.6 버전을 기반으로 X.org 파운데이션과 freedesktop.org에서 개발하였고 2004년에 시작됐다.
  2. XFree86이 회사 주도로 프로젝트가 진행된 반면 X.org는 커뮤니티 주도 프로젝트를 운영하였고 누구나 참여가 쉽도록 하였다.

X윈도우의 계층

디스플레이 메니저

  1. X11R3에서 처음 선보였으며 윈도우 매니저가 표시되기 전에 그래픽으로 구성된 로그인 유저 인터페이스를 사용자에게 제공하는 역할을 수행한다. 이 때문에 로그인 매니저(Login Manager)라고도 불린다.
  2. 디스플레이 메니저는 getty 또는 login을 대체하며 사용자의 userid와 password를 그래픽 방식으로 입력받는다.
  3. 원격지의 윈도우 매니저를 실행시키는 역할도 수행한다.
  4. 대표적 디스플레이 메니저로 X11R3부터 사용하던 XDM(X Display Manager), GNOME에서 사용하는 GDM(GNOME Display Manager), KDM(KDE Display Manager)이 있다.

X 세션(X session)

  1. X서버에 X클라이언트가 연결되면 X 세션이 형성된다.
  2. 생성된 X 세션을 통해 X프로토콜에 맞춰 메시지가 송수신될 수 있다. X서버에서 발생한 마우스 입력과 같은 이벤트가 X클라이언트에게 전달되기도 한다.

윈도우 매니저(Window Manager)

  1. X윈도우상에서 윈도우의 생성 위치, 윈도우의 이동/크기 변경, 윈도우의 외관(Look and feel) 등 윈도우의 그래픽 요소를 관리하는 매니저 프로그램이다.
  2. 도크(Dock), 태스크 바(Task Bar), 프로그램 런처(Program Launcher), 데스크톱 아이콘(Desktop Icon), 바탕화면(Wallpaper) 등과 같은 유용한 유틸리티를 제공한다.
  3. 윈도우 매니저의 유형
    유형 설명 사례
    스택형(Stacking) 윈도우 위에 여러 다른 윈도우를 쌓는 형태로 관리하는 방식 Amiwm, Blackbox, Enlightenment, Fluxbox, FVWM, IceWM, MWM, Openbox, WindowMaker
    타일형(Tiling) 윈도우끼리 겹쳐지지 않고 타일과 같이 화면이 분할되어 관리되는 방식 Awesome, dwm, ion, larswm, ratpoison, Stumpwm, wmii, i3, xmonad, XWEM
    복합형(Compositing) 스택형과 유사하나 각 윈도우는 자신의 버퍼를 가지며 랜더링되고, 그 결과 각 윈도우 간의 시각 효과를 가질 수 있게 되는 방식 GNOME의 Mutter 및 Metacity, Xfce의 Xfwm, Unity의 Compiz, KDE의 Kwin
    가상형(Virtual) 디스플레이 장치가 가진 해상도보다 더 높은 해상도를 가질 수 있는 다수의 가상 스크린을 사용할 수 있는 방식 FVWM, Tvtwm, HaZe

데스크톱 환경(Desktop Environment)

  1. 마이크로소프트 윈도우와 같은 사용자환경을 제공하기 위하여 윈도우 매니저뿐만 아니라 계정 관리, 디바이스 관리, 시작프로그램 관리, 네트워크 관리, 문서 관리 등 데스크톱 구성을 위한 모든 애플리케이션을 포함한 패키지 형태를 말한다.
  2. 대표적인 사례로 GNOME, KDE, XFCE, LXDE 등이 데스크톱 환경에 해당한다.

데스크톱 환경 구성 사례

KDE의 구성

  1. 1996년, 튀빙겐 대학교 학생이었던 마티아스 에트리히(Matthias Ettrich)가 Qt 라이브러리 기반 데스크톱 환경 개발을 시작했다.
  2. Qt 라이브러리가 자유소프트웨어 라이선스를 사용하지 않았기 때문에 이를 걱정하는 개발자들은 GNOME 프로젝트를 시작하기도 했다.
  3. 1998년 11월, Qt 라이브러리는 QPL 라이선스를 채용하고 오픈소스로 공개되었지만 GPL과 호환성 논의는 계속 이어졌다.
  4. 2000년 9월, 트롤테크(Trolltech)는 Qt 라이브러리의 유닉스용은 GPL로 공개했다.
  5. Qt 4.0부터 공개용 버전에 대한 지원을 사용 버전과 같은 수준으로 지원하면서 KDE 프로그램 또한 리눅스뿐 아니라 FreeBSD, Solaris, macOS, Windows 플랫폼을 모두 지원하게 됐다.
  6. 디스플레이 매니저는 KDM을 사용했다.
  7. 파일관리자는 Konqueror를 사용하고 윈도우 매니저는 Kwin(KWM)을 사용한다.

GNOME(GNU Network Object Model Environment)의 구성

  1. GNU에서 개발한 공개형 데스크톱 환경이다.
  2. GPL 라이선스가 아닌 Qt 라이브러리를 사용했던 KDE의 대안으로 개발됐다.
  3. GNOME은 LGPL 라이선스를 갖는 GTK+ 라이브러리 사용했기 때문에 응용 프로그램이 많이 개발됐다.
  4. 파일관리자는 nautilus를 사용했고 윈도우 매니저는 GNOME2는 Metacity가 사용됐고 GNOME3에서는 Mutter가 사용됐다.

X 윈도우 실행

시스템 시작 시 X 윈도우 실행하기

  1. CentOS 6
    • /etc/initab 파일을 root 권한으로 열고 init 프로세스의 실행 레벨을 5로 수정한다.
    • /etc/initab 파일을 저장한 다음 reboot 명령을 사용하여 시스템 재부팅하면 X 윈도우가 자동으로 실행된다.
  2. CentOS 7
    • /etc/initab 파일을 수정하는 대신에 systemd 명령어를 통해 제어할 수 있다.
    • 시스템 시작 시 X 윈도우를 시작하려면 다음과 같이 기본값을 변경하고 재부팅한다.
    • systemctl set-default graphical.target
    • 기본값 확인: systemctl get-default
  3. 터미널에서 X 윈도우 실행하기
    • 실행 레벨이 3으로 설정되어 있다면 터미널 모드로 부팅된다.
    • 로그인 후 [startx] 명령어로 X 윈도우 실행한다.
    • startx는 인자값을 전달할 수 있다.
      • startx -- -depth 16(하이컬러 모드로 X 윈도우 실행)
      • startx -- :1(두 번째 윈도우 터미널에 X 윈도우 실행)

원격지에서 X 윈도우 실행하기

  1. xhost 명령어
    • xhost를 통해 X 서버에 접근할 수 있는 클라이언트를 지정하거나 해제할 수 있다.
    • 사용 형식: xhost [+|-] [address|hostname]
    • 현재 설정된 접근 목록 출력: xhost
    • 모든 클라이언트 접속 허용: xhost +
    • 모든 클라이언트 접속 차단: xhost -
    • 특정 IP의 접속 허용: xhost + 192.168.100.101
    • 특정 IP의 접속 차단: xhost - 192.168.100.101
  2. DISPLAY 환경변수
    • X클라이언트 프로그램이 윈도우를 표시할 서버의 주소를 설정하는 환경변수이다. ':0.0'은 기본값으로 현재 시스템의 첫 번째 X 윈도우의 첫 번째 모니터를 뜻한다.
    • X클라이언트 프로그램의 화면 출력을 특정 IP로 보낸다.: export DISPLAY="192.168.100.101:0.0"
    • X클라이언트 프로그램 화면 출력을 특정 IP 두 번째 모니터로 보낸다.: export DISPLAY="192.168.100.101:0.1"
  3. xauth
    • .Xauthority 파일에 쿠키 내용을 추가, 삭제, 리스트를 출력하는 유틸리티이다.
    • xhost가 호스트 기반 인증 방식이라면 xauth는 MMC(MIT Magic Cookie) 기반 인증 방식이다.
    • 설정된 값을 보기 위해서는 xauth list 명령을 사용하고 설정을 추가하기 위해서는 xauth add를 사용한다.

X 윈도우 응용 프로그램

  1. 이미지 편집
    • GIMP(GNU Image Manipulation Program)
    • ImageMagick
    • Eog(Eye of GNOME)
    • kdegraphics
  2. 미디어 재생
    • Totem
    • KMid
  3. 음악 재생
    • Phythmbox
  4. 문서관리
    • evince
    • LibreOffice
반응형

'Linux > 리눅스 실무의 이해' 카테고리의 다른 글

02-04-02 셸 프로그래밍  (0) 2022.01.20
02-04-01 셸(Shell)  (0) 2022.01.17
02-02-03 파일 시스템의 이해  (0) 2022.01.14
02-02-02 Systemd  (0) 2022.01.12
02-02-01 리눅스의 구조  (0) 2022.01.11