使用 shell 脚本:如何获取基于 X 的窗口管理器中打开的窗口的图标名称(或路径)?

使用 shell 脚本:如何获取基于 X 的窗口管理器中打开的窗口的图标名称(或路径)?

我能够使用 获取窗口 ID 和窗口标题wmctrl,但到目前为止,我还无法获取窗口使用的图标的路径。我尝试查看 xdg 实用程序,但最接近的是安装/卸载图标。

有没有办法在 shell 脚本/命令行中获取 XDG/GTK 使用的图标名称或图标的目录路径?

答案1

您无法从中获取它,wmctrl因为它只知道窗口属性。扩展窗口管理器提示告诉在哪里图标驻留。这是因为它可能是内存中的像素图(正如 xterm 在某些配置中所做的那样,因为补丁 #282)。

假设你已经了解这些属性:

但这只是一个起点。假设有一个图标文件,你必须根据/usr/share/pixmaps当前主题

类似的问题被问到.desktop 文件中声明的图标的绝对路径是什么?,指向

获取主题名称取决于桌面。相关问题(和答案)位于桌面无关图标主题查找

答案2

因此,您可以获取图像本身,而不是名称:

xprop -id THE_WINDOW_ID -notype 32c _NET_WM_ICON |
   perl -0777 -pe '@_=/\d+/g;
   printf "P7\nWIDTH %d\nHEIGHT %d\nDEPTH 4\nMAXVAL 255\nTUPLTYPE RGB_ALPHA\nENDHDR\n", splice@_,0,2;
   $_=pack "N*", @_;
   s/(.)(...)/$2$1/gs' > icon.pam

您可以通过管道将该输出传输到pamrgbatopng(从netpbm)以获取 PNG 图像:

xprop -id THE_WINDOW_ID ... | perl -0777  ... | pamrgbatopng > the_icon.png

它有点不方便,速度也有点慢,但总归是有用的。

致谢:这是@的组合托马斯·迪基的回答与[如何转储正在运行的X程序的图标?](https://unix.stackexchange.com/questions/48860/how-to-dump-the-icon-of-a-running-x-program

相关内容