Làm cách nào tôi có thể xóa các biểu tượng trùng lặp cho các chương trình java java đã khởi chạy trong chương trình launcher?


45

Khi khởi chạy các chương trình java (như IntelliJ IDEA và Crashplan) trong trình khởi chạy Unity của Natty, các biểu tượng trùng lặp được hiển thị (xem hình ảnh). Đối với IntelliJ tôi đã tạo tệp .desktop, đối với Crashplan, tệp .desktop được cung cấp cùng với ứng dụng. Có cái gì đó có thể được thay đổi trong các tệp .desktop (hoặc một nơi nào khác) có thể ngăn điều này xảy ra không? Tôi không thể tìm thấy báo cáo lỗi cho chính sự thống nhất nhưng các chương trình như Gnome-Do / Docky có báo cáo lỗi và phải thực hiện các thay đổi nội bộ cho các ứng dụng của họ để ngăn chặn điều này.

Biểu tượng trùng lặpTrong ảnh này, biểu tượng thứ 1 là biểu tượng được tạo từ tệp .desktop và biểu tượng thứ hai là sau khi khởi chạy nó. Biểu tượng thứ hai biến mất khi đóng ứng dụng.

Tùy chỉnh tệp IntelliJ .desktop

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[en_US]=/opt/idea/bin/idea128.png
Name[en_US]=IntelliJ IDEA
Exec=/opt/idea/bin/idea.sh
Name=IntelliJ IDEA
Icon=/opt/idea/bin/idea128.png
StartupNotify=true

Crashplan cung cấp tệp .desktop

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=CrashPlan
Categories=;
Comment=CrashPlan Desktop UI
Comment[en_CA]=CrashPlan Desktop UI
Exec=/usr/local/crashplan/bin/CrashPlanDesktop
Icon=/usr/local/crashplan/skin/icon_app_64x64.png
Hidden=false
Terminal=false
Type=Application
GenericName[en_CA]=

1
Tôi gặp một vấn đề tương tự khi ra mắt Minecraft trong Unity
Marco Ceppi

2
Cảm ơn Chúa, vấn đề đã ảnh hưởng đến người dùng chính (nó từng là vấn đề của AWN và những người đam mê dock khác) cuối cùng. Tôi hy vọng các nhà phát triển ứng dụng Java (và không chỉ Java) sẽ xem xét sửa lỗi này ngay bây giờ. Nhân tiện, Eclipse dường như không có vấn đề như vậy, trong khi tôi chưa bao giờ quản lý để sửa lỗi này cho MySQL Workbench và OpenOffice.org (đã thử khi tôi đang sử dụng AWN, trước khi LibreOffice xuất hiện).
Ivan

Vấn đề là về các ứng dụng sử dụng tên WM_CLASS ngu ngốc không thể nhận dạng theo như tôi có thể nhớ.
Ivan

Nếu không có vấn đề như vậy, tôi chắc chắn sẽ sử dụng Unity hoặc AWN. Nhưng cho đến nay, không phải mọi ứng dụng đều hỗ trợ chúng một cách hoàn hảo, tôi thích một thanh tác vụ truyền thống (vì tôi ghét các giải pháp nửa vời).
Ivan

Câu trả lời:


47

Thêm một chuỗi StartupWMClass vào tệp .desktop của bạn. Sử dụng xproplệnh để có được lớp này. Ví dụ :

$ xprop|grep WM_CLASS
 WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "java-lang-Thread"

$ cat /usr/share/applications/PHPStorm.desktop | grep StartupWM
StartupWMClass=sun-awt-X11-XFramePeer

Nhiều deatils trong chủ đề này (điều này về AWN, nhưng cũng hoạt động cho Unity)


1
Điều này hoạt động rất tốt cho Crashplan StartupWMClass=CrashPlannhưng IntelliJ cần một chút thuyết phục hơn. Tôi đã phải sử dụng thông tin từ cái này ( blog.jteam.nl/2011/01/09/ trên ) để nó hoạt động bình thường.
Tim

Như một phần nhỏ để cập nhật IntelliJ, tôi đã sửa đổi ý tưởng.vmoptions không phải là script script.sh trực tiếp. Thêm -javaagent:agent.jar=IntelliJ_IDEAvào tập tin.
Tim

1
Với IntelliJ 11, agent.jar không còn cần thiết nữa. StartupWMClass = jetbrains-idea
Tim

jetbrains-idea-cecho phiên bản cộng đồng. PS, cảm ơn rất nhiều Tim, 451F.
Synesso

2
@Ivan: bạn không phải sử dụng cả hai, bạn có thể sử dụng một trong hai . Vì vậy, nếu jetbrains-idealà một độc đáo, một trong những bạn muốn, sử dụng nó thay vì củasun-awt-X11-XFramePeer
MestreLion

9

Đối với Intellij Idea 11 trong Ubuntu 11.10 là cần thiết để thêm vào tệp .desktop của ý tưởng sau:

StartupWMClass=jetbrains-idea

4

Tôi đã có thể sửa lỗi này cho SQLDeveloper, đây là một chương trình java:

Sử dụng xprop (và sau đó nhấp vào cửa sổ SQLDeveloper), tôi đã tìm thấy dòng đầu ra sau:

WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "oracle-ide-boot-Launcher"

Dựa trên các nhận xét được tìm thấy ở trên và trong https://bugs.launchpad.net/unity/+orms/757991 , tôi đã thêm dòng sau vào tệp sqldeveloper.desktop tại địa phương của mình:

StartupWMClass=oracle-ide-boot-Launcher

