Вопрос или проблема
Приложение на Java, которое я написал, должно запускаться с помощью файла .desktop
, чтобы я мог добавить его в ubuntu-dash.
Оно работает только тогда, когда имя файла .desktop
совпадает с полным именем моего стартового класса: имя должно быть точно org-mypackage-MyMainClass.desktop
.
Если, например, имя только MainClass.desktop
, приложение запускается, но значок в ubuntu-dash не отображается, и нельзя прикрепить его на панель.
Почему, и как этого избежать?
Я нашёл решение здесь: https://stackoverflow.com/a/69404254: установите поле StartupWmClass
с полным именем класса java (но с дефисами вместо точек) в файле .desktop
:
Name=My application name
StartupWMClass=org-mypackage-MyMainClass
Благодаря этому решению, сам файл .desktop может иметь любое имя: приложение всегда будет известно как “My application name”.
Ответ или решение
Для создания .desktop-файла для вашего Java-приложения в Ubuntu, необходимо учитывать несколько важных моментов, чтобы обеспечить его корректное отображение и использование в ubuntu-dash.
Проблема с названием файла
Вы столкнулись с ситуацией, когда .desktop-файл должен иметь имя, точно соответствующее полностью квалифицированному имени класса-старта вашего Java-приложения. Однако, имени, состоящего только из названия класса, недостаточно, что приводит к некорректному отображению и невозможности закрепления иконки приложения на панели.
Решение проблемы с использованием StartupWMClass
Как вы уже заметили, решение заключается в использовании параметра StartupWMClass
внутри .desktop-файла. Этот параметр позволяет системе правильно идентифицировать окно вашего приложения и связывать его с иконкой. Вот как это сделать:
-
Создание .desktop-файла: Вы можете создать файл с любым названием, например,
MyApp.desktop
. -
Структура .desktop-файла: Определите параметры внутри файла следующим образом:
[Desktop Entry] Version=1.0 Type=Application Name=Имя вашего приложения Exec=java -jar /путь/к/вашему/приложению.jar Icon=/путь/к/значку.png Terminal=false StartupWMClass=org-mypackage-MyMainClass
-
Описание параметров:
Name
— имя вашего приложения, которое будет отображаться.Exec
— команда для запуска Java-приложения.Icon
— путь к иконке вашего приложения.Terminal
— указывает, нужно ли запускать в терминале (обычноfalse
для графических приложений).StartupWMClass
— важный параметр: замените точки в полностью квалифицированном имени вашего класса на дефисы. Это связывает окно вашего приложения с иконкой.
Как это работает?
Ubuntu использует WM_CLASS для идентификации окон приложений. Задав правильное значение StartupWMClass
, вы гарантируете, что ваше приложение распознается корректно. Таким образом, система сможет отобразить правильную иконку и позволит закрепить приложение на панели.
Вывод
Это небольшое уточнение позволяет сделать ваш .desktop-файл более гибким и независимым от названия самого файла. Использование StartupWMClass
— это ключевой аспект обеспечения правильного функционирования Java-приложений в среде GNOME. Таким образом, вы можете обеспечить профессиональный вид и функциональность вашего приложения в Ubuntu.