我想确定一个窗口属于 Wayland 中的哪个进程。有没有像xprop
X 那样允许用户通过单击来选择窗口并输出所有窗口详细信息(包括 PID)的东西?
答案1
好消息,Gnome Shell 中内置了类似的东西,与xprop
Xorg不同和韦兰。如果您使用 KDE、i3 或其他工具,最终这可能属于其他工具的范畴。
首先,在键盘上键入“ALT+F2”键,这将弹出一个如下菜单:
出现之后,发出命令lg
(“镜子”)。
然后,这将打开观察玻璃窗口,我们可以从中提取窗口信息。从镜子的右上角选择“窗口”:
从那里,您将看到一个窗口列表,您可以从中单击要识别的窗口的名称。
在本例中,我选择了 gedit 作为示例:
在该输出的第一行中,您可能会注意到:
Inspecting object: object instance proxy GType: MetaWindowX11 ...
“GType”将是MetaWindowX11
或之一MetaWindowWayland
。
此信息来自https://fedoraproject.org/wiki/How_to_debug_Wayland_problems
答案2
我意识到这是特别缺乏的东西,所以我创建了一个要点来做到这一点。
看哪:wlprop
wlprop
在终端中输入并单击一个窗口,它将为您提供该特定窗口的 sway 树输出:
$ wlprop
# A prompt to select a window will appear
{
"id": 72,
"type": "con",
"orientation": "none",
"percent": 0.5002881844380404,
"urgent": false,
"marks": [],
"focused": false,
"layout": "none",
"border": "pixel",
"current_border_width": 2,
"rect": {
"x": 0,
"y": 26,
"width": 868,
"height": 1130
},
"deco_rect": {
"x": 0,
"y": 0,
"width": 0,
"height": 0
},
"window_rect": {
"x": 2,
"y": 2,
"width": 864,
"height": 1126
},
"geometry": {
"x": 0,
"y": 0,
"width": 1328,
"height": 858
},
"name": "How to identify window by clicking in Wayland - Unix & Linux Stack Exchange — Mozilla Firefox",
"window": null,
"nodes": [],
"floating_nodes": [],
"focus": [],
"fullscreen_mode": 0,
"sticky": false,
"pid": 47844,
"app_id": "firefox",
"visible": true,
"max_render_time": 0,
"shell": "xdg_shell",
"inhibit_idle": false,
"idle_inhibitors": {
"user": "none",
"application": "none"
}
}
您可以使用以下方法按特定元素进行过滤jq
:
$ wlprop | jq -r '.name'
# The same prompt will appear
How to identify window by clicking in Wayland - Unix & Linux Stack Exchange — Mozilla Firefox
希望这个解决方案足够优雅,能够填补xprop
每个人心中的空洞
答案3
有xdg-foreign
协议扩展草案,它允许获取wl_surface
由其他 Wayland 客户端创建的 的句柄。有了这个句柄,您就可以从中获得任何可以从客户端表面获得的东西。然而,该协议仍然有局限性:
- 显然,如果不在客户端中实现,它就不会起作用。
- 它的目标客户是知道彼此之间,因此它不提供触发它的方法:您的客户端以某种方式与外部客户端进行通信,扩展不包括在内。然后,外国客户端通过此扩展为您的客户端发布一个句柄。
- 与 相比,它获得了太多的控制权
xprop
。事实上,你甚至可以在外国表面上画画!
因此,这不太可能成为任何客户端从任何客户端获取表面参数的通用方法。但不要失去希望:科技史上有很多例子,最初为某种目的而设计的一项技术后来被广泛用于其他目的,就像汽车点烟器或 Android 中的辅助功能 API 一样。此外,将来可能会出现更适合您的任务的协议扩展,因为肯定需要它(例如,时间跟踪器)。
答案4
在 Sway 中,您可以针对 来 grep 查找您的应用程序swaymsg -t get_tree
,这类似于xprop
, 但同时针对所有窗口。