本文会分享一些我在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 及图形库的进一步更新。


  1. Wayland Protocol Specification:
    https://wayland.freedesktop.org/docs/html/

  2. xdg-shell Protocol (Wayland standard window management protocol):
    https://wayland.app/protocols/xdg-shell

  3. Mutter’s Wayland limitation discussions(GNOME):

  4. KDE/KWin 的窗口规则与置顶支持:

如何解决

使用KDE提供的窗口规则就可以很好的解决这个问题。

当检测到关键词时候强制给窗口赋予置顶,这个工作由KDE提供(可能是吧?)。

同理bilibili也是这样实现的(这里使用的是第三方bilibli,项目地址https://github.com/msojocs/bilibili-linux/),维护者经过沟通,在wayland环境下会给窗口增加[Wayland置顶]标志,只需检测包含子串即可!

分享一下我的规则,在窗口规则界面右上角即可导入

我的规则.*.kwinrule