Biểu tượng bị thiếu khi khởi chạy ứng dụng


12

Tôi đã tạo một trình khởi chạy ứng dụng trong /usr/share/applicationsđó khởi chạy rdesktop. Tệp chỉ định tên biểu tượng và tôi đã thêm các biểu tượng vào:

/usr/share/icons/HighContrast/48x48/apps
/usr/share/icons/HighContrast/22x22/apps
/usr/share/icons/HighContrast/256x256/apps
/usr/share/icons/HighContrast/32x32/apps
/usr/share/icons/HighContrast/scalable/apps-extra
/usr/share/icons/HighContrast/24x24/apps
/usr/share/icons/HighContrast/16x16/apps
/usr/share/icons/hicolor/scalable/apps
/usr/share/icons/hicolor/128x128/apps
/usr/share/icons/hicolor/16x16/apps

Sau đó, tôi đưa trình khởi chạy vào thanh tác vụ và trình khởi chạy có logo chính xác được hiển thị trên thanh tác vụ. Tuy nhiên, khi tôi bắt đầu tác vụ, một biểu tượng mới được tạo trong thanh tác vụ, một hình vuông có dấu chấm hỏi ở giữa.

Tôi cần những biểu tượng nào và ở đâu, để thanh tác vụ hiển thị biểu tượng chính xác cho ứng dụng khi nó được khởi chạy?

Nội dung tệp .desktop:

[Mục nhập máy tính để bàn]
Phiên bản = 1.0
Thiết bị đầu cuối = sai
Biểu tượng = mswindows
Loại = Ứng dụng
Danh mục = Mạng;
Exec = rdesktop win7 Shared1 -g 1680x1000

Tên = win7 Shared1
Tên chung = rdesktop
Bình luận = Mở máy tính để bàn windows

Từ khóa = Windows
StartupNotify = sai

Câu trả lời:


15

Những gì có thể sẽ giải quyết vấn đề của bạn là làm như sau:

  1. Mở ứng dụng
  2. Khi nó đang chạy, mở một thiết bị đầu cuối và gõ:

    xprop WM_CLASS
    
  3. Sau đó bấm vào cửa sổ ứng dụng mở.

  4. Đầu ra sẽ trông như (ví dụ gedit):

    WM_CLASS(STRING) = "gedit", "Gedit"
    
  5. Sử dụng phần đầu tiên (trong trường hợp này là gedit), để soạn một dòng trong .desktoptệp của bạn :

    StartupWMClass=<string>
    

    (thay thế <string>bằng đầu ra thực tế (phần đầu tiên của) xprop WM_CLASS, vd StartupWMClass=gedit)

Bây giờ hãy thử lại (bạn có thể phải đăng xuất / đăng nhập), rất có thể ứng dụng sẽ xuất hiện trong trình khởi chạy dưới biểu tượng của chính nó.

Giải trình

  • Khi một ứng dụng khởi động chính xác từ trình khởi chạy ( .desktoptệp), nhưng một biểu tượng khác chỉ xuất hiện với một biểu tượng chung (dấu hỏi), rất có thể cửa sổ ứng dụng và trình khởi chạy không kết nối vì một số lý do và trình khởi chạy không nhận ra cửa sổ của ứng dụng là "của mình". Đây thường là trường hợp khi tập lệnh hoặc ứng dụng không chuẩn (-command) được sử dụng. Trong những trường hợp đó, StartupWMClass=dòng thường là giải pháp.

Cảm ơn Jacob. Điều này đã giải quyết vấn đề. Đối với bản ghi, chuỗi WM_CLASS là "rdesktop", "rdesktop".
clayton

@clayton hoàn hảo, rất vui vì nó hoạt động.
Jacob Vlijm

1
Bước 2 của bạn có thể được giảm xuống, vì xprop cho phép bạn vượt qua nguyên tử bạn muốn quay trở lại, chạy xprop WM_CLASSlà đủ
johndrinkwater 22/2/2016

@johndrinkwater Tuyệt đối, cảm ơn vì gợi ý. Đó là hơn một năm trước, hơn 14 tháng giống như một người khác đã viết nó :). Sẽ chỉnh sửa ...
Jacob Vlijm

@ jacob-vlijm :) vừa bắt gặp nó trong khi nghiên cứu một hành vi xprop vụng về
johndrinkwater 23/2/2016

2

cho tôi xprop|grep WM_CLASSđã cho WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "jetbrains-pycharm-ce"(tôi đã có vấn đề này với pycharm cho python)

Đó là chuỗi sun-awt-X11-XFramePeermà tôi cần làm chuỗi trong tệp .desktop của tôi (không có dấu ngoặc kép) - Cảm ơn!


Tôi đã thêm StartupWMClass=sun-awt-X11-XFramePeervào của tôi và không có gì xảy ra! Là .desktoptập tin nằm trong thư mục nhà?
anon58192932

0

Sau khi đặt biểu tượng vào đúng vị trí, bạn chỉ cần khởi động lại xserver (đăng xuất và đăng nhập lại).
Cũng cố gắng cập nhật bộ đệm biểu tượng (chỉ cần dán mã bên dưới vào thiết bị đầu cuối):

for d in ~/.icons/*; do gtk-update-icon-cache -f $d; done
for d in /usr/share/icons/*; do sudo gtk-update-icon-cache -f $d; done
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.