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


45

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

Дубликаты иконокНа этом изображении 1-й значок создан из файла .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]=

1
Я сталкиваюсь с подобной проблемой при запуске Minecraft в Unity
Марко Чеппи

2
Слава Богу, что проблема затрагивает основных пользователей (раньше это была проблема только для AWN и других любителей док-станции). Я надеюсь, что разработчики приложений на Java (и не только на Java) решат эту проблему сейчас. Кстати, в Eclipse, похоже, такой проблемы нет, хотя мне никогда не удавалось исправить это для MySQL Workbench и OpenOffice.org (пробовал, когда я использовал AWN, до появления LibreOffice).
Иван

Проблема в том, что приложения используют глупые неидентифицирующие имена WM_CLASS, насколько я помню.
Иван

Если бы там не было такой проблемы, я бы наверняка использовал Unity или AWN. Но поскольку не каждое приложение поддерживает их идеально, я предпочитаю традиционную панель задач (потому что я ненавижу полу-решения).
Иван

Ответы:


47

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


1
Это прекрасно работает для Crashplan, StartupWMClass=CrashPlanно IntelliJ нужно было немного убедительнее. Я должен был использовать информацию из этого ( blog.jteam.nl/2011/01/09/… ), чтобы заставить это работать должным образом.
Тим

В качестве небольшого дополнения к обновлению IntelliJ я изменил файл idea.vmoptions, а не сценарий idea.sh напрямую. Добавьте -javaagent:agent.jar=IntelliJ_IDEAв файл.
Тим

1
С IntelliJ 11 больше не нужен agent.jar. StartupWMClass = jetbrains-idea
Тим,

И jetbrains-idea-ceдля Community Edition. PS спасибо большое за Тим, 451F.
Synesso

2
@ Иван: вам не нужно использовать оба, вы можете использовать любой из них. Так что, если jetbrains-ideaэто единственный один, тот , который вы хотите использовать его вместо того, чтобы изsun-awt-X11-XFramePeer
MestreLion

9

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

StartupWMClass=jetbrains-idea

4

Мне удалось это исправить для 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

1
В SQLDeveloper версии 4 WM_CLASS был изменен на «sun-awt-X11-XFramePeer», «oracle-ide-osgi-boot-OracleIdeLauncher», поэтому параметр .desktop должен быть изменен на: StartupWMClass = oracle-ide-osgi-boot-OracleIdeLauncher
Пису

2

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

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

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

        введите описание изображения здесь

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

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

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

введите описание изображения здесь


0

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

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


0

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

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

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

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


У меня есть оба файла .desktop в ~ / .local / share / Applications, и у меня нет проблем с блокировкой их на панели запуска. Я предполагаю, что вы имеете в виду доступный для запуска из Launcher, но еще не запущенный, когда вы говорите заблокирован ...
Тим

Гектометр Я не могу поместить их в пусковую установку. Я сделал мой с Alacarte (редактор меню). Может быть, это потому, что у меня есть ~ / .local, связанный где-то еще ... Ваши приложения показывают бегущий треугольник (левая сторона) и активный треугольник (правая сторона)?
idbrii

Для "запущенной" версии иконки да. Вы можете увидеть бегущий треугольник на первом снимке. Я провел еще какое-то исследование и думаю, что у меня есть рабочий обход дублирующих значков. Выложу ответ здесь.
Тим

@ 451F обошел меня с ответом, я добавил немного к его ответу в своих комментариях о том, как заставить IntelliJ работать лучше.
Тим

0

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

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

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


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.