diff --git "a/Wayland\351\200\202\351\205\215\347\254\224\350\256\260.md" "b/Wayland\351\200\202\351\205\215\347\254\224\350\256\260.md" index a2bbd94eb0b1109864f177b725eb85d1ddff4a85..6c4c13510cb186cb4e534d0220b1f6ca9cd7115d 100644 --- "a/Wayland\351\200\202\351\205\215\347\254\224\350\256\260.md" +++ "b/Wayland\351\200\202\351\205\215\347\254\224\350\256\260.md" @@ -1,4 +1,28 @@ # Wayland适配笔记 +## 现有XCB程序在Wayland上的适配问题 +现有X11程序可能在Wayland上错综复杂,有可能其表现不尽人意是由几个库共同作用导致的,在排查时,建议同时排查以下库的源码: +* 当前要适配的Wayland窗体管理器的源码 +* DTK2 + * gxde-qt5integration + * dtk2widget + * dde-qt6platform-plugins +* deepin-daemon +* GXDE API(可选) +* GXDE-WM-Shim(可选) +* DWayland相关(可选,通常不需要) + * qt6-wayland + * dwayland + +举个例子:`gxde-desktop-panel`在Treeland下无法显示图标: +``` +DTreelandPlatformInterface::iconThemeName() + → 返回未初始化的 m_iconThemeName = "" + → 原因: PersonalizationManager 竞态条件 + - initContext() 在 activeChanged 信号中调用 + - 如果 PersonalizationManager 在 DTreelandPlatformInterface 构造前已 active, + 信号在 connect() 之前已发射,initContext() 永远不会被调用 +``` + ## WM选择问题 根据现有的工具链和软件包,最好选择`deepin-kwin_wayland`会话而不是当前的Mutter作为WM。 diff --git "a/\344\275\277\347\224\250Treeland\344\275\234\344\270\272Wayland WM\345\271\266\345\274\225\345\257\274\346\241\214\351\235\242\345\220\257\345\212\250.md" "b/\344\275\277\347\224\250Treeland\344\275\234\344\270\272Wayland WM\345\271\266\345\274\225\345\257\274\346\241\214\351\235\242\345\220\257\345\212\250.md" index 7ed1c7be70f83ed0bb8e633d5f6b8f3d890127bf..09d312877381caf9ca33c6209ddc43dba928f72b 100644 --- "a/\344\275\277\347\224\250Treeland\344\275\234\344\270\272Wayland WM\345\271\266\345\274\225\345\257\274\346\241\214\351\235\242\345\220\257\345\212\250.md" +++ "b/\344\275\277\347\224\250Treeland\344\275\234\344\270\272Wayland WM\345\271\266\345\274\225\345\257\274\346\241\214\351\235\242\345\220\257\345\212\250.md" @@ -8,6 +8,7 @@ * GXDE截图录屏预计不工作(翻阅源码时发现其在`Wayland`会话下使用`KWAYLAND`) ![GXDE桌面在Treeland上的用户体验问题](./img/gxde-treeland-issue.png) + (***注意**:桌面体验不包含那根顶栏,这是我为了代替不工作的Dock自己写的*) ### 后端相关 @@ -42,6 +43,7 @@ $ sudo apt install libdtk6declarative qml6-module-qt5compat-graphicaleffects > 如果没有其他文件要保存了、也没有其他用户使用的情况下亦可以重启整台电脑。 ### 选项一:纯 Treeland会话 +创建新文件`/usr/bin/start-treeland-plain`并填入如下内容: 如果当前是实体机: ```bash #!/bin/bash @@ -61,9 +63,23 @@ export WLR_RENDERER=pixman # virgl的dmabuf在上面似乎有点问题,用 exec /usr/bin/treeland.sh "$@" ``` -您需要将其保存为:`/usr/share/wayland-sessions/treeland-plain.desktop`。下一次便可以选择`treeland-plain`会话进入。 +--- +创建`/usr/share/wayland-sessions/treeland-plain.desktop`: +```ini +[Desktop Entry] +Name=treeland-plain +Comment=This session starts a plain treeland session. +Exec=/usr/bin/start-treeland-plain +Type=Application +DesktopNames=Treeland +``` + +下一次便可以选择`treeland-plain`会话进入。 ### 选项二:Treeland + GXDE 桌面 +创建新文件`/usr/bin/start-gxde-treeland`并填入如下内容: + + 如果当前是实体机: ```bash #!/bin/bash @@ -85,7 +101,18 @@ export DTK2_XWAYLAND=dxcb exec /usr/bin/treeland.sh -r /usr/bin/startdde "$@" ``` -您需要将其保存为:`/usr/share/wayland-sessions/gxde-treeland.desktop`。下一次便可以选择`gxde-treeland`会话进入。 +--- +创建`/usr/share/wayland-sessions/gxde-treeland.desktop`: +```ini +[Desktop Entry] +Name=gxde-treeland +Comment=This session starts a plain treeland session. +Exec=/usr/bin/start-gxde-treeland +Type=Application +DesktopNames=Treeland (GXDE) +``` + +下一次便可以选择`gxde-treeland`会话进入。 ## 部分Treeland的指令选项 * **`--help`**: 打印帮助。