Jak mogę usunąć duplikaty ikon dla „uruchomionych” programów Java w programie uruchamiającym?


45

Podczas uruchamiania programów Java (takich jak IntelliJ IDEA i Crashplan) w programie uruchamiającym Natty's Unity wyświetlane są duplikaty ikon (patrz zdjęcie). Dla IntelliJ stworzyłem plik .desktop, dla Crashplan plik .desktop jest dostarczany z aplikacją. Czy jest coś, co można zmienić w plikach .desktop (lub gdzie indziej), co może temu zapobiec? Nie mogłem znaleźć raportu o błędach dla samej jedności, ale programy takie jak Gnome-Do / Docky mają raporty o błędach i musiałem wprowadzić wewnętrzne zmiany w swoich aplikacjach, aby temu zapobiec.

Duplikaty ikonNa tym obrazie pierwsza ikona jest ikoną utworzoną z pliku .desktop, a druga ikona jest po uruchomieniu. Druga ikona znika po zamknięciu aplikacji.

Niestandardowy plik .desktop IntelliJ

#!/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 dostarcza plik .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
Podobny problem występuje podczas uruchamiania gry Minecraft w Unity
Marco Ceppi

2
Dzięki Bogu, problem ten dotyka w końcu użytkowników z głównego nurtu (kiedyś był to problem tylko dla AWN i innych entuzjastów stacji dokującej). Mam nadzieję, że programiści aplikacji Java (i nie tylko Java) rozważą teraz naprawienie tego. Nawiasem mówiąc, Eclipse wydaje się nie mieć takiego problemu, podczas gdy nigdy nie udało mi się naprawić tego dla MySQL Workbench i OpenOffice.org (próbowałem, gdy korzystałem z AWN, zanim pojawił się LibreOffice).
Ivan

Problem polega na tym, że o ile pamiętam, aplikacje używają głupich, nierozpoznawalnych nazw WM_CLASS.
Ivan

Jeśli nie byłoby takiego problemu, na pewno użyłbym Unity lub AWN. Ale o ile nie każda aplikacja doskonale je obsługuje, wolę tradycyjny pasek zadań (bo nienawidzę pół-rozwiązań).
Ivan

Odpowiedzi:


47

Dodaj ciąg StartupWMClass do pliku .desktop. Użyj xproppolecenia, aby uzyskać tę klasę. Na przykład :

$ 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

Więcej deatilów w tym wątku (dotyczy AWN, ale działa również dla Unity)


1
Działa to świetnie w Crashplan, StartupWMClass=CrashPlanale IntelliJ potrzebował nieco bardziej przekonującego. Musiałem użyć informacji z tego ( blog.jteam.nl/2011/01/09/… ), aby działało poprawnie.
Tim

Na marginesie, aby zaktualizować IntelliJ, zmodyfikowałem bezpośrednio skrypt idea.vmoptions, a nie skrypt idea.sh. Dodaj -javaagent:agent.jar=IntelliJ_IDEAdo pliku.
Tim

1
W przypadku IntelliJ 11 agent.jar nie jest już potrzebny. StartupWMClass = jetbrains-idea
Tim

I jetbrains-idea-cedo wydania Community Edition. PS, wielkie dzięki Tim, 451F.
Synesso

2
@Ivan: nie musisz używać obu, możesz użyć jednego z nich. Więc jeśli jetbrains-ideajest wyjątkowa, tym którego chcesz używać go zamiast zsun-awt-X11-XFramePeer
MestreLion

9

W przypadku Intellij Idea 11 pod Ubuntu 11.10 konieczne jest dodanie w pliku .desktop pomysłu następującego wiersza:

StartupWMClass=jetbrains-idea

4

Udało mi się to naprawić dla SQLDeveloper, który jest programem Java:

Za pomocą xprop (a następnie kliknięcia okna SQLDeveloper) znalazłem następujący wiersz danych wyjściowych:

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

W oparciu o komentarze podane powyżej oraz w https://bugs.launchpad.net/unity/+bug/757991 dodałem następującą linię do mojego lokalnego pliku sqldeveloper.desktop:

StartupWMClass=oracle-ide-boot-Launcher

1
W wersji SQLDeveloper 4 WM_CLASS zmieniono na „sun-awt-X11-XFramePeer”, „oracle-ide-osgi-boot-OracleIdeLauncher”, więc parametr .desktop powinien zostać zmieniony na: StartupWMClass = oracle-ide-osgi-boot-OracleIdeLauncher
Pisu

2

Udokumentowałem poprawkę dla Eclipse 4.xi 3.x tutaj .

