Wayland下的KDE,软件置顶&OSD功能丢失的解决办法
本文会分享一些我在Wayland下遇到的窗口功能丢失的解决办法。
为什么会发生这种现象
在大多数图形界面应用中,"窗口置顶"(always on top)功能在 X11 环境下通常能够正常工作,开发者可以通过如 XRaiseWindow
或 _NET_WM_STATE_ABOVE
等 X11 API 实现该功能。然而,随着 Linux 桌面逐步向 Wayland 迁移,许多窗口管理相关的功能面临兼容性问题。
Wayland 设计之初强调安全性与简化协议,其架构不再允许客户端(应用)直接控制窗口管理行为,例如窗口置顶、窗口移动、跨输出固定等。这些行为通常只能通过合适的 compositor(如 GNOME 的 Mutter 或 KDE 的 KWin)暴露的扩展协议来实现。目前,Wayland 核心协议尚未提供统一的“窗口置顶”功能支持,而相关的扩展协议(如 xdg-toplevel)尚未全面覆盖这类需求。
部分图形库(如 GTK、Qt)正在逐步适配 Wayland 环境,但其对窗口置顶功能的支持仍取决于底层 compositor 的实现和对 Wayland 扩展的支持程度。例如,GNOME 在 Mutter 中不支持“always-on-top”窗口状态,而 KDE 的 KWin 则通过自定义协议实现了部分支持。
因此,在强制启用原生 Wayland 支持(即非 XWayland 回退模式)时,一些应用可能出现置顶功能失效的现象。这是由于 Wayland 协议的限制及图形库尚未完全适配导致的。对于此类问题,当前解决方式通常是等待桌面环境、compositor 及图形库的进一步更新。
Wayland Protocol Specification:
https://wayland.freedesktop.org/docs/html/xdg-shell Protocol (Wayland standard window management protocol):
https://wayland.app/protocols/xdg-shellMutter’s Wayland limitation discussions(GNOME):
KDE/KWin 的窗口规则与置顶支持:
如何解决
使用KDE提供的窗口规则就可以很好的解决这个问题。
当检测到关键词时候强制给窗口赋予置顶,这个工作由KDE提供(可能是吧?)。
同理bilibili也是这样实现的(这里使用的是第三方bilibli,项目地址https://github.com/msojocs/bilibili-linux/),维护者经过沟通,在wayland环境下会给窗口增加[Wayland置顶]标志,只需检测包含子串即可!
分享一下我的规则,在窗口规则界面右上角即可导入