![使用 shell 脚本:如何获取基于 X 的窗口管理器中打开的窗口的图标名称(或路径)?](https://linux22.com/image/1478073/%E4%BD%BF%E7%94%A8%20shell%20%E8%84%9A%E6%9C%AC%EF%BC%9A%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E5%9F%BA%E4%BA%8E%20X%20%E7%9A%84%E7%AA%97%E5%8F%A3%E7%AE%A1%E7%90%86%E5%99%A8%E4%B8%AD%E6%89%93%E5%BC%80%E7%9A%84%E7%AA%97%E5%8F%A3%E7%9A%84%E5%9B%BE%E6%A0%87%E5%90%8D%E7%A7%B0%EF%BC%88%E6%88%96%E8%B7%AF%E5%BE%84%EF%BC%89%EF%BC%9F.png)
我能够使用 获取窗口 ID 和窗口标题wmctrl
,但到目前为止,我还无法获取窗口使用的图标的路径。我尝试查看 xdg 实用程序,但最接近的是安装/卸载图标。
有没有办法在 shell 脚本/命令行中获取 XDG/GTK 使用的图标名称或图标的目录路径?
答案1
您无法从中获取它,wmctrl
因为它只知道窗口属性。扩展窗口管理器提示告诉在哪里图标驻留。这是因为它可能是内存中的像素图(正如 xterm 在某些配置中所做的那样,因为补丁 #282)。
假设你已经了解这些属性:
但这只是一个起点。假设有一个图标文件,你必须根据/usr/share/pixmaps
当前主题。
类似的问题被问到.desktop 文件中声明的图标的绝对路径是什么?,指向
- 图标主题规范(给出目录布局和伪代码)
- 如何获取图标名称的完整文件路径?(以 Python 脚本的形式提供答案)。
获取主题名称取决于桌面。相关问题(和答案)位于桌面无关图标主题查找
答案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。