23
[email protected] http://nemoux00.wordpress.com

윈도우 매니저 스터디: 0.윈도우 매니저 소개

  • Upload
    nemoux

  • View
    597

  • Download
    15

Embed Size (px)

Citation preview

Page 1: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

[email protected]

http://nemoux00.wordpress.com

Page 2: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

윈도우 매니저 소개 WAYLAND 소개

X vs WAYLAND

오픈 소스 기반 UI/UX 플랫폼 기본 UI/UX 플랫폼 구조

필수 오픈소스 프로젝트

윈도우 매니저 구조 및 기본 동작 원리 컴포지터/쉘 역할

기본 동작 과정

WAYLAND/WESTON 구조

스터디 진행 계획

Page 3: 윈도우 매니저 스터디: 0.윈도우 매니저 소개
Page 4: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

여러 어플리케이션이 하나의 입/출력 장치를 공유

데스크탑 환경 vs 스마트폰 환경

APPLICATION

WINDOW WINDOW

APPLICATION

WINDOW

APPLICATION

WINDOW

WINDOW

WINDOW

Page 5: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

윈도우 프로토콜 윈도우 서버/클라이언트 간의 통신 규약

X protocol, WAYLAND protocol, ...

컴포지터 (compositor) 여러 윈도우 화면을 하나의 스크린에 출력하기 위해 합성

입력 장치로부터 들어온 이벤트를 적절한 윈도우로 전달

쉘 (shell) 윈도우 화면의 위치나 크기 변경 기능 제공

시작 메뉴, 바탕화면, 스크린세이버 제공

윈도우 포커스 관리 및 전환 기능 제공

Page 6: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

WAYLAND 의 시작 2008년 레드햇의 개발자였던 Kristian Høgsberg (이하 krh) 의 개인 프로젝트로 시작 (현재 krh 는 인텔에서 근무)

WAYLAND 의 목표 X 윈도우 프로토콜을 완전히 대체

데스크탑 환경 뿐 아니라 다양한 스마트 장치 효과적으로 지원

WAYLAND 의 특징 오픈 소스를 최대한 활용/내부를 최소한으로 유지

로컬 기반 (유닉스 도메인 소켓)

■ 파일디스크립터 공유, 레퍼런스 기반 버퍼, …

컴포지팅 API 만 제공 (Direct Rendering 과 CSD (Client-Side Decoration 지원))

Page 7: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

윈도우 서버/클라이언트 프로토콜 윈도우 화면 생성 및 갱신 (wl_surface, wl_buffer, …)

입력 장치 이벤트 전달 (wl_seat, wl_keyboard, wl_pointer, …)

윈도우 위치/크기 변경, 최대/최소화 (wl_shell_surface, xdg_surface, …)

윈도우 서버/클라이언트 기본 라이브러리 기본 프로토콜 정의

유닉스 도메인 소켓을 이용한 네트워크 통신 제공

기본 프로토콜을 위한 소켓 통신에 필요한 함수 제공

WESTON 기능 검증을 위한 레퍼런스 컴포지터/쉘

Page 8: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

오래된 X 를 버리고 새롭게 시작하자! 기능적인 차이(x), 구조적인 차이(..)

하위 호환성 유지/새로운 기능 수용 프로토콜/코드 복잡도 증가

X client X client

X server compositor

Kernel

KMS evdev

wayland client wayland client

wayland compositor

Kernel

KMS evdev

Page 9: 윈도우 매니저 스터디: 0.윈도우 매니저 소개
Page 10: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

일반적인 어플리케이션(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, …)

Page 11: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

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

Page 12: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

PIXMAN 픽셀 기반 이미지 관리

CPU 를 이용한 렌더링에 주로 활용 (FB 백엔드)

http://www.pixman.org/

CAIRO 벡터 그래픽 지원

레스터라이징 vs 벡터

http://cairographics.org/

PANGO 폰트 레이아웃 지원

http://www.pango.org/

Page 13: 윈도우 매니저 스터디: 0.윈도우 매니저 소개
Page 14: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

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

Page 15: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

윈도우 생성 (클라이언트 컴포지터)

윈도우 화면 갱신 (클라이언트 컴포지터)

공유메모리 버퍼/DRM 버퍼 전달

결과 화면 갱신 (컴포지터 커널 장치)

모든 윈도우의 현재 버퍼, 위치, 크기를 이용하여 결과 화면 생성

CLIENT

BUFFER

WAYLAND/WESTON (screen)

WINDOW

CLIENT

BUFFER

WINDOW

shared memory buffer

DRM buffer

Page 16: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

렌더링 메모리 기반 vs 하드웨어가속 기반

SCREEN

GPU

framebuffer framebuffer

GUI framework (without opengl)

GUI framework (with opengl)

WINDOW

WINDOW

CPU

Page 17: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

컴포지팅 여러 화면을 하나의 화면으로 합쳐주는 것

■ SCENE GRAPH 각 화면의 위치 정보 관리

다양한 그래픽 관련 분야에서 활용 ■ 윈도우 매니저 여러 윈도우를 하나의 프레임버퍼로 합성

■ 위젯 엔진 여러 위젯을 하나의 윈도우 화면으로 합성

■ …

window

window

framebuffer widget

widget

widget

widget window

widget

widget window

copy

copy copy

copy

Page 18: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

입력 이벤트 수집 (장치 커널 컴포지터)

입력 이벤트 전달 (컴포지터 클라이언트)

윈도우 매니저에 바인딩되어있는 이벤트 우선 처리

포커스(window)를 소유 중인 클라이언트에게 해당 이벤트 전달

CLIENT WAYLAND/WESTON (screen)

WINDOW

CLIENT

WINDOW

wl_keyboard

wl_pointer

Page 19: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

포커스(focus) 모델 Click to Focus 마우스(혹은 터치)로 클릭

Focus Follows Mouse 마우스 포인터의 현재 위치 이용

Sloppy Focus 패널이 아닌 윈도우만 포커스

그랩(grab) 인터페이스 마우스 버튼 (or 터치) 다운 + 모션 … + 업 이벤트 전달 방식

윈도우 이동/크기 변환/…, 드래그&드롭, …

일반 사용자에게 익숙한 인터페이스 방식

SCREEN

WINDOW WINDOW

press motion

release

Page 20: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

다양한 렌더러/백엔드 지원

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

Page 21: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

키보드/마우스/멀티터치 지원 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

Page 22: 윈도우 매니저 스터디: 0.윈도우 매니저 소개

다양한 개발 언어/프로토콜/툴킷 지원 가능

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)

Page 23: 윈도우 매니저 스터디: 0.윈도우 매니저 소개