为什么 wmctrl 对某些窗口不起作用?

pep*_*ico 2 window-manager compiz window wmctrl

francisco@Ubuntu:~$ wmctrl -l
0x02600006  0 Ubuntu Área de trabalho
0x03c00002  0 Ubuntu XdndCollectionWindowImp
0x03c00005  0 Ubuntu unity-launcher
0x03c00008  0 Ubuntu unity-panel
0x03c0000b  0 Ubuntu unity-dash
0x03c0000c  0 Ubuntu Hud
0x046000b3  0 Ubuntu How to make a window aways on top? - Stack Overflow - Mozilla Firefox
0x0520000b  0    N/A Qt Creator
0x05002396  0 Ubuntu francisco@Ubuntu: ~
0x0540000b  0    N/A backlight
Run Code Online (Sandbox Code Playgroud)

在此,对机器名称栏窗口作为N/A我无法发送wmctrl类似命令wmctrl -r "window name" -b add,above。为什么?(另外,我不知道为什么这些窗口在机器名称列方面有所不同......)

我最初的意图是将这样的命令发送到backlight窗口,一个无框架的 Qt 应用程序。使用窗口系统菜单并检查“始终在顶部”适用于该窗口。我只是喜欢这样做的程序化方式。

sgx*_*gx1 6

这绝对是一个错误wmctrl
在挖掘 wmctrl 代码后,似乎错误在于将窗口名称字符串转换为相应的窗口 ID(或 XID)。所以wmctrl -r "window name" -b add,above不可靠。

作为解决方法,请改用 XID,即wmctrl -i -r window_id -b add,above. 在你的情况下,wmctrl -i -r 0x0520000b -b add,above应该工作。

大多数窗口管理工具都是作为 X 窗口属性实现的。您可以通过命令查看窗口的所有属性-- xprop

笔记:

  1. 将机器名称列为 N/A 的 Windows。机器名称属性是WM_CLIENT_MACHINE. 它很少使用。并且某些 GUI 工具包可能无法实现它们。
    您可以通过运行以下命令行并单击窗口来查看窗口的机器名称属性

    shell> xprop | grep MACHINE
    
    Run Code Online (Sandbox Code Playgroud)
  2. 至于 Always On Top,它是另一个属性值_NET_WM_STATE_ABOVE
    要自己检查,请运行以下命令行并单击窗口

    shell> xprop | grep _NET_WM_STATE
    
    Run Code Online (Sandbox Code Playgroud)