如何查找 X 窗口的程序名称?

如何查找 X 窗口的程序名称?

我刚刚读到 »如何恢复到 GNOME Classic?“。有些答案说你应该按Alt+Win来获得添加至面板对话。但我的键盘没有Win。所以我问自己如何启动添加至面板窗口。通常最好的方法是将程序名称输入到终端中。在这种情况下,我无法弄清楚名称。

我在另一台计算机上测试了它,但在进程列表中找不到名称。xwininfo或者类似的程序也没有显示名称。那么找出打开 (X) 窗口的程序名称的最佳方法是什么呢?

答案1

xprop _NET_WM_PID从终端运行将使 X 进入特殊模式,您可以在该模式中单击一个窗口以在终端中获取该窗口的 PID。

然后运行ls -l /proc/<pid>/exe并查看链接的位置以查明程序的文件名是什么。

下面是从我正在编写的一个程序中截取的一个小 Python 脚本:

#! /usr/bin/env python

import os, subprocess

# Function based on code from apport
def get_window_pid():
    xprop = subprocess.Popen(['xprop', '_NET_WM_PID'],
            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (out, err) = xprop.communicate()
    if xprop.returncode == 0:
        try:
            return int(out.split()[-1])
        except ValueError:
            return -1
    else:
        return -1

def get_window_exe():
    pid = get_window_pid()
    
    if pid == -1:
        return ''
        
    return os.path.realpath('/proc/' + str(pid) + '/exe')

if __name__=='__main__':
    exe = get_window_exe()
    if exe == '':
        print 'Unable to identify window\'s executable' 
    else:
        print exe

将其保存到文件中并输入 来运行python <filename>.py。单击窗口,它将打印程序的名称。

答案2

根据 iBelieve 的回答:

alias fxname='basename $(ll /proc/$(xprop _NET_WM_PID | awk "{print \$NF}")/exe | awk "{print \$NF}")'

awk 命令中的$NF必须进行转义,这样它才不会被解释为 shell 变量。运行它后,将立即出现一个十字线,供您单击所需的窗口。

答案3

今天可以更简洁地使用xdotool

#!/bin/bash
xdotool getactivewindow getwindowclassname

参考:https://manpages.ubuntu.com/manpages/noble/man1/xdotool.1.html

相关内容