SlideShare a Scribd company logo
1 of 17
Download to read offline
nemoux00@gmail.com 
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 
kernel 
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 :
윈도우 매니저 스터디: 3. 윈도우 매니저 입력

More Related Content

What's hot

NDC16 - 화성에서 온 사업팀 금성에서 온 개발팀 : 성공적인 라이브 서비스를 위해 필요한 것들
NDC16 - 화성에서 온 사업팀 금성에서 온 개발팀 : 성공적인 라이브 서비스를 위해 필요한 것들NDC16 - 화성에서 온 사업팀 금성에서 온 개발팀 : 성공적인 라이브 서비스를 위해 필요한 것들
NDC16 - 화성에서 온 사업팀 금성에서 온 개발팀 : 성공적인 라이브 서비스를 위해 필요한 것들Young Keun Choe
 
UI드자이너의 짧은 언리얼 UMG 사용기
UI드자이너의 짧은 언리얼 UMG 사용기UI드자이너의 짧은 언리얼 UMG 사용기
UI드자이너의 짧은 언리얼 UMG 사용기Hong-Gi Joe
 
웹프로그래밍 팀프로젝트 중간발표
웹프로그래밍 팀프로젝트 중간발표웹프로그래밍 팀프로젝트 중간발표
웹프로그래밍 팀프로젝트 중간발표Seong Heum Park
 
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)Nicolas Defay
 
Fosdem 18: Securing embedded Systems using Virtualization
Fosdem 18: Securing embedded Systems using VirtualizationFosdem 18: Securing embedded Systems using Virtualization
Fosdem 18: Securing embedded Systems using VirtualizationThe Linux Foundation
 
Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]GDSC UofT Mississauga
 
XPDDS18: Design and Implementation of Automotive: Virtualization Based on Xen...
XPDDS18: Design and Implementation of Automotive: Virtualization Based on Xen...XPDDS18: Design and Implementation of Automotive: Virtualization Based on Xen...
XPDDS18: Design and Implementation of Automotive: Virtualization Based on Xen...The Linux Foundation
 
Skia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsKyungmin Lee
 
Use Symfony Messenger Component and CQRS!
Use Symfony Messenger Component and CQRS!Use Symfony Messenger Component and CQRS!
Use Symfony Messenger Component and CQRS!Žilvinas Kuusas
 
Debian or Yocto Project? Which is the best for your Embedded Linux project?
Debian or Yocto Project? Which is the best for your Embedded Linux project?Debian or Yocto Project? Which is the best for your Embedded Linux project?
Debian or Yocto Project? Which is the best for your Embedded Linux project?Chris Simmonds
 
Overview of Android binder IPC implementation
Overview of Android binder IPC implementationOverview of Android binder IPC implementation
Overview of Android binder IPC implementationChethan Pchethan
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
명나리, 에버플래닛 만들던 이야기, 2013
명나리, 에버플래닛 만들던 이야기, 2013명나리, 에버플래닛 만들던 이야기, 2013
명나리, 에버플래닛 만들던 이야기, 2013나리 명
 
Android Camera Architecture
Android Camera ArchitectureAndroid Camera Architecture
Android Camera ArchitecturePicker Weng
 
RunX: deploy real-time OSes as containers at the edge
RunX: deploy real-time OSes as containers at the edgeRunX: deploy real-time OSes as containers at the edge
RunX: deploy real-time OSes as containers at the edgeStefano Stabellini
 

What's hot (20)

NDC16 - 화성에서 온 사업팀 금성에서 온 개발팀 : 성공적인 라이브 서비스를 위해 필요한 것들
NDC16 - 화성에서 온 사업팀 금성에서 온 개발팀 : 성공적인 라이브 서비스를 위해 필요한 것들NDC16 - 화성에서 온 사업팀 금성에서 온 개발팀 : 성공적인 라이브 서비스를 위해 필요한 것들
NDC16 - 화성에서 온 사업팀 금성에서 온 개발팀 : 성공적인 라이브 서비스를 위해 필요한 것들
 
