Çalışan bir X programının simgesi nasıl dökülür?


9

Çalışan bir X programının simgesini almanın bir yolu var mı? Pencereler arasında geçiş yaptığınızda pencerenin simgesini görebilirsiniz, örneğin xfwm4.


Bekle, kabuk (bir dosyaya) veya C ++ ile istiyor musunuz?
Bobby

@Bobby whatever works ..
daisy

Yanıtlar:


9

Bu benim için çalışıyor. Tüm uygulamalarda ve tüm pencere yöneticilerinde çalışmayabilir. pamBirlikte görüntüleyebilmek için biçim, en azından ImageMagick'in tarafından desteklenen olduğunu displayve ihtiyaç birlikte olmak eğer diğer biçimlere dönüştürmek 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

(ve simgeyi almak istediğiniz pencereye tıklayın, ayrıca xprop -idseçeneğine bakın)

Fikir, 32 bit ondalık tam sayıların bir listesi olarak özelliği almak için xprop kullanmak ve bunu bir grafik biçimine dönüştürmek için perl kullanmaktır (pam RGBA iken _NET_WM_ICON ARGB olduğu için baytları yeniden sıralamak zorunda kalsam da burada basitlik için seçilen pam.

( pam formatı hakkında bir not . Netpbm formatı, netpbm saygıdeğer bir Unix görüntü manipülasyon araç kutusu. Ancak, çoğunlukla lisanslama olan çeşitli sorunlar nedeniyle, yeni netpbm sürümleri debian tarafından paketlenmiyor ve bunun sonucunda ubuntu gibi türevleri pam dönüştürme yardımcı programlarının çoğunun orada olmadığı anlamına gelir.Yeni netpbm'ye sahip diğer sistemlerde, pamrgbatopngbir png görüntüsü oluşturmak için yukarıdaki çıktıyı borulandırabilirsiniz )


Güzel, simgeyi bıraktım ve PNG formatına dönüştürdüm.
papatya

0

Bu blog gönderisine rastladım . Ondan alıntı yapmak için:

Bunun pratikte nasıl yapılabileceğini göstermek için , kullanıcının çalışan bir X uygulamasının penceresini seçmesine ve çıkarılan simgeyi argüman olarak sağlanan dosyaya kaydetmesine izin veren xgeticon adlı küçük bir program yazdım .


0

linux libwnck kullanın bunu yapabilir

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

Bu sayfadan alıyorum

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.