我刚刚读到 »如何恢复到 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