Flutter
FlutterFlutter
Flutter
 
UI드자이너의 짧은 언리얼 UMG 사용기
UI드자이너의 짧은 언리얼 UMG 사용기UI드자이너의 짧은 언리얼 UMG 사용기
UI드자이너의 짧은 언리얼 UMG 사용기
 
웹프로그래밍 팀프로젝트 중간발표
웹프로그래밍 팀프로젝트 중간발표웹프로그래밍 팀프로젝트 중간발표
웹프로그래밍 팀프로젝트 중간발표
 
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
Optimiser son environnement de développement PHP (Tuto NetBeans v4.4)
 
Fosdem 18: Securing embedded Systems using Virtualization
Fosdem 18: Securing embedded Systems using VirtualizationFosdem 18: Securing embedded Systems using Virtualization
Fosdem 18: Securing embedded Systems using Virtualization
 
OpenGL SC 2.0 Quick Reference
OpenGL SC 2.0 Quick ReferenceOpenGL SC 2.0 Quick Reference
OpenGL SC 2.0 Quick Reference
 
Introduction to Android Window System
Introduction to Android Window SystemIntroduction to Android Window System
Introduction to Android Window System
 
Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]
 
XPDDS18: Design and Implementation of Automotive: Virtualization Based on Xen...
XPDDS18: Design and Implementation of Automotive: Virtualization Based on Xen...XPDDS18: Design and Implementation of Automotive: Virtualization Based on Xen...
XPDDS18: Design and Implementation of Automotive: Virtualization Based on Xen...
 
Skia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics Essentials
 
Use Symfony Messenger Component and CQRS!
Use Symfony Messenger Component and CQRS!Use Symfony Messenger Component and CQRS!
Use Symfony Messenger Component and CQRS!
 
Debian or Yocto Project? Which is the best for your Embedded Linux project?
Debian or Yocto Project? Which is the best for your Embedded Linux project?Debian or Yocto Project? Which is the best for your Embedded Linux project?
Debian or Yocto Project? Which is the best for your Embedded Linux project?
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
 
Overview of Android binder IPC implementation
Overview of Android binder IPC implementationOverview of Android binder IPC implementation
Overview of Android binder IPC implementation
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
명나리, 에버플래닛 만들던 이야기, 2013
명나리, 에버플래닛 만들던 이야기, 2013명나리, 에버플래닛 만들던 이야기, 2013
명나리, 에버플래닛 만들던 이야기, 2013
 
Android Camera Architecture
Android Camera ArchitectureAndroid Camera Architecture
Android Camera Architecture
 
RunX: deploy real-time OSes as containers at the edge
RunX: deploy real-time OSes as containers at the edgeRunX: deploy real-time OSes as containers at the edge
RunX: deploy real-time OSes as containers at the edge
 

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

이벤트 드리븐.pptx
이벤트 드리븐.pptx이벤트 드리븐.pptx
이벤트 드리븐.pptxMUUMUMUMU
 
Mobile UX for Windows Mobile
Mobile UX for Windows MobileMobile UX for Windows Mobile
Mobile UX for Windows MobileSeo Jinho
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunFactory Inc.
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)Sang Don Kim
 
[방송통신대 컴퓨터과학과] Visual C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] Visual C++ 프로그래밍 과제물 작성[방송통신대 컴퓨터과학과] Visual C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] Visual C++ 프로그래밍 과제물 작성Lee Sang-Ho
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3Wooseok Seo
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
From event storming to spring cloud implementation
From event storming to spring cloud implementationFrom event storming to spring cloud implementation
From event storming to spring cloud implementationuEngine Solutions
 

Similar to 윈도우 매니저 스터디: 3. 윈도우 매니저 입력 (12)

jhj port.
jhj port.jhj port.
jhj port.
 
이벤트 드리븐.pptx
이벤트 드리븐.pptx이벤트 드리븐.pptx
이벤트 드리븐.pptx
 
