QtWayland/ko
QtWayland는 무엇인가?
QtWayland는 Wayland의 기능을 감싸고 있는 Qt 5 모듈이다. QtWayland는 클라이언트와 서버로 분리되어 있다. 클라이언트는 wayland 플랫폼 플러그인이며, Wayland 클라이언트로써 Qt 어플리케이션을 구동하기 위한 방법을 제공한다. 서버는 Qt Wayland 컴포지터 API이고, 사용자가 자신만의 Wayland 컴포지터를 작성하는 것을 허용한다.
Wayland는 무엇인가
Wayland는 클라이언트와 통신하기 위한 컴포지터를 위한 프로토콜이다. 이 프로토콜의 구현은 C 라이브러리로 작성되었다. Wayland 프로젝트 홈페이지 에서 상세 정보를 얻을 수 있다.
어떻게 Qt Wayland를 위한 바이너리를 얻을 수 있을까?
Qt 인스톨러는 불행하게도 Qt Wayland를 위한 바이너리를 포함하지 않는다. 그러나 최신 안정 버전(아래 참고)을 사용하고자 한다면 소스로 부터 여러분 스스로 이것을 빌드 할 수 있다.
리눅스 배포본에서 제공된 Qt를 사용한다면 Qt Wayland를 위한 분리된 패키지가 있다. 예를 들면, qt5-wayland (Arch Linux) 또는 2개로 분리된 패키지(qtwaylandclient5 와 qtwaylandcompositor5-dev (우분투 17.10)). distros가 Qt의 구 버전을 전달할 수 있다는 것을 알아두고, 컴포지터 API는 Qt 5.8에서 안정적으로 처음으로 릴리즈 되었다.
어디서 QtWayland의 코드를 찾을 수 있을까?
어떻게 QtWayland를 빌드하나?
우분투 14.04
우분투 14.04는 필요한 의존성을 모두 포함한다, 그래서 Wayland를 빌드하기 위해서 특별히 필요한 것은 없다.
다음의 패키지가 필요하다 (리스트는 불완전할 수 있음)
- libwayland-dev
- libwayland-egl1-mesa
- libwayland-server0
- libgles2-mesa-dev
- libxkbcommon-dev
Qt 의존성
컴포지터 API를 위해 Qt5.8 이상이 필요하다. 최소로 필요한 모듈은 다음과 같다:
qtbase
qtdeclarative
QtWayland 모듈 빌드하기
Qt 5의 빌드 환경을 구축한다음에, 최신 QtWayland 모듈을 pull 하고 "qmake"로 설정합니다. 여기서 Qt 5와 함께 얻은 qmake 버전을 사용하고 있는지 확인하여야 한다.
git clone git://code.qt.io/qt/qtwayland.git
cd qtwayland
git checkout v5.10.0 # 당신이 사용하고 있는 qt 버전에 맞게 변경
qmake
make
make install
어떻게 QtWayland를 사용하나?
Qt 어플리케이션을 Wayland 클라이언트로 구동시키기
QtWayland 모듈을 빌드할 때, wayland를 위한 새로운 플랫폼 플러그인을 얻어야 한다. 이것을 사용하기 위해 첫 번째로 Wayland 컴포지터가 구동중이어야 한다. 이것은 Wayland 프로젝트에서 제공되는 Weston 레퍼런스 컴포지터 이거나 QtWayland에서 제공되는 Qt 예제 컴포지터일 수 있다. 어느 것이든 상관없이 당신이 작성한 GUI 어플리케이션이 wayland 클라이언트로 구동하기 위해서 어플리케이션 개발자로써 해야할 것은 올바른 플랫폼 플러그인을 사용할 수 있도록 어플리케이션에게 말해주는 것이다:
./application -platform wayland
or:
export QT_QPA_PLATFORM=wayland
./application
Qt5와 함께 자신만의 Wayland 컴포터지 생성하고 구동하기
예제 컴포지터 구동하기
QtWayland 모듈은 어떻게 Qt Wayland 컴포지터 API가 동작하는지를 보여주는 많은 예제 컴포지터를 제공한다. 이러한 것들은 QtWayland 모듈의 예제 폴더에 빌드된다. 명시적으로 그것들을 빌드하기 위해서 필요한 것은 다음과 같다(어떻게 Qt를 설정했느냐에 따라 다름):
cd qtwayland
make sub-examples
이 예제들은 Wayland의 서버 측을 나타내므로, wayland 플랫폼 플러그인을 사용하지 않고 실행해야 하는 플랫폼을 선택한다. 일반적으로 이것은 eglfs, kms가 될 것이다. 또는 X11 xcb에서 구동하길 원할 것이다. wayland 플랫폼 플러그인 상에서 컴포지터를 동작시킨다면 중첩된 컴포지터를 구동시킬 수도 있다.
X11에서 pure-qml 컴포지터를 구동하기 원한다면, 다음과 같이 구동할 것이다:
cd qtwayland/examples/wayland/pure-qml
./pure-qml -platform xcb
Wayland 컴포지터가 동작중이면, Wayland 클라이언트에 연결과 디스플레이할 수 있다.
나만의 컴포지터 만들기
컴포지터는 QML을 사용해서 구현할 수 있으며, 또한 저수준 제어를 원한다면 C++ API를 사용할 수 있다.
- QML 기반: minimal-qml 과 pure-qml을 살펴보도록 하자. Tutorial, talk
- C++ 기반: minimal-cpp 과 qwindow-compositor 예제를 살펴보도록 하자.
프로젝트 파일은 컴포지터 모듈을 사용할 필요가 있다 (예를 들어, .pro 파일에 QT += waylandcompositor 를 추가).
문제 해결
libGL 링커 이슈
libGL 및 정의되지 않은 참조(undefined references)와 관련된 링커 에러가 발생하면 Qt5를 컴파일하고 자체 컴파일된 mesa와 링크해야 할 수도 있다. 어쩌면 mesa가 컴파일되고 설치 되었기 때문에 설정(configure) 스크립는 사용할 Open의 버전을 명시적으로 정의할 필요가 있을 것이다: ./configure -opengl es2