원문 보기: https://dawoum.duckdns.org/wiki/Wayland_(display_server_protocol)/Client-side_window_decoration
이 기사는 그놈 wayland에서 KDE 응용 프로그램을 wayland 아래에서 실행하기 위한 과정 중 하나입니다.
문제는 KDE 응용 프로그램을 qt wayland에서 실행하면, wayland에서 제공하는 창 모양새를 가지기 때문에, kde 설정에서 만들어진 테마의 창 모양새를 따르지 않는 것에 있습니다.
이를 해결하기 위한 가장 쉬운 방법은 환경 변수를 조작해서 wayland가 아닌 xcb로 설정하는 것입니다. 이에 대한 자세한 정보는 Switching to Wayland from X11에서 볼 수 있습니다. 이 경우에는 kde 응용 프로그램을 Xwayland를 통해 실행하기 때문에, 원래 목적에 맞지 않습니다.
한편, qt6에서는 클라이언트-측의 창 모양새를 변경하도록 지원합니다. 어쨌든, 원하는 클라이언트-측 창 모양새에 대한 플럭-인은 별도로 설치해야 합니다.
반면에, qt5에서는 클라이언트-측의 창 모양새를 지원하지 않지만, qt6의 코드를 참고해서 페도라 리눅스에서 만든 패치가 있습니다. 그리고 페도라에서 만든 gnome이라는 클라이언트-측 창 모양새를 별도로 제공합니다. 따라서 페도라 리눅스 그놈 wayland에서, kde 응용 프로그램도 그놈 응용 프로그램과 같은 모양을 만들 수 있습니다.
데비안에서, 페도라의 패치가 적용되지는 않았지만, 다른 방법으로 qgnomeplatform-qt5, qgnomeplatform-qt6와 같은 패키지를 통해 창 모양새를 바꾸는 방법이 있습니다. 이에 대한 자세한 정보도 Switching to Wayland from X11에서 볼 수 있습니다.
문제는 내가 원하는 테마에 대해 "QT_WAYLAND_DECORATION를 지원하는 플럭인이 있느냐"는 것입니다.
아치 위키에서 내용을 보면, adwaita, whitesur-gtk 2개 정도는 플럭인이 존재합니다.
여기서는 whitesur-gtk를 설치하는 방법을 소개합니다.
Qt5wayland packaging
클라이언트-측 창 모양새를 지원하기 위해, qt5에서는 추가적인 패치가 필요합니다.
먼저 데비안에서 qtwayland5로 패키지를 검색하셔서 소스 파일과 데비안 패키징 파일을 가져옵니다.
다음으로, 아치에서 패키징을 진행하면서 페도라의 링크를 만들어 놓은 것이 있으니 3개의 파일을 가져옵니다. 링크를 따라가십시오.
다음 과정으로 진행할 수 있습니다:
- tar xvf qtwayland-opensource-src_5.15.13.orig.tar.xz
- tar xvf qtwayland-opensource-src_5.15.13-3.debian.tar.xz -C qtwayland-everywhere-src-5.15.13
- cd qtwayland-everywhere-src-5.15.13
- cp ~/Downloads/qtwayland-* debian/patches
- lvim debian/patches/series
qtwayland-use-adwaita-decorations-by-default.patch qtwayland-decoration-support-backports-from-qt6.patch qtwayland-client-fix-window-margin-calculation.patch
- edit debian/changelog (using dch)
- time dpkg-buildpackage -i -us -us -b
아마도 빌드에 의존성 패키지를 전부 설치하고 패키징을 진행하십시오.
마지막으로, libqt5waylandclient5, libqt5waylandclient5-dev, libqt5waylandcompositor5, libqt5waylandcompositor5-dev, qtwayland5, qtwayland5-dev-tools, qtwayland5-private-dev를 업그레이드하십시오. 시스템에 설치되어 있지 않은 것은 설치하지 않으셔도 됩니다.
QWhiteSurGtkDecorations packaging
소스 코드를 가져와서 패키지를 만듭니다:
- git clone https://github.com/FengZhongShaoNian/QWhiteSurGtkDecorations
- cd QWhiteSurGtkDecorations
- mkdir build
- cd build
- cmake -DCMAKE_INSTALL_PREFIX=/usr -DHAS_QT6_SUPPORT=true -DUSE_QT6=false ..
- make
여기서 패키징에 필요한 파일이 없으면, 오류가 발생하니 해당 내용을 보고 데비안 패키지를 먼저 설치해야 합니다. 오류 없이 컴파일이 되면 이제 패키지를 만듭니다
- dh_make --createorig -p qwhitesurgtkdecorations-qt5_0.1.5
- dh_auto_configure
- cd ..
- sudo dpkg -i qwhitesurgtkdecorations-qt5_0.1.5-1_amd64.deb
이 과정을 qt6에 대해 한번 더 진행할 수 있습니다.
- mkdir build2
- cd build2
- cmake -DCMAKE_INSTALL_PREFIX=/usr -DHAS_QT6_SUPPORT=true -DUSE_QT6=true ..
- make
여기서도 필요한 패키지 설치 과정이 있을 수 있습니다. 이제 패키지를 만듭니다:
- dh_make --createorig -p qwhitesurgtkdecorations-qt6_0.1.5
- dh_auto_configure
- lvim debian/rules
override_dh_auto_configure: dh_auto_configure -- \ -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) -DHAS_QT6_SUPPORT=true -DUSE_QT6=true
- cd ..
- sudo dpkg -i qwhitesurgtkdecorations-qt6_0.1.5-1_amd64.deb
이제 특정 파일, 예를 들어, ~/.zprofile에서 xcb 대신에 wayland를 사용하고 export QT_WAYLAND_DECORATION=whitesur-gtk를 추가할 수 있습니다.
로그 아웃 후에 로그인하셔야 kde 응용 프로그램의 창 모양새를 확인하십시오.