Как удалить повторяющиеся значки для «запущенных» java-программ в панели запуска?

43

При запуске java-программ (например, IntelliJ IDEA и Crashplan) в программе запуска Unity Unity отображаются дубликаты значков (см. изображение). Для IntelliJ я создал файл .desktop, для Crashplan файл .desktop поставляется с приложением. Есть ли что-то, что можно изменить в файлах .desktop (или где-то еще), которые могут помешать этому возникнуть? Я не смог найти отчет об ошибке для единства, но такие программы, как Gnome-Do / Docky, имеют ошибку отчеты , и для предотвращения этого потребовалось внести внутренние изменения в свои приложения.

На этом изображении первый значок - тот, который создан из файла .desktop, а второй значок после его запуска. Второй значок исчезает при закрытии приложения.

Пользовательский файл 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 предоставляет файл .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]=
    
задан Tim 22.04.2011 в 15:59
источник

8 ответов

43

Добавьте строку StartupWMClass в файл .desktop. Используйте команду xprop для получения этого класса. Например:

$ 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

Больше datils в этой нити (это об AWN, но работает и для Unity)

    
ответ дан 451F 05.05.2011 в 14:35
источник
8

Для Intellij Idea 11 под Ubuntu 11.10 необходимо добавить в файл .desktop этой идеи следующую строку:

StartupWMClass=jetbrains-idea
    
ответ дан topr 17.12.2011 в 15:19
3

Я смог исправить это для SQLDeveloper, который представляет собой java-программу:

Используя xprop (и затем щелкнув по окну SQLDeveloper), я нашел следующую строку вывода:

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

Основываясь на комментариях, найденных выше, и в ссылке , я добавил следующую строку в свой локальный sqldeveloper. файл рабочего стола:

StartupWMClass=oracle-ide-boot-Launcher
    
ответ дан Corey 30.11.2011 в 18:20
1

Я зарегистрировал исправление для Eclipse 4.x и 3.x здесь .

Это решение для glx-dock aka Cairo-dock, но работает для всех панелей задач, полагающихся на WM_CLASS .

В случае затмения запуск также двухэтапный.

В принципе, вам нужно определить логотип Eclipse для plugin.xml, применимый к вашей версии Eclipse, и изменить свойство application name . Когда будут созданы основные окна рабочего места, Jface вызовет SWT Display.setName , и это установит вам WM_CLASS. Если это объявленный WM_CLASS для вашей пусковой установки, то запущенные экземпляры найдут свою док-станцию.

Не забывайте делать eclipse -clean в первый раз.

Вкладка также значительно улучшена.

    

ответ дан Delete 30.05.2013 в 08:37
0

IntelliJ IDEA запускается скриптом ($ IDEA_HOME / bin / idea.sh). Когда щелкнет его пусковая установка, выполняется сценарий, который запускает исполняемый файл java и сразу же выходит. Unity отмечает, что приложение, которое вы начали (сценарий), уже вышло - вот почему на первом значке IDEA нет индикатора. Тем не менее, на данный момент есть приложение (из исполняемого файла, запускаемого программой запуска), и поэтому отображается второй значок IDEA.

Я надеюсь, что исправление для этого поведения будет реализовано в ближайшее время - но это не очень просто. Это должно было бы включать поддерживаемые вручную списки связей между окнами и пусковыми установками, с которыми они должны быть связаны.

    
ответ дан Weirdfellow 02.05.2011 в 12:08
0

Для CrashPlan вы можете попробовать переместить файл приложения CrashPlan.desktop в / usr / share / applications. Только те приложения, которые там живут, могут быть заблокированы в панели запуска.

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

Затем попробуйте использовать тире для запуска CrashPlan.

Возможно, вы можете сделать что-то подобное с IntelliJ IDEA, но поскольку он запускает скрипт, я не уверен, что он будет работать правильно.

    
ответ дан idbrii 04.05.2011 в 02:06
0

Ни один из других ответов не работал для меня, но в конце концов я нашел еще более простое решение.

Откройте Intellij-Idea, а на верхней панели найдите раскрывающееся меню tools . Затем выберите кнопку Создать запись рабочего стола . Он создаст правильно действующую запись .desktop в папке .local/share/applications , которая должна распознаваться любой рабочей средой, которую вы используете. Он не создает дубликат значка, и вы даже можете изменить значок, если хотите.

К сожалению, использование аргумента nosplash возвращает проблему с повторяющимся значком, поэтому я не уверен, как это исправить.

    
ответ дан rusins 17.03.2016 в 17:25
0

После установки IntelliJ IDEA 2017.2.5 под Ubuntu 17.04 (с иконками Numix) мне пришлось изменить строку StartupWMClass=jetbrains-idea на StartupWMClass=jetbrains-idea-ce в файле .desktop программы, чтобы значок дубликата исчез.

Я думаю, что «ce» означает Community Edition, который у меня есть, поэтому я не знаю, почему значение этого свойства в файле .desktop изначально не имело суффикса «ce».

    
ответ дан tom 19.10.2017 в 11:27