Как удалить дубликаты значков для & ldquo; запущенного & rdquo; Java-программы в лаунчере?

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

Duplicate Icons На этом изображении первый значок - это тот, который создан из файла .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]=
45
задан 5 August 2012 в 23:19

8 ответов

Добавьте строку 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

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

47
ответ дан 5 August 2012 в 23:19

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

StartupWMClass=jetbrains-idea
9
ответ дан 5 August 2012 в 23:19

Мне удалось исправить это для SQLDeveloper, который является программой на Java:

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

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

На основании комментариев, найденных выше и в https://bugs.launchpad.net/unity/+bug/757991 , я добавил следующую строку в свой локальный файл sqldeveloper.desktop:

StartupWMClass=oracle-ide-boot-Launcher
4
ответ дан 5 August 2012 в 23:19

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

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

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

enter image description here

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

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

Переход через табуляцию также занимает много времени. улучшено.

enter image description here

2
ответ дан 5 August 2012 в 23:19

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

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

0
ответ дан 5 August 2012 в 23:19

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

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

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

0
ответ дан 5 August 2012 в 23:19

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

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

0
ответ дан 5 August 2012 в 23:19

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

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

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

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

0
ответ дан 5 August 2012 в 23:19

Другие вопросы по тегам:

Похожие вопросы: