Como descarregar o ícone de um programa X em execução?

8

Existe uma maneira de obter o ícone de um programa X em execução? Quando você alterna entre as janelas, pode ver o ícone delas, por exemplo, por meio do xfwm4.

    
por daisy 22.09.2012 / 16:38

3 respostas

8

Isso funciona para mim. Pode não funcionar com todas as aplicações e todos os gestores de janelas. O formato pam é pelo menos suportado pelo ImageMagick, então você pode visualizá-lo com display e convertê-lo para outros formatos, se necessário, com 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

(e clique na janela da qual você deseja obter o ícone, veja também a opção -id do xprop)

A idéia é usar o xprop para obter a propriedade como uma lista de inteiros decimais de 32 bits e usar perl para convertê-los em um formato gráfico (pam escolhido aqui por simplicidade, embora eu tenha que reordenar os bytes, pois _NET_WM_ICON é ARGB enquanto pam é RGBA.

( uma nota sobre o formato pam . É um formato netpbm , sendo o netpbm uma manipulação venerável de imagens Unix No entanto, devido a vários problemas, principalmente licenciamentos, as versões mais recentes do netpbm não são pacotes do Debian e, como resultado, seus derivados como o Ubuntu também, o que significa que a maioria dos utilitários de conversão pam não estão presentes. tem mais netpbm, você pode canalizar a saída acima para pamrgbatopng para gerar uma imagem png)

    
por 22.09.2012 / 17:36
0

Eu deparei com esta postagem no blog . Para citar:

To demonstrate how this can be done in practice, I wrote a small program called xgeticon which let the user choose the window of a running X application and save the extracted icon into the file provided as argument.

    
por 09.04.2018 / 01:57
0

use o linux libwnck pode fazer isso

#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;
}

Eu obtenho de esta página

    
por 29.07.2018 / 05:21

Tags