Designing Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom TabletDesigning Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom Tablet
 
Hacosa j query 8th
Hacosa j query 8thHacosa j query 8th
Hacosa j query 8th
 
Mobile UX for Windows Mobile
Mobile UX for Windows MobileMobile UX for Windows Mobile
Mobile UX for Windows Mobile
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
 
Unity시작하기
Unity시작하기Unity시작하기
Unity시작하기
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
 
[방송통신대 컴퓨터과학과] Visual C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] Visual C++ 프로그래밍 과제물 작성[방송통신대 컴퓨터과학과] Visual C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] Visual C++ 프로그래밍 과제물 작성
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
From event storming to spring cloud implementation
From event storming to spring cloud implementationFrom event storming to spring cloud implementation
From event storming to spring cloud implementation
 

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

  • 2. 윈도우 매니저 입력 기본 동작 과정 및 포커스 모델 그랩 인터페이스 Default/Move/Resize 데이터 인터페이스 Drag & Drop Selection 가상 키보드/한글 입력 동작 과정 세션 관리
  • 3. 제공하는 데이터 종류에 따른 분류 이벤트 장치 : 이벤트 전달 포인트 장치 : 모션과 이벤트 전달 비전 장치 : 모션과 이벤트, 그리고 제스처(모양)까지 전달 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
  • 4. 입력 이벤트 수집 (장치  커널  컴포지터) 입력 이벤트 전달 (컴포지터  클라이언트) 윈도우 매니저에 바인딩되어있는 이벤트 우선 처리 포커스(surface)를 소유 중인 클라이언트에게 해당 이벤트 전달 CLIENT WAYLAND/WESTON (screen) SURFACE CLIENT SURFACE wl_keyboard wl_pointer seat0 touch pointer keyboard pointer keyboard
  • 5. 포커스(focus) 모델 Click to Focus  마우스(혹은 터치)로 클릭 Focus Follows Mouse  마우스 포인터의 현재 위치 이용 Sloppy Focus  패널이 아닌 윈도우만 포커스 그랩(grab) 인터페이스 마우스 버튼 (or 터치) 다운 + 모션 … + 업 이벤트 전달 방식 윈도우 이동/크기 변환/…, 드래그&드롭, … 일반 사용자에게 익숙한 인터페이스 방식 SCREEN WINDOW WINDOW press motion release
  • 6. 초록색 창으로 키보드 입력을 전달하기 위한 과정 마우스 이동  마우스 포커스 변경 마우스 클릭  윈도우 우선순위 변경, 키보드 포커스 변경 키보드 입력  wl_keyboard 프로토콜의 key 이벤트 전달 SCREEN WINDOW SCREEN WINDOW WINDOW WINDOW
  • 7. 키보드/마우스/멀티터치 지원 EVDEV/MTDEV 프로토콜 사용 그랩 인터페이스 (default, move, resize, …) 지원 CLIENT WAYLAND/WESTON kernel 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
  • 8. 그랩 인터페이스 지원 기본(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
  • 9. 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
  • 10. 드래그 & 드롭 동작 과정 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
  • 11. 셀렉션 동작 과정 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
  • 12. 터미널에서의 셀렉션 사용 방식 기본적인 터미널 동작 방식  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 :
  • 13. 가상 키보드 동작 과정 키보드 클라이언트  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
  • 14. 한글 입력 동작 과정 일반 클라이언트  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
  • 15. 텍스트 모드 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
  • 16. SYSTEMD/LOGIND MultiSeat 지원 가능 (다양한 시나리오 지원 가능) 파일디스크립터 통합 관리 (SCM_RIGHT 소켓 확장 기능 이용) 세션에서 문제 발생시 LOGIND 에서 해결 가능 KMS/DRM 기반 가상 터미널 에뮬레이터 (kmscon) ■커널 기반 가상 터미널 대체 session1 session2 session# event0 event1 … card0 card1 … logind :