Чому деякі відкриті додатки відображаються як "знаки запитання" у запуску Unity?


22

У мене виникають проблеми з парою програм, які мають пускові установки в єдності, але потім створюють окремий значок після запуску. Чи можливо, щоб пускова установка відстежувала вікна, які вона створює, щоб краще організувати? Або це помилка в самому Unity?

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

Це може не мати значення, але ця конкретна програма є монопрограмою, а піктограма, яку породив, вказана на панелі.


@ j-johan-edwards: Я не впевнений, до якої програми слід посилатися, але це KeePass2, доступний у Центрі програмного забезпечення.
Ендрю Редд

У деяких випадках ви можете полегшити це, встановивши StartupWMClassвластивість у запуску робочого столу програми: askubuntu.com/questions/36434/…
Glutanimate

Відповіді:


23

Що відбувається

Такі проблеми стосуються рамки відповідності додатків Unity. Для спрощення технічних деталей Ubuntu - це вікна програм та додатки. Ubuntu потрібно «відгадати», якій програмі належить певне вікно. І іноді ця здогадка не вдається, і на пусковій установці з’являється знак питання.

Поломка може бути наслідком:

  1. Помилка в BAMF (згадана вище рамка відповідності додатку).
  2. Несправний опис програми (він же ".desktop" файл).
  3. Відсутність взагалі будь-якого опису програми. Виконавчі файли, що запускають Windows, по суті не мають цих метаданих.

Програма, показана у запитанні (KeePass2), страждає від проблеми типу 1, про яку повідомлялося у відповідному трекері помилок .

Приклади проблем

Наведені нижче приклади - технічні, спрямовані на програмістів, які хочуть, щоб їх власне додаток відображалося належним чином у запуску Ubuntu.

Проблема 3 - Немає опису програми

Для того, щоб програма інтегрувалася з Unity, тобто її можна було шукати на тире та розміщувати в панелі запуску - для цього потрібно мати запис на робочому столі. Такі дані містяться в /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Шлях будучи символічне посилання , а не звичайний файл
  • Виконавчим файлом є сценарій, який запускає основний виконуваний файл.

У цих випадках програмістам не залишається іншого варіанту, як використовувати обхідне рішення, як-от видалити символічну абстракцію посилання або безпосередньо посилання на виконуваний файл. Жодна з них не вимагає самої специфікації запису на робочому столі.


І ще одна річ. Ви можете мати .desktopфайли для однієї програми як у, так ~/.local/share/applications/і в /usr/share/applications/. Перший файл переосмислює другий, навіть якщо значок не вказаний в ньому.

1

Вікно може бути узгоджене з додатком лише у тому випадку, якщо було встановлено властивість WM_CLASS. Для цього в X11 ви використовуєте:

XSetClassHint( display, window, &class_hints );

Вам потрібно передати вказівник на структуру XClassHint з полями 'res_name' та 'res_class'.


-1

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

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

2
Це абсолютно не пов'язане з питанням.
Мартін Торнтон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.