我能够使用 获取窗口 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。