Getting started wayland on Linux
내용을 정리하기에 앞서 맨 하단의 Refer Site
를 꼭 한번 들르시길 바랍니다. 특히 :star: 표시가 된 사이트는 wayland를 분석하고 사용함에 있어서 큰 도움이 되는 사이트입니다.
What is Wayland
wayland
는 X11
을 대체하기 위한 윈도우 시스템으로 컴포지터와 클라이언트가 통신하기 위한 프로토콜
이다.
wayland
는 라이브러리로써 X11
을 대체하기 위해 weston
과 같은 컴포지터가 필요한데, weston
은 wayland
의 compositor
참조 구현을 의미합니다. compositor
는 윈도우 시스템에서 윈도우들의 함성을 담당함으로써 하나의 장면을 만들어내는 역할을 합니다.
또한 compositor
는 KMS
( Kernel Mode Setting ) 및 evdev
, X application
또는 wayland client
에서 실행되는 독립 실행형 서버 프로세스
인데 이것은 wayland
가 KMS
로 동작하는 시스템에서만 작동한다는 것을 의미합니다.
wayland
는 아래와 같은 입-출력 장치를 지원합니다.
입력장치
- 키보드
- 마우스
- 터치 패드
- 터치 스크린
- 태블릿
출력장치
desktop display
laptop display
mobile display
위 리소스는 모든wayland application
간에 공유되며 wayland compositor
가 입력 이벤트를 전달하고 적절한 위치의 창에 출력하도록 합니다. 출력에 표시하는 모든 어플리케이션 창을 모으는 과정을 compositing
이라고 표현하여 이를 수행하는 소프트웨어가 바로 compositor
입니다.
Wayland의 구성요소
compositor
화면 위에 겹쳐있는 모든 윈도우(client
)들을 하나의 스크린 위에 합쳐서 보여주며 하드웨어 이벤트를 제어하여 scenegraph
를 통해 이벤트를 수신할 client
를 결정하여 이벤트를 직접 전달합니다.
여기서 scenegraph
란 화면에 있는 내용을 의미합니다.
compositor
는 이것들을 이용하여 입력된 이벤트를 어떤 client
에 해당하는 이벤트인지 인지하게 됩니다.
또한 compositor
는 client
로부터 화면 업데이트 요청을 수집하여 화면을 재구성해줍니다. 그런 다음 ioctl을 직접 발행하여 KMS
로 페이지 플립을 예약합니다. ( KMS
로 ioctl을 전달하는 것은 렌더링 결과에 대해 디스플레이 장치에 요청하는 과정을 의미. 어렵게 생각할 필요 없이 화면 렌더링을 위한 display buffer swap
을 행한다로 생각됨 )
client
화면에 나타낼 각각의 창을 의미하며, compositor
로부터 이벤트를 수신하여 ui 업데이트를 수행합니다. 단, x11
과는 달리 client
의 렌더링은 compositor
가 아닌 client
내에서 이루어지며, 업데이트 된 내용을 compositor
에게 전달하여 화면에 나타내줄 것을 요청합니다.
shell
윈도우를 옮기거나 크기를 변경하고 패널이나 배경화면을 보여주는 역할을 수행합니다. 즉, 일반적인 윈도우 환경에서 사용하는 대부분의 기능을 수행합니다.
seat
키보드, 마우스와 같은 입력장치를 관리하는 객체를 의미합니다.
wayland의 주요 객체
wl_display
wayland
의 핵심 글로벌 객체로 싱글톤 객체이다. compositor
에 대한 client
연결 정보를 가지고 있으며, 프록시 역할을 한다. wl_display_connect() 또는 wl_display_connect_to_fd()로 생성된다.
wl_compositor
여러 clinet
내용을 하나의 출력 결과로 결합하는 역할을 합니다.
wl_surface
일반적으로 윈도우라고 부르는 객체를 wayland
에서는 wl_surface
객체로 관리합니다. 즉, 앞서 얘기한 client
의 의미를 가진 객체입니다. 만약 응용프로그램이 새로운 윈도우를 만들고 싶다면 wl_compositor_create_surface( compositor
) 를 통해 새로운 wl_surface
를 생성하여 윈도우를 획득할 수 있다.
wl_registry
wayland
서버에는 모든 client
에서 사용할 수 있는 여러 전역 객체가 있습니다. 이러한 객체는 일반적으로 실제 객체 ( ex : 입력 장치)를 나타내거나 확장 기능을 제공해줍니다.
client
는 서버로부터 레지스트리 객체(wl_registry
)를 받아와 서버의 compositor
와 shell
에 연결(binding) 해줍니다. wl_registry
를 통해 clinet
와 서버 간의 전역 장치 또는 기타 이벤트의 결과가 오가며 wl_registry
는 client
에 전역 객체에 대한 변경 사항을 최신 상태로 유지하는 역할을 합니다.
wl_seat
wayland
가 관리하는 입력장치들의 정보를 가진 객체입니다. 앞서 wayland
에 입력장치로 제공된다고 얘기한 키보드, 포인터 및 터치 장치가 이에 해당합니다. 이 객체는 OS에 입력 장치가 연결될 때 ( start-up ) 혹은 동작( hot-plug)될 때 전역으로 게시됩니다.
wl_shell_surface
wl_surface
가 사용자 인터페이스를 제공하기 위해 사용되는 객체입니다. 최대화, 숨기기, 팝업 창 활성화처리, 이동, 크기 조정과 같은 기능을 제공합니다. wl_shell_surface
객체를 소멸시킬 때, 서버 측에서는 wl_shell_surface
와 연결된 wl_surface
가 소멸될 때 자동으로 소멸시킵니다. 하지만 클라이언트 측에서는 wl_surface
객체를 소멸시키기 전에 wl_shell_surface_destroy()
를 호출하여 해당 객체를 소멸 시켜줘야합니다.
Refer
[^KMS]: 사용자 공간이 아닌 커널 공간에서 디스플레이 해상도와 깊이를 설정하는 방법을 의미
[^Proxy]: 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 의미한다.
Refer Site
wayland
- https://wayland.freedesktop.org/architecture.html
- https://makersweb.net/linux/18747
- https://makersweb.net/linux/5633
- :star: https://nemoux00.wordpress.com/category/tech/wayland
- :star: https://wayland-client-d.dpldocs.info/wayland.client.html
- :star:https://wayland-book.com/
Other Keyword
- KMS : https://en.wikipedia.org/wiki/Mode_setting
- Embedded Display : https://prographics.tistory.com/1
'Graphics And Media > Wayland' 카테고리의 다른 글
Hello wayland - 간단 예제 (0) | 2021.05.29 |
---|