Відповіді:
Це працює для мене. Може працювати не з усіма програмами та всіма менеджерами вікон. 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
(і натисніть на вікно, з якого ви хочете отримати піктограму, див. також -id
опцію xprop )
Ідея полягає у використанні xprop для отримання властивості як списку 32-бітних десяткових цілих чисел та використання perl для перетворення цього у графічний формат (пам., Обраний тут для простоти, хоча мені довелося перевпорядкувати байти, оскільки _NET_WM_ICON - ARGB, а pam - RGBA.
( примітка про формат pam . Це формат netpbm , що netpbm є поважним пакетом інструментів для маніпулювання зображенням Unix. Однак через різні проблеми, в основному ліцензійні, новіші версії netpbm не є пакетами debian, і як результат, його похідні, такі як ubuntu як ну, це означає, що більшості утиліт перетворення пам. там немає. На інших системах, які мають новіший netpbm, ви можете передавати висновок вище pamrgbatopng
для створення PNG зображення)
використовувати Linux 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;
}
Я отримую це з цієї сторінки