如何从 pid 获取 xid(反之亦然)?

发布于 2024-10-29 15:16:54 字数 272 浏览 5 评论 0原文

如何从 xid(X 窗口标识符)获取 pid?如何获取给定 pid 的 xids 列表?

(假设所有应用程序都使用 DISPLAY=:0 运行,没有使用网络透明性)

我期待类似的内容:

  1. 挖掘 /proc/$pid/fd/ 来跟踪与 X 服务器的
  2. 连接连接,挖掘 /proc/`pidof X`/fd
  3. 挖掘 X 内部,因为它应该知道如何将其连接映射到 Windows。

How do I get the pid from the xid (X window identifier)? How do I get the list of xids for a given pid?

(Assuming all applications run with DISPLAY=:0, without network transparency being in use)

I'm expecting something like:

  1. Dig in /proc/$pid/fd/ to track connection to X server
  2. Follow that connection, dig in /proc/`pidof X`/fd
  3. Dig inside X as it should know how to map connections to it to windows.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

最初的梦 2024-11-05 15:16:55

您可以使用 xprop -id; _NET_WM_PID 获取相关窗口的 PID 属性。您应该知道窗口的窗口 ID,并且并非所有应用程序都设置 _NET_WM_PID 原子。

You could use xprop -id <windowid> _NET_WM_PID to get the PID property of the window in question. You should know the window id of the window and not all applications set the _NET_WM_PID atom.

复古式 2024-11-05 15:16:55

这适用于我的目的:

=^_^= izkata@Izein:~$ XID=0x340001c
=^_^= izkata@Izein:~$ printf "%d\n" $XID               # Convert from hex to decimal
54525980
=^_^= izkata@Izein:~$ xdotool getwindowpid 54526066
20639
=^_^= izkata@Izein:~$ ps 20639
  PID TTY      STAT   TIME COMMAND
20639 ?        Ssl  116:25 /usr/lib/firefox/firefox

This works for my purposes:

=^_^= izkata@Izein:~$ XID=0x340001c
=^_^= izkata@Izein:~$ printf "%d\n" $XID               # Convert from hex to decimal
54525980
=^_^= izkata@Izein:~$ xdotool getwindowpid 54526066
20639
=^_^= izkata@Izein:~$ ps 20639
  PID TTY      STAT   TIME COMMAND
20639 ?        Ssl  116:25 /usr/lib/firefox/firefox
花间憩 2024-11-05 15:16:55

wmctrl 列出窗口、它们的 xids 以及可选的进程的 pid。因此,假设您的 $pid 只有一个窗口,您可以使用 获取相应的 xid

wmctrl -ulp | tr -s ' ' | cut -d" " -f1,3 | grep $pid | cut -d" " -f1

,反之,假设 xid 为十六进制,则获取 pid

wmctrl -ulp | tr -s ' ' | cut -d" " -f1,3 | grep $xid | cut -d" " -f2

wmctrl lists windows, their xids and optionally the pid of their process. So assuming there is only one window with your $pid, you could get the corresponding xid with

wmctrl -ulp | tr -s ' ' | cut -d" " -f1,3 | grep $pid | cut -d" " -f1

and conversely, assuming the xid is in hexa,get the pid

wmctrl -ulp | tr -s ' ' | cut -d" " -f1,3 | grep $xid | cut -d" " -f2

.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文