윈도우 매니저 스터디: 3. 윈도우 매니저 입력

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

Upload: nemoux

Post on 21-Jul-2015

338 views

Category:

Engineering


6 download

TRANSCRIPT

[email protected]

http://nemoux00.wordpress.com

윈도우 매니저 입력 기본 동작 과정 및 포커스 모델

그랩 인터페이스 Default/Move/Resize

데이터 인터페이스 Drag & Drop

Selection

가상 키보드/한글 입력 동작 과정

세션 관리

제공하는 데이터 종류에 따른 분류 이벤트 장치 : 이벤트 전달

포인트 장치 : 모션과 이벤트 전달

비전 장치 : 모션과 이벤트, 그리고 제스처(모양)까지 전달

event device point device

mouse (relative)

touch (absolute)

keyboard myo

tuio evdev

(mtdev)

vision device

leapmotion kinect

evdev evdev openni … …

type A type B

: event : motion : event : gesture

: motion : event

openkinect sensorkinect

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

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

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

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

CLIENT

WAYLAND/WESTON (screen)

SURFACE

CLIENT SURFACE

wl_keyboard

wl_pointer

seat0

touch

pointer

keyboard

pointer

keyboard

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

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

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

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

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

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

SCREEN

WINDOW WINDOW

press motion

release

초록색 창으로 키보드 입력을 전달하기 위한 과정 마우스 이동 마우스 포커스 변경

마우스 클릭 윈도우 우선순위 변경, 키보드 포커스 변경

키보드 입력 wl_keyboard 프로토콜의 key 이벤트 전달

SCREEN

WINDOW

SCREEN

WINDOW

WINDOW

WINDOW

키보드/마우스/멀티터치 지원 EVDEV/MTDEV 프로토콜 사용

그랩 인터페이스 (default, move, resize, …) 지원

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 modifiers

default move resize

keyboard

keyboard wl_keyboard

evdev (+xkb)

grab (default)

touch motion

그랩 인터페이스 지원 기본(default) 그랩 인터페이스 포커스 윈도우로 이벤트 전달

하드웨어/커널 이벤트(evdev) 그랩(grab) 클라이언트

키보드 vs 마우스 vs 터치

WAYLAND/WESTON

CLIENT

MOUSE

wl_event_source

evdev

motion event button event

focus motion button cancel

default grab

leave motion button axis enter

MOVE/RESIZE 그랩 인터페이스 동작 과정 이벤트 시리얼 확인 필수 (시리얼 이벤트 고유 번호 이벤트 검증/장치 구분)

모션 이벤트에서 포커스 변경 X

CSD (Client Side Decoration) XDG 인터페이스 MOVE 리퀘스트

WAYLAND/WESTON

CLIENT

wl_event_source

motion event button event

focus motion button cancel

move grab

view

up

: restore default grab

: change geometry

WAYLAND/WESTON

CLIENT

wl_event_source

motion event button event

focus motion button cancel

default grab

button

down : check device’s grab serial : change move grab

xdg_surface_move(serial)

: click frame

: serial

드래그 & 드롭 동작 과정 DATA_DEVICE(공통), DATA_SOURCE(보내는 쪽), DATA_OFFER(받는 쪽)

드래그 그랩 인터페이스 동작 과정 ■ 다운[보내는 쪽] 드래그 그랩 인터페이스 시작 (MIME 등록)

■ 모션[받는 쪽] 데이터 사용 여부 검증 (MIME 검증)

■ 업[받는 쪽] 데이터 수신

실제 데이터 전송 과정 ■ 받는 쪽에서 파이프 생성 후, 보내는 쪽으로 파일디스크립터 전송 (SCM_RIGHT)

■ 보내는 쪽에서 해당 파일디스크립터로 데이터 전송

CLIENT (receiver) WAYLAND/WESTON CLIENT (sender)

target(mime) accept(mime)

offer(mime)

start_drag(source)

offer(mime)

focus

motion

button

: drag grab

