如何转储正在运行的 X 程序的图标?

dai*_*isy 11 xorg x11 icons qt

有没有办法获取正在运行的 X 程序的图标?当您在窗口之间切换时,您可以看到它的图标,例如通过 xfwm4。

Sté*_*las 12

这对我有用。可能不适用于所有应用程序和所有窗口管理器。pamImageMagick 至少支持该格式,因此您可以查看它display并在需要时将其转换为其他格式convert

xprop -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
Run Code Online (Sandbox Code Playgroud)

(并单击要从中获取图标的窗口,另请参阅 xprop 的-id选项)

这个想法是使用 xprop 来获取作为 32 位十进制整数列表的属性,并使用 perl 将其转换为图形格式(为简单起见,此处选择 pam 虽然我不得不重新排序字节,因为 _NET_WM_ICON 是 ARGB 而 pam 是 RGBA。

关于 pam 格式的说明。它是一种netpbm格式,netpbm 是一个古老的 Unix 图像处理工具箱。然而,由于各种问题,主要是许可问题,较新的 netpbm 版本不是 debian 的软件包,因此它的衍生品如 ubuntu 作为好吧,这意味着大多数 pam 转换实用程序都不存在。在其他具有较新 netpbm 的系统上,您可以将上面的输出通过管道传输pamrgbatopng到以生成 png 图像)