본문 바로가기
오픈소스 읽기 (OLD)/데스크탑환경 - weston (wayland)

번외. Wayland 프로토콜

by 커널패닉 2020. 8. 4.
반응형

Wayland에서는 서버(컴포지터/쉘)과 클라이언트(어플리케이션)이 프로토콜을 기반으로 통신한다. 프로토콜은 Wayland에서 기본으로 제공하는 프로토콜과, xdg(freedesktop)에서 제공하는 de facto 프로토콜, 그리고 서드파티에서 정의한 프로토콜로 구분된다. 아래는 Wayland에서 기본으로 제공하는 프로토콜이다.

참고자료: wayland.freedesktop.org/docs/html/apa.html

프로토콜 내용 싱글톤
wl_display 가장 중요한 객체.
클라이언트 측면에서는 해당 객체를 통해 서버와 연결(cf. wl_display_connect)을 형성할 수 있다.
서버 측면에서는 wl_display가 wl_compositor를 소유하고 있다. 따라서 클라이언트에서 들어오는 데이터를 wl_compositor로 전달한다. 또한 내부 이벤트 큐를 통해 메인 이벤트 루프를 관리한다. (cf. wl_display_run)
O
wl_registry wl_registry를 통해 클라이언트 오브젝트를 서버에 바인딩.
예를 들어, 서버에 있는 wl_compositor에 접근하기 위해서는 wl_registry_bind 함수를 통해 서버에 있는 wl_compositor를 클라이언트에서 생성한 오브젝트에 연결해야 한다.
O
wl_callback 클라이언트에서 서버의 특정 동작이 완료되면 호출. X
wl_compositor 여러 surface 객체들을 병합(컴포지팅)하여 하나의 output으로 출력 O
wl_shm_pool 서버-클라이언트 간 공유 메모리 버퍼를 열어, 데이터 공유 지원. wl_shm_pool은 여러개 생성할 수 있다. X
wl_shm 공유 메모리를 지원
shm pool을 생성하고, 해당 메모리 버퍼의 포멧을 설정할 수 있다.
O
wl_buffer wl_surface의 데이터를 관리
wl_buffer를 통해wl_shm_pool 버퍼에 접근 가능하다.
X
wl_data_offer wl_data_offer를 통해, 다른 클라이언트로부터 데이터를 전달받을 수 있다. wl_data_offer가 사용되는 대표적인 예는 drag-and-drop으로, 이를 활용하여 A 어플리케이션에서 파일을 끌어다, B 어플리케이션으로 이동할 수 있다. 이 프로토콜은 데이터를 받는 어플리케이션에서 사용하는 프로토콜이다. X
wl_data_source wl_data_offer와 유사하며, 데이터를 제공하는 어플리케이션에서 사용 X
wl_data_device wl_data_offer와 유사하나, seat 내에서 동작 X
wl_data_device_manager wl_data_device를 관리 O
wl_shell_surface wl_surface, 그 중 데스크탑 어플리케이션의 윈도우를 관리하는 프로토콜.
크기 변환(리사이즈), 이동, 최대화, 최소화 등의 인터페이스를 제공한다.
X
wl_surface 스크린에 표시되는 사각형 영역을 의미.
위치좌표, 픽셀버퍼 등을 소유하고 있다. 즉, 우리가 보는 어플리케이션의 창은 wl_surface를 통해 관리되고 있다.
X
wl_seat 입력 장치의 집합.
일반적으로 데스크탑에서 seat은 마우스와 키보드를 의미한다.
X
wl_pointer 마우스 종류 디바이스 관련 인터페이스 제공.
예를 들어 포인터 이동, 클릭 등의 인터페이스가 있다.
X
wl_keyboard 키보드 종류 디바이스 관련 인터페이스 제공. X
wl_touch 터치종류 디바이스 관련 인터페이스 제공. X
wl_output compositor에 의해 재구성된, 실제로 보이는 사각형 화면.
쉽게 말해 싱글 모니터 시스템에서는 output에 표현된 내용과 화면에 보이는 내용이 일치한다.
X
wl_region 사각형의 영역들을 표현.  
wl_subcompositor subsurface를 컴포지팅.  
wl_subsurface wl_surface를 부모로 하는, 종속적인 surface.  

 

반응형