이 페이지에서

Qt Wayland Compositor

Qt Wayland Compositor 는 Wayland 프로토콜을 기반으로 한 사용자 지정 디스플레이 서버 개발을 위해 편리하고 강력한 QML 및 C++ API를 제공하는 모듈입니다. 흔히 컴포지터라고도 불리는 이 디스플레이 서버는 Wayland 프로토콜을 지원하는 클라이언트 애플리케이션의 콘텐츠를 표시합니다.

Wayland의 설계 철학은 핵심 프로토콜을 단순하고 최소한으로 유지하는 것입니다. 이를 통해 개발자는 사용 사례에 특화된 확장 기능을 통해 이 핵심 프로토콜을 확장할 수 있습니다. Qt Wayland Compositor 는 기본적으로 많은 일반적인 확장 기능을 지원하며, 새로운 사용자 정의 확장 기능을 생성할 수 있는 API도 제공합니다.

일반적으로 Qt Wayland Compositor 로 작성된 컴포지터는 더 큰 애플리케이션 관리자 프로세스 내의 하위 시스템이 됩니다. Qt Wayland Compositor 는 클라이언트와 통신하고 화면에 콘텐츠를 표시하기 위한 API를 제공합니다. Qt Qml API에는 Qt의 다른 부분과 쉽게 통합되는 고수준 API가 포함되어 있어, Qt Quick 를 통해 편리한 애니메이션, 효과 및 UI를 구현할 수 있습니다. 더 낮은 수준의 접근이 필요한 경우 사용할 수 있는 C++ API도 있습니다.

애플리케이션 관리자는 일반적으로 애플리케이션 수명 주기, 가상 키보드 입력, 보안, 프로세스 간 통신(IPC)과 같은 추가 기능을 구현합니다. Qt는 다른 모듈에서 애플리케이션 관리자의 나머지 부분을 개발하는 데 사용할 수 있는 API를 제공합니다. 실제로 Qt는 Qt Application ManagerQt Wayland Compositor 을 기반으로 한 상위 수준의 QML API를 포함하여 사용자 정의 컴포지터를 구현할 수 있는 완전한 애플리케이션 관리자인 Wayland를 제공합니다.

Wayland에 대한 자세한 내용은 Wayland와 Qt를 참조하십시오.

의 기능 Qt Wayland Compositor

Qt Wayland Compositor 에는 컴포지터를 생성하는 데 필요한 기능이 포함되어 있습니다:

  • Qt Quick 의 모든 기능과 완벽하게 통합된, 클라이언트 콘텐츠를 표시하고 조작하기 위한 QML API.
  • 저수준 액세스 및 제어를 위한 C++ API.
  • XDG Shell 및 IVI Application을 포함한 일반적인 확장 기능에 대한 지원.
  • 사용자 정의 확장 기능에 대한 지원을 쉽게 확장할 수 있는 API.

환경 변수 및 명령줄 인수

다음은 Qt Wayland Compositor 에서 인식하는 환경 변수 및 명령줄 인자의 일부 목록입니다:

  • 환경 변수:
    • QT_WAYLAND_HARDWARE_INTEGRATION 컴포지터가 제공해야 할 클라이언트 버퍼(하드웨어) 통합 방식을 정의합니다. 세미콜론으로 구분된 목록을 허용합니다(예: "linux-dmabuf-unstable-v1;wayland-egl").
    • QT_WAYLAND_CLIENT_BUFFER_INTEGRATION 컴포지터에 대한 QT_WAYLAND_HARDWARE_INTEGRATION(이 변수가 우선 적용됨)과 동일하지만, 클라이언트에서도 평가됩니다. 클라이언트는 하나의 통합 방식만 허용합니다.
    • QT_IVI_SURFACE_ID IVI-컴포지터 환경에서 클라이언트의 표면에 대한 IVI 표면 ID를 지정합니다.
  • 명령줄 인수:
    • --wayland-socket-name <name> 클라이언트와의 통신에 사용되는 기본 소켓 이름을 재정의합니다.

