윈도우 매니저 스터디: 3. 윈도우 매니저 입력
-
Upload
nemoux -
Category
Engineering
-
view
338 -
download
6
Transcript of 윈도우 매니저 스터디: 3. 윈도우 매니저 입력
윈도우 매니저 입력 기본 동작 과정 및 포커스 모델
그랩 인터페이스 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 :