X11 / Wayland는 “그래픽 통신 규약(프로토콜)”이고,
Xorg는 X11을 구현한 실제 프로그램이며,
X 서버는 화면과 입력 장치를 소유한 주체,
GNOME은 데스크톱 환경,
gdm·lightdm은 로그인 관리자를 담당한다.
이제 이를 계층별로 정확히 분해해본다.
X11은 그래픽 시스템의 규칙을 정의한 “프로토콜”이다.
즉, “어떻게 화면을 요청하고, 입력 이벤트를 전달할 것인가”를 정의한다.
X11이 정의하는 것:
중요한 특징은 다음과 같다.
애플리케이션 (cv2.imshow)
└─ X11 요청 → “이 위치에 창 하나를 띄워달라”
실제 화면 출력은 X 서버가 담당한다.
Wayland는 X11의 구조적 한계를 해결하기 위해 등장한 차세대 그래픽 프로토콜이다.
Wayland의 목표:
구조적 차이:
애플리케이션 → Wayland compositor → 화면
다만 현실적인 한계도 존재한다.
이로 인해 개발 환경에서는 여전히 X11이 많이 사용된다.
X11이라는 “규약”을 실제로 구현한 실행 프로그램
정리하면 다음과 같다.
X11 (규칙)
↓
Xorg (프로그램)
↓
GPU / Framebuffer
/usr/lib/xorg/Xorg/tmp/.X11-unix/X0 소켓 생성DISPLAY=:0 → “이 Xorg가 열어둔 화면을 사용한다”는 의미즉, cv2.imshow() 같은 GUI 호출은 최종적으로 Xorg와 통신하게 된다.
X 서버란 화면, 키보드, 마우스를 소유한 프로세스
이름이 직관적이지 않은 이유는 구조적 관점 때문이다.
X 서버 (Xorg)
├─ 화면
├─ 키보드
└─ 마우스
클라이언트
├─ GNOME Terminal
├─ Firefox
└─ OpenCV GUI
즉, GUI 프로그램은 모두 X 서버의 “고객”이다.
GNOME은 그래픽 서버가 아니라, 사용자 경험(UI/UX) 묶음이다.
포함 요소:
중요한 점:
GNOME
└─ 창 배치, 테마, 사용자 인터페이스 담당
GNOME은 두 가지 모드로 동작할 수 있다.
Xorg (X 서버)
↓
GNOME
GNOME (Mutter)
├─ Wayland compositor
└─ 사실상 서버 역할까지 수행
이 때문에 gdm3 + GNOME + Wayland 조합은 초기화 과정이 복잡해지고,
GPU 드라이버 이슈에 민감해진다.
부팅 후 GUI 로그인 전체를 책임지는 관리자
주요 역할:
GNOME 전용에 가까움
기본 동작:
내부 로직이 복잡하고 GPU 초기화 타이밍에 민감
gdm3
├─ Wayland 시도
├─ Xorg fallback
└─ 세션 관리
lightdm
└─ Xorg → 로그인 → 세션
개발 환경이나 서버/도커 환경에서 안정성이 높은 편이다.
부팅
↓
lightdm
↓
Xorg (X 서버)
↓
GNOME (X11 모드)
↓
OpenCV / Docker GUI / ROS rqt
확인 포인트:
echo $XDG_SESSION_TYPE → x11/tmp/.X11-unix/X0 존재부팅
↓
gdm3
↓
Wayland 시도 또는 Xorg 초기화 실패
↓
세션 등록 실패
↓
tty로 떨어짐
| 구성 요소 | 정체 | 역할 |
|---|---|---|
| X11 | 프로토콜 | 그래픽 요청 규칙 |
| Wayland | 프로토콜 | X11 대체 |
| Xorg | 구현체 | X11 실행 |
| X 서버 | 개념 | 화면/입력 소유 |
| GNOME | DE | UI/UX 제공 |
| gdm3 | DM | GNOME 중심 로그인 |
| lightdm | DM | 단순 로그인 관리자 |
imshow👉 대부분 X11 가정 기반으로 설계됨