Wayland 컴포지터 실행

사용할 수 없는 플랫폼별 기능에 의존하지 않는 한, 컴포지터를 X11 기반 데스크톱 시스템에서 쉽게 테스트할 수 있습니다. 이는 개발 과정에서 디버깅을 간소화하고 새로운 기능을 시험해 볼 때 효율적인 피드백을 얻는 데 유용할 수 있습니다.

Qt Wayland는 클라이언트와 서버 간 그래픽 버퍼를 공유하기 위한 여러 백엔드를 지원합니다. 주요 백엔드는 다음과 같습니다:

  • wayland-egl: 이는 기본 백엔드이며, 가능한 한 이 백엔드를 우선적으로 사용해야 합니다. 이 기능이 작동하려면 시스템의 OpenGL 드라이버에서 이를 지원해야 합니다.

QT_WAYLAND_HARDWARE_INTEGRATION 환경 변수를 설정하여 다른 백엔드를 선택할 수 있습니다.

참고: Qt Wayland Compositor 가 클라이언트 버퍼 백엔드를 초기화할 수 없는경우 , 안전 장치로 "공유 메모리" 백엔드( wl_shm 기반)를 사용하게 됩니다. 이 백엔드는 그래픽 버퍼를 공유하기 위해 CPU 메모리를 사용하며, 필요에 따라 데이터를 앞뒤로 복사합니다. 이는 특히 고밀도 화면이나 그래픽 하드웨어 사양이 제한적인 환경에서 성능에 영향을 미칩니다. Qt Wayland Compositor 관련 성능 문제를 조사할 때는 먼저 올바른 클라이언트 버퍼 통합 방식이 사용되고 있는지 확인하십시오.

또한 시스템에서 이미 Wayland 컴포지터를 실행 중인 경우, XDG_RUNTIME_DIR 파일을 다른 위치로 지정해야 할 수도 있다는 점을 유의하십시오. 이 경우 컴포지터를 시작할 때 경고 메시지가 표시됩니다. XDG_RUNTIME_DIR 파일은 아직 사용 중이 아닌, 접근 가능한 임의의 위치를 가리키도록 설정할 수 있습니다.

예를 들어, ` linux-dmabuf-v1 ` 백엔드를 사용하여 ` fancy-compositor ` 예제를 실행하려면 다음 명령줄을 사용할 수 있습니다:

% XDG_RUNTIME_DIR=~/my_temporary_runtime QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_HARDWARE_INTEGRATION=linux-dmabuf-v1 ./fancy-compositor

이후 클라이언트에서도 동일한 XDG_RUNTIME_DIR 을 설정하고 명령줄 인수로 "-platform wayland"를 전달하여 컴포지터에서 클라이언트를 실행할 수 있습니다. 또한 QT_QPA_PLATFORM 환경 변수를 사용하여 클라이언트 측에서 Wayland QPA 플러그인을 선택할 수도 있습니다.

참고: 대부분의 경우 , 클라이언트는 서버에 연결될 때 서버와 동일한 OpenGL로 자동 조정됩니다. 그러나 특정 드라이버에서 EGL 백엔드로 실행할 때는 초기화가 더 일찍 이루어져야 합니다. 이러한 문제가 발생하면 대신 "-platform wayland-egl"을 전달하여 클라이언트를 EGL로 사전 초기화할 수 있습니다.

문제 해결

때로는 복잡한 컴포지터를 개발할 때, 추가 조사가 필요한 문제가 발생할 수 있습니다.

WAYLAND_DEBUG 환경 변수를 "1"로 설정하면 Wayland 라이브러리 자체에 대한 로그 출력이 활성화됩니다. 이는 예를 들어 Wayland 프로토콜에 대한 사용자 정의 확장을 디버깅할 때 매우 유용할 수 있습니다. 이를 통해 클라이언트와 서버 간에 전달되는 정확한 이벤트와 요청은 물론, 이에 대한 타임스탬프도 확인할 수 있습니다.

