Почему мой пользовательский файл запуска создает две иконки на панели запуска?

Я сделал файл .desktop, чтобы иметь возможность запускать свой скрипт на python с панели запуска.

Я установил скрипт Python как исполняемый файл, и он работает нормально, если дважды щелкнуть и запустить его из файлового менеджера. Он также работает нормально от терминала.

Файл рабочего стола находится в /.local/share/applications/ и выглядит следующим образом:

[Desktop Entry]
Version=1.0
Name=Simple Timer
Comment=Timer
Exec=python3 /home/user/app/timer.py
Icon=/home/user/app/icon/timer.png
Path=/home/user/app/timer/
Terminal=false
Type=Application
Categories=Utility;Application;

Если я ищу «Таймер» в Dash, он появляется. Я могу запустить его оттуда. Запуск его создаст две дублированные иконки на панели запуска, как показано на рисунке.

enter image description here

  • Первый значок будет пульсировать в течение примерно 10 секунд, а затем исчезнет. Этот значок можно заблокировать на панели запуска. Если этот значок заблокирован на панели запуска, он также будет пульсировать в течение нескольких секунд после закрытия окна приложения, во время которого он станет неактивным.
  • Второй значок не блокируется для панели запуска и исчезнет, ​​только если окно приложения закрыто.

Если я запускаю скрипт из файлового менеджера. Создает 1 значок запуска, который ведет себя нормально.

Я убедился, что в /usr/share/applications/ нет дубликатов файлов .desktop. Мой созданный файл .desktop существует только в /.local/share/applications/, и если он будет удален, я больше не смогу искать свой таймер в Dash или привязывать его к панели запуска.

Как я могу исправить как пульсирующую / не щелкающую проблему, так и проблему с двойным значком?

2
задан 18 May 2019 в 11:41

1 ответ

Средство запуска не распознает окно как "его"

Окна Specifically Tkinter не распознают свое "собственное" окно (класс). Это заставляет значок мигнуть напрасно, ожидая его окна. После того как окно появляется, средство запуска не распознает свое собственное окно и высовывается из средства запуска, когда тайм-аут передал. Так как "нормальное" окно всегда представлено значком в средстве запуска, Вас оставляют с универсальным значком (обычно, если нет никакого дублирующегося средства запуска), или другой (см. далее ниже).

Можно просто зафиксировать это путем добавления:

StartupWMClass=Tk

к Вашему средству запуска (так как это - окно Tkinter),

Посмотрите на различие (я дал средству запуска значок Firefox для тестирования):

  1. без строки, при открытии нескольких окон. Наблюдайте три универсальных значка + мигающий значок Firefox, исчезая после 10 секунд или около этого.

    enter image description here

  2. Теперь я добавляю строку StartupWMClass=Tk, все окна сгруппированы в том же значке:

    enter image description here

Почему никакой универсальный значок в Вашем случае?

Добавление WM_CLASS в Ваш .desktop файл устранит Вашу проблему. Я вполне уверен однако, Вы случайно создали дополнительное средство запуска (или имейте созданный тот Единицы автоматически). Заглянуть /.local/share/applications/ и сделайте свой исполняемый файл средств запуска. Значок покажет. Скорее всего, у Вашей простофили будет "единица" на ее имя.

В целом, как найти WM_CLASS окна?

  • Откройте терминал, введите

     xprop WM_CLASS
    
  • Впоследствии нажмите на окно. две строки кажутся, разделенными запятой. Тот в случае Заголовка является одной потребностью yoiu добавить.

Примечания

Не Ваша проблема, но:

Вы не должны устанавливать строки ниже:

  • Version=1.0 (никакой вред, но не нужный)
  • Так как Ваш сценарий является исполняемым файлом, Вам не нужно python3 (у Вас может быть вызов сценария интерпретатор непосредственно),
  • Path=/home/user/app/timer/ (ненужный)
  • Terminal=false (это - значение по умолчанию),
2
ответ дан 18 May 2019 в 11:41

Другие вопросы по тегам:

Похожие вопросы: