Respuestas:
Esto funciona para mi. Podría no funcionar con todas las aplicaciones y todos los administradores de ventanas. El pam
formato es al menos compatible con ImageMagick, por lo que puede verlo display
y convertirlo a otros formatos si es necesario con 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
(y haga clic en la ventana de la que desea obtener el icono, consulte también la -id
opción de xprop )
La idea es usar xprop para obtener la propiedad como una lista de enteros decimales de 32 bits y usar perl para convertirlo a un formato gráfico (pam elegido aquí por simplicidad, aunque tuve que reordenar los bytes ya que _NET_WM_ICON es ARGB mientras que pam es RGBA.
( una nota sobre el formato pam . Es un formato netpbm , netpbm es una venerable caja de herramientas de manipulación de imágenes de Unix. Sin embargo, debido a varios problemas, principalmente licencias, las versiones más nuevas de netpbm no son paquetes de debian y, como resultado, sus derivados como ubuntu como bueno, lo que significa que la mayoría de las utilidades de conversión de pam no están presentes allí. En otros sistemas que tienen netpbm más nuevos, puede canalizar la salida anterior pamrgbatopng
para generar una imagen png)
utilizar Linux Libwnck puede hacerlo
#define WNCK_I_KNOW_THIS_IS_UNSTABLE = 1
#include <libwnck/libwnck.h>
int main(int argc,
char **argv) {
WnckScreen *screen;
gdk_init(&argc, &argv);
screen = wnck_screen_get_default();
wnck_screen_force_update(screen);
auto win = wnck_window_get(127926341); // 127926341 is window id, it can be get by linux cli xdotool or wmctrl or other many clis
GdkPixbuf *r = wnck_window_get_icon(win);
GError *err = NULL;
gdk_pixbuf_save(r, "/tmp/prpr.png", "png", &err, "quality", "100", NULL);
return 0;
}
Lo obtengo de esta página