Graphics And Media/Wayland

Getting Started Wayland !

kahuz 2021. 5. 8. 18:14

Getting started wayland on Linux

내용을 정리하기에 앞서 맨 하단의 Refer Site 를 꼭 한번 들르시길 바랍니다. 특히 :star: 표시가 된 사이트는 wayland를 분석하고 사용함에 있어서 큰 도움이 되는 사이트입니다.

What is Wayland

waylandX11을 대체하기 위한 윈도우 시스템으로 컴포지터와 클라이언트가 통신하기 위한 프로토콜이다.

wayland는 라이브러리로써 X11을 대체하기 위해 weston과 같은 컴포지터가 필요한데, westonwaylandcompositor 참조 구현을 의미합니다. compositor는 윈도우 시스템에서 윈도우들의 함성을 담당함으로써 하나의 장면을 만들어내는 역할을 합니다.

또한 compositorKMS( Kernel Mode Setting ) 및 evdev, X application 또는 wayland client에서 실행되는 독립 실행형 서버 프로세스인데 이것은 waylandKMS로 동작하는 시스템에서만 작동한다는 것을 의미합니다.

wayland는 아래와 같은 입-출력 장치를 지원합니다.

  • 입력장치

    • 키보드
    • 마우스
    • 터치 패드
    • 터치 스크린
    • 태블릿
  • 출력장치

    • desktop display

    • laptop display

    • mobile display

위 리소스는 모든wayland application 간에 공유되며 wayland compositor가 입력 이벤트를 전달하고 적절한 위치의 창에 출력하도록 합니다. 출력에 표시하는 모든 어플리케이션 창을 모으는 과정을 compositing이라고 표현하여 이를 수행하는 소프트웨어가 바로 compositor 입니다.

Wayland의 구성요소

compositor

화면 위에 겹쳐있는 모든 윈도우(client)들을 하나의 스크린 위에 합쳐서 보여주며 하드웨어 이벤트를 제어하여 scenegraph를 통해 이벤트를 수신할 client를 결정하여 이벤트를 직접 전달합니다.

여기서 scenegraph 란 화면에 있는 내용을 의미합니다.

compositor는 이것들을 이용하여 입력된 이벤트를 어떤 client에 해당하는 이벤트인지 인지하게 됩니다.

또한 compositorclient로부터 화면 업데이트 요청을 수집하여 화면을 재구성해줍니다. 그런 다음 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)를 받아와 서버의 compositorshell에 연결(binding) 해줍니다. wl_registry를 통해 clinet와 서버 간의 전역 장치 또는 기타 이벤트의 결과가 오가며 wl_registryclient에 전역 객체에 대한 변경 사항을 최신 상태로 유지하는 역할을 합니다.

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

Other Keyword

'Graphics And Media > Wayland' 카테고리의 다른 글

Hello wayland - 간단 예제  (0) 2021.05.29