본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
X Window System; X11; X
유닉스·리눅스 계열 운영체제에서 그래픽 사용자 인터페이스를 제공하는 창 시스템
  • 1984년 MIT의 아테나 프로젝트(Project Athena)에서 시작했고, 1987년 발표된 X11이 지금까지 쓰이는 버전이다.
  • 운영체제의 일부가 아니라 응용 프로그램으로 동작한다. 그래서 X 윈도를 끄고 텍스트 환경만 쓸 수도 있다.
  • 런레벨 5(또는 systemd의 graphical.target)가 X 윈도가 실행되는 상태다.
  • 클라이언트-서버 구조 : 프로그램(클라이언트)과 화면·입력장치를 관리하는 쪽(서버)이 분리되어 있다.
  • 네트워크 투명성 : 원격 호스트에서 실행한 프로그램의 화면을 내 앞의 X 서버에 띄울 수 있다. 접속할 서버는 `DISPLAY` 환경 변수로 지정한다.
  • 정책과 구현의 분리 : 창의 모양이나 조작 방식을 X 자체가 정하지 않는다. 그래서 윈도 매니저를 바꾸면 화면이 완전히 달라진다.
  • 플랫폼에 독립적이며 소스가 공개되어 있다.

서버와 클라이언트의 방향

편집 원본 편집

일반적인 서버-클라이언트와 반대로 이해하기 쉬운 부분이다.

  • X 서버 : 사용자 앞에 있는 컴퓨터. 화면 출력과 키보드·마우스 입력을 담당한다.
  • X 클라이언트 : 응용 프로그램. 원격 서버에서 돌고 있을 수 있다.
구성 요소 역할
X 서버 디스플레이와 입력 장치를 관리하고 화면에 그린다
X 클라이언트 실제 응용 프로그램
X 프로토콜 서버와 클라이언트가 주고받는 메시지 규약
Xlib / XCB X 프로토콜을 다루는 라이브러리
윈도 매니저 창의 이동·크기 조절·최소화, 제목 표시줄 등 창의 배치와 모양을 관리한다
디스플레이 매니저 그래픽 로그인 화면을 띄우고 사용자 로그인과 세션을 관리한다. xdm, gdm, kdm, sddm, lightdm이 있다
데스크톱 환경 윈도 매니저에 파일 관리자·패널·기본 응용 프로그램까지 묶은 통합 환경. GNOME, KDE 등

GUI 툴킷과 라이브러리

편집 원본 편집

X 윈도 위의 응용 프로그램은 X 프로토콜을 직접 다루지 않고 라이브러리를 거쳐 만든다. 아래로 갈수록 고수준이다.

이름 내용
Xlib C 언어로 구현된 X 클라이언트 라이브러리. X 서버와 대화하는 역할을 하는 저수준 인터페이스로, 창을 열고 키보드·마우스 입력에 반응하는 정도의 단순한 기능만 제공한다. 버튼이나 메뉴 같은 위젯은 없다
XCB Xlib 를 대신하려고 만든 더 작고 가벼운 C 바인딩. 요청을 비동기로 보낼 수 있다
Xt(X Toolkit Intrinsics) Xlib 위에서 위젯을 만들고 다루는 틀을 제공한다
Motif Xt 위에 만든 위젯 툴킷. OSF(Open Software Foundation)가 만들었고 상용 유닉스의 CDE 데스크톱이 썼다
GTK+ (GTK) GIMP 를 만들기 위해 시작된 C 언어 툴킷. GNOME 의 기반이다. LGPL
Qt 노르웨이 트롤테크가 만든 C++ 툴킷. KDE 의 기반이다
  • "C 언어로 구현된 클라이언트 라이브러리로 X 서버와 대화하며, 키보드·마우스 반응 같은 단순한 기능만 하는 저수준 인터페이스" 는 Xlib 이다. Qt·GTK+·Motif 는 위젯을 갖춘 고수준 툴킷이다.
  • 초기에는 MIT와 X 컨소시엄, Open Group이 관리했다.
  • 현재는 X.Org 재단(x.org)이 X11 구현인 X.Org 서버를 개발하며, 데스크톱 상호 운용성을 다루는 freedesktop.org와 함께 표준을 발전시키고 있다.
  • 후속 디스플레이 서버로 Wayland가 개발되어 최근 배포판의 기본값이 되고 있다.
  • `startx` : 텍스트 환경에서 X 윈도를 시작한다
  • `xhost` : 다른 호스트의 접속 허용 여부를 지정한다 — 리눅스 xhost
  • `xauth` : 쿠키 기반으로 접속 권한을 관리한다 — 리눅스 xauth
  • `export DISPLAY=192.168.0.10:0.0` : 출력할 X 서버를 지정한다