我知道 Wayland 协议不提供控制外壳表面在屏幕上位置的选项。我想找到一种控制窗口/表面放置的方法。我尝试过 xdotool 和 wmctrl 等工具,但它们只能识别 XWayland 窗口。我使用的是 Gnome Shell,因此窗口管理器是 Mutter。为什么地面定位不是 Wayland 协议的一部分?以编程方式控制 Wayland 表面放置的建议方法是什么?
编辑:
Wayland 客户端协议提供了子表面的接口,这足以满足我目前的目的。但是窗口我希望协议包含顶级窗口位置选项。我可以使用 javascript 来制作 gnome-shell 扩展吗?但在这种情况下这并不是一个真正的选择。
为什么地面定位不是 Wayland 协议的一部分?
个人客户端无权成为窗口管理器并在屏幕上任意定位窗口。窗口的定位是合成器策略,并且(通常)由用户决定。
这里的主要理由是任意程序不应该能够控制整个桌面会话的布局。
以编程方式控制 Wayland 表面放置的建议方法是什么?
针对不同的用例讨论不同的解决方案,但在不知道您要做什么的情况下很难提供准确的解决方案。
如果您正在编写一个安排窗口在屏幕上的位置的程序,那么 wlr_foreign_toplevel_management_unstable_v1 协议扩展可能就是您正在寻找的。目前,它主要由 wlroots 合成器支持,它尚未完全标准化,并且不受 GNOME 支持。
如果您正在编写一个具有多个窗口的程序,并且希望它们彼此处于特定的相对位置,那么您将对 ext-zones-v1 协议扩展感兴趣。我说“将会”是因为它还没有标准化,所以你不能真正使用它。
如果您正在编写必须位于左边框的状态栏,或者希望在右侧有一个包含一些自定义内容的状态栏,则需要使用 wlr-layer-shell-unstable-v1 协议。目前,仅 wlroots 和 KDE 合成器支持它。它正在被标准化为 ext-layer-shell。
一些合成器提供自定义 API 来实现自定义窗口管理器和控制窗口位置和桌面布局的类似程序。