Linux GUI 구조

김민준·2026년 1월 28일

X11 · Xorg · Wayland · GNOME · gdm · lightdm


X11 / Wayland는 “그래픽 통신 규약(프로토콜)”이고,
Xorg는 X11을 구현한 실제 프로그램이며,
X 서버는 화면과 입력 장치를 소유한 주체,
GNOME은 데스크톱 환경,
gdm·lightdm은 로그인 관리자를 담당한다.

이제 이를 계층별로 정확히 분해해본다.


1️⃣ 가장 아래 계층: X11과 Wayland

(📜 그래픽 통신 규약 / 프로토콜)

🔹 X11 (X Window System Protocol)

X11은 그래픽 시스템의 규칙을 정의한 “프로토콜”이다.
즉, “어떻게 화면을 요청하고, 입력 이벤트를 전달할 것인가”를 정의한다.

X11이 정의하는 것:

  • 창을 생성하라는 요청
  • 키보드/마우스 이벤트 전달
  • 화면에 그리라는 명령

중요한 특징은 다음과 같다.

  • ❌ 애플리케이션은 화면을 직접 제어하지 않는다
  • 항상 요청(Request)만 보낸다
애플리케이션 (cv2.imshow)
 └─ X11 요청 → “이 위치에 창 하나를 띄워달라”

실제 화면 출력은 X 서버가 담당한다.


🔹 Wayland

Wayland는 X11의 구조적 한계를 해결하기 위해 등장한 차세대 그래픽 프로토콜이다.

Wayland의 목표:

  • 지연(latency) 감소
  • 보안 강화
  • 구조 단순화

구조적 차이:

  • X11: 클라이언트 ↔ 서버 구조
  • Wayland: 컴포지터가 모든 것을 통합 관리
애플리케이션 → Wayland compositor → 화면

다만 현실적인 한계도 존재한다.

  • Docker GUI 환경과의 호환성 문제
  • 원격 GUI / 레거시 애플리케이션 제약
  • 개발 도구 다수가 여전히 X11 가정 기반

이로 인해 개발 환경에서는 여전히 X11이 많이 사용된다.


2️⃣ Xorg

(🧠 X11의 실제 구현체)

🔹 Xorg란 무엇인가?

X11이라는 “규약”을 실제로 구현한 실행 프로그램

정리하면 다음과 같다.

  • X11 → 설명서
  • Xorg → 설명서대로 만든 실행 파일
X11 (규칙)
  ↓
Xorg (프로그램)
  ↓
GPU / Framebuffer

🔹 Xorg의 실체

  • 흔히 말하는 “X 서버”의 대표 구현체
  • 실제 실행 파일: /usr/lib/xorg/Xorg
  • 실행 시 /tmp/.X11-unix/X0 소켓 생성
  • DISPLAY=:0 → “이 Xorg가 열어둔 화면을 사용한다”는 의미

즉, cv2.imshow() 같은 GUI 호출은 최종적으로 Xorg와 통신하게 된다.


3️⃣ X 서버란 무엇인가

(🎯 개념적 역할)

X 서버란 화면, 키보드, 마우스를 소유한 프로세스

이름이 직관적이지 않은 이유는 구조적 관점 때문이다.

  • 서버(Server): 하드웨어 자원 소유
  • 클라이언트(Client): 요청을 보내는 애플리케이션
X 서버 (Xorg)
 ├─ 화면
 ├─ 키보드
 └─ 마우스

클라이언트
 ├─ GNOME Terminal
 ├─ Firefox
 └─ OpenCV GUI

즉, GUI 프로그램은 모두 X 서버의 “고객”이다.


4️⃣ GNOME

(🖥️ 데스크톱 환경, Desktop Environment)

🔹 GNOME의 정체

GNOME은 그래픽 서버가 아니라, 사용자 경험(UI/UX) 묶음이다.

포함 요소:

  • 파일 관리자
  • 패널 및 런처
  • 설정 앱
  • 윈도우 매니저 (Mutter)

중요한 점:

  • ❌ GNOME ≠ X 서버
  • ✅ GNOME은 Xorg 위 또는 Wayland 위에서 동작
GNOME
 └─ 창 배치, 테마, 사용자 인터페이스 담당

5️⃣ GNOME + Wayland 관계 (중요)

GNOME은 두 가지 모드로 동작할 수 있다.

X11 모드

Xorg (X 서버)
 ↓
GNOME

Wayland 모드

GNOME (Mutter)
 ├─ Wayland compositor
 └─ 사실상 서버 역할까지 수행

이 때문에 gdm3 + GNOME + Wayland 조합은 초기화 과정이 복잡해지고,
GPU 드라이버 이슈에 민감해진다.


6️⃣ Display Manager

(🚪 로그인 관리자)

🔹 Display Manager란?

부팅 후 GUI 로그인 전체를 책임지는 관리자

주요 역할:

  1. 그래픽 세션(Xorg 또는 Wayland) 시작
  2. 로그인 화면 표시
  3. 로그인 성공 시 데스크톱 실행

🔹 gdm3 (GNOME Display Manager)

  • GNOME 전용에 가까움

  • 기본 동작:

    • Wayland 우선 시도
    • 실패 시 Xorg fallback
  • 내부 로직이 복잡하고 GPU 초기화 타이밍에 민감

gdm3
 ├─ Wayland 시도
 ├─ Xorg fallback
 └─ 세션 관리

🔹 lightdm

  • 구조 단순
  • 보수적 설계
  • 기본적으로 Xorg를 바로 실행
lightdm
 └─ Xorg → 로그인 → 세션

개발 환경이나 서버/도커 환경에서 안정성이 높은 편이다.


7️⃣ 실제 환경 구조 비교

🔵 현재 안정 상태

부팅
 ↓
lightdm
 ↓
Xorg (X 서버)
 ↓
GNOME (X11 모드)
 ↓
OpenCV / Docker GUI / ROS rqt

확인 포인트:

  • echo $XDG_SESSION_TYPEx11
  • /tmp/.X11-unix/X0 존재
  • Docker GUI 정상 동작

🔴 문제 발생 당시 구조

부팅
 ↓
gdm3
 ↓
Wayland 시도 또는 Xorg 초기화 실패
 ↓
세션 등록 실패
 ↓
tty로 떨어짐

8️⃣ 핵심 개념 요약 표

구성 요소정체역할
X11프로토콜그래픽 요청 규칙
Wayland프로토콜X11 대체
Xorg구현체X11 실행
X 서버개념화면/입력 소유
GNOMEDEUI/UX 제공
gdm3DMGNOME 중심 로그인
lightdmDM단순 로그인 관리자

9️⃣ 개발 환경에서 X11 + lightdm이 유리한 이유

  • Docker GUI
  • OpenCV imshow
  • ROS rqt
  • X11 forwarding
  • 원격 디버깅

👉 대부분 X11 가정 기반으로 설계됨


profile
지금까지 해온 여러 활동들을 간략하게라도 정리해보고자 합니다.

0개의 댓글