Làm cách nào để bỏ biểu tượng của chương trình X đang chạy?


9

Có cách nào để lấy biểu tượng của chương trình X đang chạy không? Khi bạn chuyển đổi giữa các cửa sổ, bạn có thể thấy biểu tượng của nó, ví dụ như thông qua xfwm4.


Đợi đã, bạn muốn nó thông qua shell (vào một tệp) hoặc qua C ++?
Bobby

@ BOB bất cứ điều gì hoạt động ..
daisy

Câu trả lời:


9

Điều này làm việc cho tôi. Có thể không hoạt động với tất cả các ứng dụng và tất cả các trình quản lý cửa sổ. Các pamđịnh dạng là ít nhất được hỗ trợ bởi ImageMagick, vì vậy bạn có thể xem nó với displayvà chuyển đổi nó sang các định dạng khác nếu cần thiết với 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

(và nhấp vào cửa sổ bạn muốn lấy biểu tượng từ đó, xem thêm -idtùy chọn của xprop )

Ý tưởng là sử dụng xprop để lấy thuộc tính dưới dạng danh sách các số nguyên thập phân 32 bit và sử dụng perl để chuyển đổi nó thành định dạng đồ họa (pam được chọn ở đây để đơn giản mặc dù tôi phải sắp xếp lại các byte vì _NET_WM_ICON là ARGB trong khi pam là RGBA.

( một lưu ý về định dạng pam . Đây là định dạng netpbm , netpbm là một hộp công cụ xử lý hình ảnh Unix đáng kính. Tuy nhiên, do nhiều vấn đề khác nhau, chủ yếu là cấp phép, các phiên bản netpbm mới hơn không phải là gói của debian và do đó các dẫn xuất của nó như ub Ubuntu như tốt, điều đó có nghĩa là hầu hết các tiện ích chuyển đổi pam không có ở đó. Trên các hệ thống khác có netpbm mới hơn, bạn có thể đặt đầu ra ở trên pamrgbatopngđể tạo hình ảnh png)


Thật tuyệt, tôi đã bỏ biểu tượng và chuyển đổi nó sang định dạng PNG.
cúc

0

Tôi tình cờ thấy bài blog này . Để trích dẫn từ nó:

Để giải thích cách thực hiện điều này trong thực tế, tôi đã viết một chương trình nhỏ có tên xgeticon cho phép người dùng chọn cửa sổ của ứng dụng X đang chạy và lưu biểu tượng trích xuất vào tệp được cung cấp làm đối số.


0

sử dụng linux libwnck có thể làm điều đó

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

Tôi lấy nó từ trang này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.