또한, Qt에는 추가 로깅을 활성화하기 위한 qt.waylandcompositor.* 및 qt.qpa.wayland.* 로깅 범주가 있습니다. 후자는 Wayland QPA 플러그인의 로깅을 활성화하므로 클라이언트 측에서 설정해야 합니다.

예제

Qt Wayland Compositor 예제를 살펴보면 이러한 API를 활용하여 사용자 정의 컴포지터를 작성하는 방법을 확인할 수 있습니다.

API 참조

Qt Wayland Compositor 는 C++ 또는 QML에서 사용할 수 있습니다:

또한, 이 모듈은 CMake 함수 qt_generate_wayland_protocol_server_sources()를 제공합니다.

모듈의 발전

'Qt 6로의 이식 - Qt Wayland Compositor ' 문서 에는 Qt 6 시리즈를 위해 모듈 API 및 기능에 적용된 주요 변경 사항이 나열되어 있습니다.

라이선스 및 출처 표기

Qt Wayland Compositor 및 Qt Wayland 통합 플러그인은 The Qt Company의 상용 라이선스에 따라 제공됩니다.

또한, Qt Wayland Compositor 는 GNU 일반 공중 사용 허가서(GNU General Public License) 버전 3에 따라 제공되는 반면, Qt Wayland 통합 플러그인은 GNU 축소 일반 공중 사용 허가서(GNU Lesser General Public License) 버전 3 또는 GNU 일반 공중 사용 허가서(GNU General Public License) 버전 2에 따라 제공됩니다.

자세한 내용은 Qt 라이선스를 참조하십시오.

Qt Wayland Compositor 및 Qt Wayland 통합 플러그인은 다음의 관대한 라이선스에 따라 프로토콜 정의를 사용합니다.

Presentation Time Protocol, version 1

MIT 라이선스

Wayland Color Management Protocol, version 1

MIT 라이선스

Wayland Dialog Protocol, version 1

MIT 라이선스

Wayland EGLStream Controller Protocol, version 1.1.1

MIT 라이선스

Wayland Fractional Scale Protocol, version 1

MIT 라이선스

Wayland Fullscreen Shell Protocol, version unstable v1

MIT 라이선스

Wayland IVI Extension Protocol, version 1.9.1

MIT 라이선스

Wayland KDE DBus Menu Protocol, version 1

GNU 약소 일반 공중 사용 허가서 2.1 또는 그 이후 버전

Wayland Linux Dmabuf Unstable V1 Protocol, version unstable v1, version 3

MIT 라이선스

Wayland Linux Dmabuf V1 Protocol, version v1, version 5

MIT 라이선스

Wayland Pointer Gestures Protocol, version unstable v1, version 2

MIT 라이선스

Wayland Pointer Warp Protocol, version version 1

MIT 라이선스

Wayland Primary Selection Protocol, version 1

MIT 라이선스

Wayland Protocol, version 1.24.0

MIT 라이선스

Wayland Scaler Protocol, version 2

MIT 라이선스

Wayland Session Management Protocol, version experimental V1

MIT 라이선스

Wayland Tablet Protocol, version unstable v2, version 1

MIT 라이선스

Wayland Text Input Protocol v1, version unstable v1

MIT 라이선스

Wayland Text Input Protocol v2, version unstable v2

HPND 라이선스

Wayland Text Input Protocol, version unstable v3

MIT 라이선스

Wayland Viewporter Protocol, version 1

MIT 라이선스

Wayland XDG Foreign Protocol, version 1

MIT 라이선스

Wayland XDG Output Protocol, version unstable v1, version 3

MIT 라이선스

Wayland XDG Shell Protocol, version 1.18

MIT 라이선스

Wayland XDG System Bell Protocol, version 1.18

MIT 라이선스

Wayland xdg-activation Protocol, version unstable v1, version 1

MIT 라이선스

Wayland xdg-decoration Protocol, version unstable v1, version 1

MIT 라이선스

Wayland xdg-toplevel-icon Protocol, version version 1

MIT 라이선스

Wlr Data Control Unstable V1 Protocol, version 2

MIT 라이선스

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.