linux - 是否有一个 linux 命令来确定与给定进程 ID 关联的窗口 ID?

给定 XX 的进程 ID,我想要一个 _NET_WM_PID = XX 的任何窗口 ID 的列表。如果可能的话,最好是最旧的仍处于事件状态的窗口 id。

我对 linux 很陌生,但我想做的是创建一个脚本,该脚本将采用命令行,并查看是否已经打开了属于使用同一命令行调用的进程的窗口。如果是这样,只需将焦点设置到该窗口,否则执行命令行以启动新进程。我的意图是在我的 ubuntu 桌面上使用它,我将把这个脚本挂接到我的 easystroke 鼠标手势命令中,这样,例如,每次我为 gmail 做手势时,我都不会得到一个全新的 gmail session ,我只是被带到我现有的 gmail chrome 应用程序窗口。也许有一个更简单的方法来解决这一切,但我还没有找到方法。

在帮助下,我弄清楚了如何使用 pgrep 为命令行查找 PID 以及如何使用 wmctrl 将焦点设置到窗口句柄,但我一直坚持从 PID 获取窗口 ID。

最佳答案

xwininfo 和 xprop 允许检索你想要的,但是有点棘手。

xwininfo 允许检索所有已知的窗口,并允许 xprop 向 X 查询您的 _NET_WM_PID 参数的单个窗口 ID。

到目前为止,一个比较老套的方法是:

#!/bin/sh

findpid=$1

known_windows=$(xwininfo -root -children|sed -e 's/^ *//'|grep -E "^0x"|awk '{ print $1 }')

for id in ${known_windows}
do
    xp=$(xprop -id $id _NET_WM_PID)
    if test $? -eq 0; then
        pid=$(xprop -id $id _NET_WM_PID|cut -d'=' -f2|tr -d ' ')

        if test "x${pid}" = x${findpid}
        then
            echo "Windows Id: $id"
        fi
    fi
done

结果:

mycroft:~ $ ./find_windows.sh 1919
Windows Id: 0x1800748
Windows Id: 0x181b221
Windows Id: 0x1803ad5
Windows Id: 0x181f681
Windows Id: 0x181f658
Windows Id: 0x180006d
Windows Id: 0x1800003
Windows Id: 0x1800001
Windows Id: 0x180001e

如您所见,单个进程可能有一定数量的已知窗口,即使您在屏幕上只看到一个。

也许你应该获取这些工具资源来制作你想要的东西。

https://stackoverflow.com/questions/2250757/

相关文章:

linux - Bash 将 awk 的输出捕获到数组中

c++ - 我在哪里放置第三方库来设置 C++ Linux 开发环境?

linux - 如何从 X session 之外(例如从控制台或 SSH)运行 X 程序

php - 根据外部请求在 Netbeans 中启动 XDebug

c - glibconfig.h 没有这样的文件或目录

linux - 在像 "f () {}"这样的 bash shell 脚本函数定义中使用的括号是什么

php - 脚本 "/home/...../public_html/index.php"的 UID

linux - 永久反转补丁文件

android - 如何构建在 Android 上运行的 native (命令行)可执行文件?

python - 在 Python 上模拟鼠标点击