Upload
nemoux
View
597
Download
15
Embed Size (px)
Citation preview
http://nemoux00.wordpress.com
윈도우 매니저 소개 WAYLAND 소개
X vs WAYLAND
오픈 소스 기반 UI/UX 플랫폼 기본 UI/UX 플랫폼 구조
필수 오픈소스 프로젝트
윈도우 매니저 구조 및 기본 동작 원리 컴포지터/쉘 역할
기본 동작 과정
WAYLAND/WESTON 구조
스터디 진행 계획
여러 어플리케이션이 하나의 입/출력 장치를 공유
데스크탑 환경 vs 스마트폰 환경
APPLICATION
WINDOW WINDOW
APPLICATION
WINDOW
APPLICATION
WINDOW
WINDOW
WINDOW
윈도우 프로토콜 윈도우 서버/클라이언트 간의 통신 규약
X protocol, WAYLAND protocol, ...
컴포지터 (compositor) 여러 윈도우 화면을 하나의 스크린에 출력하기 위해 합성
입력 장치로부터 들어온 이벤트를 적절한 윈도우로 전달
…
쉘 (shell) 윈도우 화면의 위치나 크기 변경 기능 제공
시작 메뉴, 바탕화면, 스크린세이버 제공
윈도우 포커스 관리 및 전환 기능 제공
…
WAYLAND 의 시작 2008년 레드햇의 개발자였던 Kristian Høgsberg (이하 krh) 의 개인 프로젝트로 시작 (현재 krh 는 인텔에서 근무)
WAYLAND 의 목표 X 윈도우 프로토콜을 완전히 대체
데스크탑 환경 뿐 아니라 다양한 스마트 장치 효과적으로 지원
WAYLAND 의 특징 오픈 소스를 최대한 활용/내부를 최소한으로 유지
로컬 기반 (유닉스 도메인 소켓)
■ 파일디스크립터 공유, 레퍼런스 기반 버퍼, …
컴포지팅 API 만 제공 (Direct Rendering 과 CSD (Client-Side Decoration 지원))
윈도우 서버/클라이언트 프로토콜 윈도우 화면 생성 및 갱신 (wl_surface, wl_buffer, …)
입력 장치 이벤트 전달 (wl_seat, wl_keyboard, wl_pointer, …)
윈도우 위치/크기 변경, 최대/최소화 (wl_shell_surface, xdg_surface, …)
윈도우 서버/클라이언트 기본 라이브러리 기본 프로토콜 정의
유닉스 도메인 소켓을 이용한 네트워크 통신 제공
기본 프로토콜을 위한 소켓 통신에 필요한 함수 제공
WESTON 기능 검증을 위한 레퍼런스 컴포지터/쉘
오래된 X 를 버리고 새롭게 시작하자! 기능적인 차이(x), 구조적인 차이(..)
하위 호환성 유지/새로운 기능 수용 프로토콜/코드 복잡도 증가
X client X client
X server compositor
Kernel
KMS evdev
wayland client wayland client
wayland compositor
Kernel
KMS evdev
일반적인 어플리케이션(GUI) 개발 형태 APPLICATION vs TOOLKIT vs WINDOW MANAGER
GTK+/QT/…
drm-backend
application (GTK+)
application (wayland)
application (drm)
application (QT)
wayland-backend
shell (gnome-shell, plasma, …)
kernel (drm, fb, kms, evdev, …)
GPU, KEYBOARD, MOUSE, …
drm-backend …-backend
compositor (mutter, kwin, …)
DRM/MESA 하드웨어 가속 지원 (OPENGL)
OPENGL 라이브러리/GPU 드라이버
플랫폼 API(GLX/WGL/EGL/…)/렌더링 API
weston
mesa
gl-renderer
EGL-api
gallium
GL-api
i915-driver
drm
kernel
drm-driver (kms, gem, …)
i915-driver nv, radeon, …
nv, radeon, …
OpenGL app OpenGL app
gl-renderer
OpenGL app OpenGL app
nvidia OpenGL library
EGL-api GL-api
nvidia kernel driver
PIXMAN 픽셀 기반 이미지 관리
CPU 를 이용한 렌더링에 주로 활용 (FB 백엔드)
http://www.pixman.org/
CAIRO 벡터 그래픽 지원
레스터라이징 vs 벡터
http://cairographics.org/
PANGO 폰트 레이아웃 지원
http://www.pango.org/
SURFACE 윈도우
BUFFER 윈도우 화면 내용
VIEW 윈도우 위치 속성
SHELL_SURFACE 윈도우 관리 (위치, 크기, 속성, …)
WAYLAND/WESTON
weston_surface
weston_view
shell_surface
weston_view weston_view
shell_surface shell_surface
CLIENT
wl_surface
wl_shell_surface wl_surface
wl_buffer
wl_compositor weston_compositor wl_surface
윈도우 생성 (클라이언트 컴포지터)
윈도우 화면 갱신 (클라이언트 컴포지터)
공유메모리 버퍼/DRM 버퍼 전달
결과 화면 갱신 (컴포지터 커널 장치)
모든 윈도우의 현재 버퍼, 위치, 크기를 이용하여 결과 화면 생성
CLIENT
BUFFER
WAYLAND/WESTON (screen)
WINDOW
CLIENT
BUFFER
WINDOW
shared memory buffer
DRM buffer
렌더링 메모리 기반 vs 하드웨어가속 기반
SCREEN
GPU
framebuffer framebuffer
GUI framework (without opengl)
GUI framework (with opengl)
WINDOW
WINDOW
CPU
컴포지팅 여러 화면을 하나의 화면으로 합쳐주는 것
■ SCENE GRAPH 각 화면의 위치 정보 관리
다양한 그래픽 관련 분야에서 활용 ■ 윈도우 매니저 여러 윈도우를 하나의 프레임버퍼로 합성
■ 위젯 엔진 여러 위젯을 하나의 윈도우 화면으로 합성
■ …
window
window
framebuffer widget
widget
widget
widget window
widget
widget window
copy
copy copy
copy
입력 이벤트 수집 (장치 커널 컴포지터)
입력 이벤트 전달 (컴포지터 클라이언트)
윈도우 매니저에 바인딩되어있는 이벤트 우선 처리
포커스(window)를 소유 중인 클라이언트에게 해당 이벤트 전달
CLIENT WAYLAND/WESTON (screen)
WINDOW
CLIENT
WINDOW
wl_keyboard
wl_pointer
포커스(focus) 모델 Click to Focus 마우스(혹은 터치)로 클릭
Focus Follows Mouse 마우스 포인터의 현재 위치 이용
Sloppy Focus 패널이 아닌 윈도우만 포커스
그랩(grab) 인터페이스 마우스 버튼 (or 터치) 다운 + 모션 … + 업 이벤트 전달 방식
윈도우 이동/크기 변환/…, 드래그&드롭, …
일반 사용자에게 익숙한 인터페이스 방식
SCREEN
WINDOW WINDOW
press motion
release
다양한 렌더러/백엔드 지원
CLIENT
wl_shm wl_egl_window wl_surface
WAYLAND/WESTON
pixman-renderer gl-renderer rpi-renderer
compositor- fbdev
compositor- drm
compositor- rdp
compositor- rpi
compositor- wayland
compositor- x11
shm_buffer egl_texture weston_surface
wl_buffer
키보드/마우스/멀티터치 지원 UDEV 기반 장치 검색
EVDEV/MTDEV 프로토콜 지원
CLIENT
WAYLAND/WESTON
kern
el
touch
mtdev
udev
seat
touch
pointer
mouse
evdev
wl_seat
wl_touch
wl_pointer
grab (default)
grab (default)
button motion
key
default move resize
…
keyboard
keyboard wl_keyboard
evdev grab
(default)
touch motion
다양한 개발 언어/프로토콜/툴킷 지원 가능
wayland core interface
xdg shell interface
wl_surface wl_buffer wl_seat …
xdg_surface xdg_popup …
GTK+/QT/…
X11-backend wayland-backend
X11 protocol EGL
mesa nvidia opengl driver …
xserver
xwayland
application (GTK+)
application (QT)
application (wayland)
application (OpenGL-wayland)
kwin
mutter
weston
application (X11)
GLX
application (OpenGL-X11)