To rozwiązanie jest przeznaczone dla glx-dock, czyli Cairo-dock, ale działa dla wszystkich pasków zadań, na których się opiera WM_CLASS.

W przypadku zaćmienia uruchomienie jest również procesem dwuetapowym.

        wprowadź opis zdjęcia tutaj

Zasadniczo musisz zidentyfikować wtyczkę brandingową Eclipse.xml odpowiednią dla twojej wersji Eclipse i zmodyfikować application namewłaściwość. Po utworzeniu głównych okien środowiska roboczego Jface wywoła SWT, Display.setNamea to ustawi ci WM_CLASS. Jeśli jest to zadeklarowany WM_CLASS dla programu uruchamiającego, uruchomione instancje znajdą jego program uruchamiający dok.

Nie zapomnij zrobić eclipse -cleanza pierwszym razem.

Wprowadzanie tabulacji również zostało znacznie ulepszone.

wprowadź opis zdjęcia tutaj


0

IntelliJ IDEA jest uruchamiany przez skrypt ($ IDEA_HOME / bin / idea.sh). Po kliknięciu programu uruchamiającego skrypt jest uruchamiany, co uruchamia plik wykonywalny Java i natychmiast kończy działanie. Unity zauważa, że ​​uruchomiona aplikacja (skrypt) już się zakończyła - dlatego na pierwszej ikonie IDEA nie ma wskaźnika. Jednak w tej chwili działa inna (z pliku wykonywalnego uruchomionego przez program uruchamiający) aplikacja - i dlatego wyświetlana jest druga ikona IDEA.

Mam nadzieję, że poprawka tego zachowania zostanie wkrótce wdrożona - ale nie jest to bardzo proste. Musiałby obejmować ręcznie obsługiwane powiązania list między oknami i programami uruchamiającymi, z którymi powinny być powiązane.


0

W przypadku CrashPlan możesz spróbować przenieść plik aplikacji CrashPlan.desktop do / usr / share / applications. W programie uruchamiającym można zablokować tylko aplikacje, które tam mieszkają.

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

Następnie spróbuj użyć myślnika, aby uruchomić CrashPlan.

Możesz być w stanie zrobić coś podobnego z IntelliJ IDEA, ale ponieważ uruchamia skrypt, nie jestem pewien, czy zadziała poprawnie.


Mam oba pliki .desktop w ~ / .local / share / applications i nie mam problemów z zablokowaniem ich w programie uruchamiającym. Zakładam, że masz na myśli dostępny zostać uruchomiony z Launcher, ale jeszcze nie rozpoczęła, kiedy mówisz zablokowana ...
Tim

Hm Nie jestem w stanie umieścić ich w programie uruchamiającym. Zrobiłem mój z alacarte (edytor menu). Może to dlatego, że mam ~ / .local powiązany z innym miejscem ... Czy twoje aplikacje pokazują trójkąt bieżący (lewa strona) i aktywny trójkąt (prawa strona)?
idbrii

W przypadku „uruchomionej” wersji ikony tak. W pierwszym ujęciu widać trójkąt do biegania. Zrobiłem trochę więcej badań i myślę, że mam działające obejście dla duplikatów ikon. Wyśle odpowiedź tutaj.
Tim

@ 451F pobił mnie do odpowiedzi, dodałem trochę do jego odpowiedzi w moich komentarzach na temat tego, jak sprawić, by IntelliJ działał lepiej.
Tim

0

Żadna z pozostałych odpowiedzi nie działała dla mnie, ale ostatecznie znalazłem jeszcze prostsze rozwiązanie.

Otwórz Intellij-Idea, a na górnym pasku znajdź menu rozwijane narzędzi . Następnie wybierz przycisk Utwórz wpis na pulpicie . W .local/share/applicationsfolderze zostanie utworzony poprawnie działający wpis .desktop , który powinien zostać rozpoznany przez dowolne używane środowisko pulpitu. Nie tworzy duplikatu ikony, a nawet możesz zmienić ikonę, jeśli chcesz.

Niestety użycie nosplashargumentu przywraca problem z duplikatem ikony, więc nie jestem pewien, jak to naprawić.


0

Po zainstalowaniu IntelliJ IDEA 2017.2.5 pod Ubuntu 17.04 (z Numix ikon) musiałem zmienić linię StartupWMClass=jetbrains-ideado StartupWMClass=jetbrains-idea-cew .desktop pliku programu tak duplikat ikona zniknie.

Wydaje mi się, że „ce” oznacza Community Edition, które mam, więc nie wiem, dlaczego wartość tej właściwości w pliku .desktop pierwotnie nie miała sufiksu „ce”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.