Wie wird das Symbol eines laufenden X-Programms ausgegeben?

9

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.

Gänseblümchen
quelle
Warten Sie, möchten Sie es über die Shell (in eine Datei) oder über C ++?
Bobby
@ Bobby was auch immer funktioniert ..
Gänseblümchen

Antworten:

9

Das funktioniert bei mir. Funktioniert möglicherweise nicht mit allen Anwendungen und allen Fenstermanagern. Das pamFormat wird zumindest von ImageMagick unterstützt, sodass Sie es anzeigen displayund 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 -idOption 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, pamrgbatopngum ein PNG-Image zu generieren.

Stéphane Chazelas
quelle
Cool, ich habe das Symbol ausgegeben und es in das PNG-Format konvertiert.
Gänseblümchen
0

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.

Ikem Krueger
quelle
0

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

Chikadance
quelle