Як я можу видалити повторювані піктограми для «запущених» програм Java на пусковій програмі?


45

Під час запуску програм Java (наприклад, IntelliJ IDEA та Crashplan) у запуску Natty's 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]=

1
Я відчуваю подібну проблему під час запуску Minecraft в Unity
Marco Ceppi

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 я змінив ідею.vmoptions, а не ідею.sh-скрипт безпосередньо. Додати -javaagent:agent.jar=IntelliJ_IDEAу файл.
Тім

1
З IntelliJ 11 агент.jar більше не потрібен. StartupWMClass = jetbrains-idea
Тім

І jetbrains-idea-ceдля видання Community PS, дякую купу Тіма, 451F.
Синесо

2
@Ivan: вам не потрібно використовувати обидва, ви можете використовувати будь- який. Так що, якщо 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
У версії 4 SQLDeveloper 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 брендингу 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 / застосунках, і не виникає жодних проблем, щоб зафіксувати їх у запуску. Я припускаю, що ви маєте на увазі доступні для запуску з Launcher, але ще не запущені, коли ви скажете заблоковані ...
Тім

Гм. Я не в змозі розмістити їх у пусковій установці. Я зробив шахту з алакартом (редактор меню). Можливо, це тому, що я ~ / .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.