1
Trong SQLDeveloper phiên bản 4 WM_ CLASS đổi thành "mặt trời-AWT-X11-XFramePeer", "oracle-ide-OSGi-boot-OracleIdeLauncher", do đó các thông số .desktop nên đổi thành: StartupWMClass = oracle-ide-OSGi-boot-OracleIdeLauncher
Pisu

2

Tôi đã ghi lại bản sửa lỗi cho Eclipse 4.x và 3.x tại đây .

Giải pháp này dành cho glx-dock hay còn gọi là Cairo-dock nhưng hoạt động cho tất cả các thanh tác vụ dựa vào WM_CLASS.

Trong trường hợp nhật thực, việc phóng cũng là một quá trình gồm hai bước.

        nhập mô tả hình ảnh ở đây

Về cơ bản, điều bạn cần làm là xác định plugin XML thương hiệu Eclipse áp dụng cho phiên bản Eclipse của bạn và sửa đổi thuộc application nametính. Khi các cửa sổ chính của bàn làm việc được tạo, Jface sẽ gọi SWT Display.setNamevà điều này sẽ đặt cho bạn WM_CLASS. Nếu đây là WM_CLASS được khai báo cho trình khởi chạy của bạn, thì các phiên bản đang chạy sẽ tìm thấy trình khởi chạy dock của chúng.

Đừng quên làm eclipse -cleanlần đầu tiên.

Tabbing qua cũng được cải thiện nhiều.

nhập mô tả hình ảnh ở đây


0

IntelliJ IDEA được bắt đầu bằng một tập lệnh ($ IDEA_HOME / bin / idea.sh). Khi trình khởi chạy của nó được nhấp, tập lệnh được thực thi, khởi động java thực thi và thoát ngay lập tức. Unity thông báo rằng ứng dụng bạn đã khởi động (tập lệnh) đã thoát - đó là lý do tại sao không có chỉ báo nào trên biểu tượng IDEA đầu tiên. Tuy nhiên, có một ứng dụng khác (từ ứng dụng được khởi chạy bởi trình khởi chạy) đang chạy tại thời điểm này - và đó là lý do tại sao biểu tượng IDEA thứ hai được hiển thị.

Tôi hy vọng việc khắc phục hành vi này sẽ sớm được thực hiện - nhưng nó không phải là một cách đơn giản. Nó sẽ phải liên quan đến một liên kết danh sách được duy trì bằng tay giữa các cửa sổ và trình khởi chạy mà chúng nên được liên kết.


0

Đối với CrashPlan, bạn có thể thử di chuyển tệp ứng dụng CrashPlan.desktop sang / usr / share / application. Chỉ các ứng dụng sống ở đó mới có thể bị khóa trong trình khởi chạy.

sudo mv ~/Desktop/CrashPlan.desktop /usr/share/applications/.

Sau đó thử sử dụng dấu gạch ngang để chạy CrashPlan.

Bạn có thể làm điều gì đó tương tự với IntelliJ IDEA, nhưng vì nó đang chạy một tập lệnh, tôi không chắc liệu nó có hoạt động chính xác không.


Tôi có cả hai tệp .desktop trong ~ / .local / share / ứng dụng và không có bất kỳ vấn đề nào khóa chúng với trình khởi chạy. Tôi giả sử rằng bạn có nghĩa là có sẵn để được khởi chạy từ Trình khởi chạy nhưng chưa được khởi chạy khi bạn nói bị khóa ...
Tim

Hừm. Tôi không thể đặt chúng trong launcher. Tôi đã làm cho tôi với alacarte (Trình chỉnh sửa menu). Có lẽ vì tôi có ~ / .local được liên kết với một nơi khác ... Các ứng dụng của bạn có hiển thị tam giác đang chạy (bên trái) và tam giác hoạt động (bên phải) không?
idbrii

Đối với phiên bản "ra mắt" của biểu tượng, có. Bạn có thể thấy tam giác đang chạy trong lần chụp đầu tiên. Tôi đã làm một số nghiên cứu thêm và nghĩ rằng tôi có một cách giải quyết cho các biểu tượng trùng lặp. Sẽ đăng một câu trả lời ở đây.
Tim

@ 451F đánh bại tôi để trả lời, tôi đã thêm một chút vào câu trả lời của anh ấy trong nhận xét của tôi về cách làm cho IntelliJ hoạt động tốt hơn.
Tim

0

Không có câu trả lời nào khác hiệu quả với tôi, nhưng cuối cùng tôi thực sự tìm thấy một giải pháp thậm chí còn đơn giản hơn.

Mở Intellij-Idea và trên thanh trên cùng tìm menu thả xuống công cụ . Sau đó, chọn nút Tạo màn hình nền . Nó sẽ tạo một mục .desktop hoạt động chính xác trong .local/share/applicationsthư mục của bạn , mục này sẽ được nhận ra bởi bất kỳ môi trường máy tính để bàn nào bạn đang sử dụng. Nó không tạo biểu tượng trùng lặp và thậm chí bạn có thể thay đổi biểu tượng nếu muốn.

Thật không may, sử dụng nosplashđối số mang lại sự cố biểu tượng trùng lặp, vì vậy tôi không chắc cách khắc phục điều đó.


0

Sau khi cài đặt IntelliJ IDEA 2017.2.5 trong Ubuntu 17.04 (với các biểu tượng Numix), tôi đã phải thay đổi dòng StartupWMClass=jetbrains-ideathành StartupWMClass=jetbrains-idea-cetrong tệp .desktop của chương trình để biểu tượng trùng lặp sẽ biến mất.

Tôi đoán "ce" là viết tắt của Community Edition mà tôi có, vì vậy tôi không biết tại sao giá trị của tài sản này trong tệp .desktop ban đầu không có hậu tố "ce".

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.