Почему некоторые открытые приложения отображаются как «вопросительные знаки» в Unity launcher?

У меня проблема с несколькими программами, в которых есть пусковые установки в единстве, но затем создайте отдельный значок после запуска. Возможно ли, чтобы пусковая установка отслеживала окна, которые она порождает, чтобы организовать лучше? Или это ошибка в самом Единстве?

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

Это может быть неважно, но эта конкретная программа является монопрограммой, а иконка, которая появляется, отображается как панель.

Что происходит

Такие проблемы относятся к платформе соответствия приложений Unity. Чтобы упростить технические детали, окна программы и приложения представляют собой две отдельные вещи для Ubuntu. Ubuntu нужно «угадать», какое приложение принадлежит определенному окну. И иногда эта догадка терпит неудачу, и в панели запуска появляется вопросительный знак.

Неисправность может быть вызвана:

  1. Ошибка в BAMF (упомянутая выше структура соответствия приложений).
  2. Неверное описание приложения (файл «.desktop»).
  3. Отсутствие описания приложения вообще. Исполняемые файлы, которые запускают окна, по своей сути не имеют этих метаданных.

Приложение, показанное в вопросе (KeePass2), страдает от проблемы типа 1, о которой сообщается в соответствующий трекер ошибок .

Примеры проблем

Нижеприведенные примеры являются техническими, ориентированными на программистов, которые хотят, чтобы их собственное приложение отображалось правильно в пусковой установке Ubuntu.

Проблема 3 – Нет описания приложения

Чтобы приложение могло интегрироваться с Unity, то есть быть доступным для поиска в Dash и помещаться в Launcher, необходимо иметь запись на рабочем столе. Такие записи помещаются в /usr/share/applications/ , /usr/local/share/applications/ и $HOME/.local/share/applications/ (последние два предназначены для стороннего программного обеспечения, общесистемного и пользовательского – соответственно). Они заканчиваются расширением .desktop и следуют этому базовому формату:

 [Desktop Entry] Type=Application Name=My Application's Name Icon=/file/path/of/my/icon Exec=/file/path/of/my/executable 

Эта запись запускает программу, вызывая исполняемый файл Exec . Всякий раз, когда эта программа отображает окно или диалог, Unity замечает, что ее исполняемый файл «принадлежит» этому описанию приложения и использует данное Name и Icon в панели запуска.

Это пример с баребонами. Формальная спецификация охватывает многие дополнительные функции.

Проблема 2 – Неверное описание приложения

Предположим, что my_app.desktop существует в допустимом каталоге приложения, но:

  • /file/path/of/my/icon не существует в файловой системе.
  • /file/path/of/my/icon – это не изображение.
  • запись использует некорректный синтаксис или недопустимые теги.

В любом из вышеприведенных случаев Ubuntu не сможет правильно отобразить окно приложения в панели запуска.

Проблема 1 – Ошибка в BAMF

Начиная с Ubuntu 11.10, BAMF имеет ряд ошибок, которые предотвращают правильное сопоставление приложений. Общие (временные) подводные камни включают:

  • Путь Exec является символической ссылкой, а не обычным файлом
  • Исполняемый файл является скриптом, который запускает основной исполняемый файл.

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

Окно может быть привязано только к приложению, если установлено свойство WM_CLASS. Для этого в X11 вы используете:

 XSetClassHint( display, window, &class_hints ); 

Вам нужно передать указатель на структуру XClassHint с поля «res_name» и «res_class».

У меня было несколько проблем с 16.04, включая серые значки, и иногда тачпад становился неустойчивым (Acer V15 nitro), а также программный центр (возможно, другие значки тоже) не открывался бы из значка (только из команды терминала). Я нашел рекомендацию где-то удалить и переустановить программное обеспечение gnome. Так как я сделал это, вся система была на 100% стабильнее, а не серые значки и отлично работает. Сначала это выглядело страшно, когда я перезагрузился после этого изменения – много системных сообщений при перезагрузке – так сделайте это на свой страх и риск.

 sudo apt-get autoremove gnome-software && sudo apt-get install gnome-software