실행중인 X 프로그램의 아이콘을 덤프하는 방법?


9

실행중인 X 프로그램의 아이콘을 얻는 방법이 있습니까? 창 사이를 전환하면 xfwm4를 통해 창 아이콘이 표시됩니다.


잠깐, 쉘을 통해 (파일로) 또는 C ++을 통해 그것을 원하십니까?
Bobby

@Bobby 무슨 일이든 ..
데이지

답변:


9

이것은 나를 위해 작동합니다. 모든 응용 프로그램 및 모든 창 관리자에서 작동하지 않을 수 있습니다. 이 pam형식은 최소한 ImageMagick에서 지원되므로 다음과 함께 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

(그리고 아이콘을 가져 오려는 창을 클릭하십시오. xprop의 -id옵션 도 참조하십시오 )

아이디어는 xprop를 사용하여 속성을 32 비트 십진 정수 목록으로 가져오고 perl을 사용하여 그래픽 형식으로 변환하는 것입니다 (pam은 RGBA 인 반면 _NET_WM_ICON은 ARGB이므로 바이트를 다시 정렬해야하지만 여기서는 단순성을 위해 여기에서 선택한 pam).

( pam 형식에 대한 참고 사항입니다 . netpbm 형식이며 netpbm은 유닉스 이미지 조작 도구 상자입니다. 그러나 대부분의 라이센스 문제로 인해 새로운 netpbm 버전은 데비안 패키지가 아니기 때문에 우분투와 같은 파생 제품은 대부분의 pam 변환 유틸리티는 존재하지 않습니다 .netpbm이 최신 인 다른 시스템에서는 위의 출력을 파이프하여 pamrgbatopngpng 이미지를 생성 할 수 있습니다 )


멋지다, 나는 아이콘을 버리고 PNG 형식으로 변환했다.
데이지

0

블로그 게시물을 우연히 발견 했습니다. 그것으로부터 인용하려면 :

실제로 이것을 수행하는 방법을 보여주기 위해 xgeticon 이라는 작은 프로그램을 작성 하여 사용자가 실행중인 X 응용 프로그램의 창을 선택하고 추출 된 아이콘을 인수로 제공된 파일에 저장할 수있게했습니다.


0

리눅스 libwnck를 사용하여 할 수 있습니다.

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

이 페이지 에서 가져옵니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.