Gibt es eine Möglichkeit, das Symbol eines laufenden X-Programms zu erhalten? Wenn Sie zwischen Fenstern wechseln, können Sie das Symbol sehen, z. B. über xfwm4.
Gibt es eine Möglichkeit, das Symbol eines laufenden X-Programms zu erhalten? Wenn Sie zwischen Fenstern wechseln, können Sie das Symbol sehen, z. B. über xfwm4.
Antworten:
Das funktioniert bei mir. Funktioniert möglicherweise nicht mit allen Anwendungen und allen Fenstermanagern. Das pam
Format wird zumindest von ImageMagick unterstützt, sodass Sie es anzeigen display
und bei Bedarf in andere Formate konvertieren können 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
(und klicken Sie auf das Fenster, aus dem Sie das Symbol erhalten möchten, siehe auch die -id
Option von xprop )
Die Idee ist, xprop zu verwenden, um die Eigenschaft als Liste von 32-Bit-Dezimalzahlen abzurufen, und Perl zu verwenden, um diese in ein Grafikformat zu konvertieren (pam wurde hier der Einfachheit halber ausgewählt, obwohl ich die Bytes neu anordnen musste, da _NET_WM_ICON ARGB ist, während pam RGBA ist.
( Ein Hinweis zum Pam-Format . Es handelt sich um ein Netpbm- Format, wobei Netpbm eine ehrwürdige Unix-Bildbearbeitungs-Toolbox ist. Aufgrund verschiedener Probleme, hauptsächlich der Lizenzierung, sind neuere Netpbm-Versionen jedoch keine Pakete von Debian und daher seine Derivate wie Ubuntu as Nun, was bedeutet, dass die meisten Pam-Konvertierungsprogramme dort nicht vorhanden sind. Auf anderen Systemen mit neuerem Netpbm können Sie die obige Ausgabe weiterleiten, pamrgbatopng
um ein PNG-Image zu generieren.
Ich bin auf diesen Blog-Beitrag gestoßen . Um daraus zu zitieren:
Um zu demonstrieren, wie dies in der Praxis gemacht werden kann, habe ich ein kleines Programm namens xgeticon geschrieben, mit dem der Benutzer das Fenster einer laufenden X-Anwendung auswählen und das extrahierte Symbol in der als Argument bereitgestellten Datei speichern kann.
Verwenden Sie Linux Libwnck kann es tun
#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;
}
Ich bekomme es von dieser Seite