우선 wayland에 관한 설명은 다음 글을(Wayland에 대한 간단한 소개) 참고하자.
QtWayland 모듈은 Wayland의 기능을 사용할 수 있도록 API를 제공한다. 다만 아직은 maintenance tool로 제공되진 않고 직접 컴파일 및 설치해야한다.
QtWayland는 클라이언트와 서버 측으로 구분되는데, 클라이언트 측은 wayland 플랫폼 플러그인(QPA)이며 Wayland 클라이언트로 Qt 응용 프로그램을 실행한다. 서버 측은 Qt Wayland Compositor API이며 이를 이용하여 사용자가 Wayland 컴포지터를 개발할 수 있다. C++ API뿐만 아니라 Qml로도 컴포지터를 개발할 수 있도록 하였는데 C++및 Qml로 개발된 몇가지 컴포지터 예제를 제공한다.
이글에선 qtwayland 컴포지터 예제중 Qml로된 ivi-compositor를 테스트 해보고자 한다.
ivi는 무엇?
자동차 인포테인먼트 (in-vehicle infotainment) 시스템을 말한다. infotainment는 information 과 entertainment의 합성어인데 즉, 차안에서 정보와 오락등 편의를 제공하는 시스템을 통칭해서 그렇게 부른다. 커넥티드카, 자율주행등등과 더불어 자동차 분야에서 점차 더발전하게될 디지털 콕핏을 구현한다.
ivi-compositor는 Weston 레퍼런스구현의 ivi-shell을 사용하여 셸 프로토콜이 ivi-application.xml인 surface를 관리하는데, IVI-System 특유의 요구사항을 구현하기위한 컴포지터로 이해하면된다. 아래표는 IVI-System과와 범용적이고 일반적인 시스템을 비교한 것이다.
|
Personal Computer |
Tablet/ Smartphone |
IVI-System |
Window 사이즈 및 위치 |
자유로움 |
고정되거나 제한적 |
고정됨 |
Window 관리 |
사용자 |
전용 관리자 또는 사용자 제한적임 |
전용 관리자 |
계층적 개념 |
요구됨 |
요구됨 |
요구됨 |
멀티 스크린 / 입력장치 |
복제 / 확장 |
|
별도 관리 |
아직까진 IVI-System에서의 window사용성은 제한적인 부분이 많음을 알 수 있다.
참고로 Wayland IVI Extension 은 GENIVI 프로젝트의 일부이며 아래 주소를 방문하면 자세한 정보를 얻을 수 있다.
https://at.projects.genivi.org/wiki/display/WIE/Wayland+IVI+Extension+Home
아래 화면은 ivi-compositor를 실행한 화면이다. 좌측 영역은 ivi-application 프로토콜로 1337이라는 id의 ivi 전용 surface를 위한 것이고 오른쪽은 일반 surface를 위한 영역이다. 이것은 어떤 특정 상황에 따라 특정 surface를 제어한다는 것을 의미한다. 위에 설명한 IVI-System 특성을 이해 할 수 있다.
사실 ivi-compositor는 아주 단순한 예제에 불과하다. 실제로는 멀티 스크린, layer, surface, 그리고 여러가지 요구사항에 따라 복잡해 질 것이다.
그러면 이제 QtWayland를 컴파일 해보고 ivi-compositor를 실행해 보자.
Ubuntu 16.04에서 Qt5.9.4를 설치하였으며 아래의 패키지들이 필요할 수 있다.
QtWayland 소스코드를 준비. (설치된 Qt버전에 맞는 브랜치로 체크아웃.)
qmake 및 빌드.
ivi-compositor 예제는 examples 디렉토리에 있다.
ivi-comporsitor디렉토리에서 qmake하고 빌드한다.
빌드가 완료되면 다음과 같이 ivi-compositor를 실행할 수 있다. (아래 옵션은 x기반의 ubuntu를 위한 옵션이다)
그다음 Qt 응용프로그램을 클라이언트로 실행하기위해 -platform wayland 옵션으로 실행시킨다. 그러면 아래 화면과 같이 ivi surface를 위해 별다른 작업을 해주지 않았으므로 오른쪽 영역에 표시된다.
클라이언트 응용프로그램을 종료하고 QT_WAYLAND_SHELL_INTEGRATION 및 QT_IVI_SURFACE_ID 환경변수를 설정하고 다시 실행시켜본다. QT_WAYLAND_SHELL_INTEGRATION는 ivi-shell을 설정하고 QT_IVI_SURFACE_ID에는 1337을 설정해준다.
이를테면 아래 화면과 같다.
위와 같이 환경변수 설정 후 클라이언트 응용프로그램을 실행시켜보면 ivi-compositor의 왼쪽 영역에 나타나는 것을 확인 할 수 있다.
QtWayland API와 제공되는 예제를 이용하여 멀티 윈도우, 프로세스가 요구되는 임베디드 시스템에서 쉽게 구현가능하다.