change drag surface :

send(mime, fd) receive(mime, fd) write data to fd :

drop

: change drag grab

: data_source

: data_device

: data_offer

: data_device

: data_offer

: data_offer

: data_source

: data_source

셀렉션 동작 과정 SET_SELECTION 보내는 쪽에서 데이터 등록

키보드 포커스, 윈도우 활성화, … 받는 쪽으로 데이터 알림

실제 데이터 전송 과정은 드래그 & 드롭과 동일 ■ 앞에서는 드롭에 의해 데이터 전송이 이루어졌지만 셀렉션은 임의의 방식 사용

■ Control-V, …

클립보드 윈도우 서버가 데이터를 미리 전송받아 보관

CLIENT WAYLAND/WESTON CLIENT

offer(mime)

set_selection(source)

offer(mime)

send(mime, fd) receive(mime, fd) write data to fd :

: data_source

: data_device

: data_offer

: data_offer : data_source

keyboard : focus : activate : …

clipboard

receive(mime, fd)

: data_offer

터미널에서의 셀렉션 사용 방식 기본적인 터미널 동작 방식 PTY 를 이용한 쉘 에뮬레이션

파이프 대신 쉘과의 통신에 사용되는 파일디스크립터 전송

TERMINAL (receiver) /bin/bash WAYLAND/WESTON

LINUX KERNEL

KEYBOARD

EVDEV

wl_keyboard

wl_surface

stdin

stdout

FB/OPENGL

GPU

TERMINAL (sender)

write data to fd :

가상 키보드 동작 과정 키보드 클라이언트 INPUT_PANEL_SURFACE 생성 & 등록

■ 화면 상에 뜨는 가상 키보드 서페이스 관리

일반 클라이언트 TEXT_INPUT 활성화 요청

키 입력 전달 전달 과정 ■ 키보드 클라이언트(input_method_context) 윈도우 서버 일반 클라이언트(text_input)

KEYBOARD WAYLAND/WESTON

input_method

CLIENT input_panel

input_method_ context

text_input_manager

text_input

wl_keyboard

LINUX KERNEL

KEYBOARD

EVDEV

grab

: key : modifier : cancel wl_pointer

wl_touch

input_panel_ surface

한글 입력 동작 과정 일반 클라이언트 TEXT_INPUT 활성화 요청

키보드 클라이언트 INPUT_METHOD 그랩 인터페이스 요청 ■ 일반 클라이언트가 포커스되어있지만, 이벤트는 키보드 클라이언트로 전달

키 입력 전달 과정 ■ 키보드 이벤트 키보드 클라이언트 윈도우 서버 일반 클라이언트

KEYBOARD WAYLAND/WESTON

input_method

CLIENT

input_method_ context

text_input_manager

text_input

wl_keyboard

LINUX KERNEL

KEYBOARD

EVDEV

grab

: key : modifier : cancel

텍스트 모드 vs 그래픽 모드 텍스트 기반 가상 터미널

■ 커널에서 현재 활성화된 가상 터미널의 입출력 이벤트 관리

그래픽 기반 윈도우 서버 ■ 윈도우 서버에서 장치 직접 접근/관리

VT 시그널 처리 문제 (activate/deacitvate) ■ 윈도우 서버가 적절히 VT 시그널을 처리 못할 때는 전체 시스템 다운

session1 session2 session#

VT1 VT2 VT#

event0

event1

card0

card1

session1 session2 session#

VT1 VT2 VT#

event0

event1

card0

card1

: only VT signals

SYSTEMD/LOGIND MultiSeat 지원 가능 (다양한 시나리오 지원 가능)

파일디스크립터 통합 관리 (SCM_RIGHT 소켓 확장 기능 이용)

세션에서 문제 발생시 LOGIND 에서 해결 가능

KMS/DRM 기반 가상 터미널 에뮬레이터 (kmscon) ■ 커널 기반 가상 터미널 대체

session1 session2 session#

event0

event1

card0

card1

logind :