Как я автоматически запускаю приложение на системном лотке?

Я хочу Смелый и Передача автоматически запустить на системном лотке, когда я вхожу в систему, Если я просто добавляю их для автозапуска, они запускают открытый, и я должен закрыть их вручную. Как я делаю это?

Я думаю, что Это ясно из описания вопроса, проблема не закрывает эти приложения к системному лотку или автоматически запускает их. Я хочу, чтобы они автоматически запустились как значки на моем системном лотке, когда я вхожу в систему.

Почему мой вопрос был отмечен как дубликат вопроса, который не является тем, что я спросил?

0
задан 25 February 2016 в 00:43

1 ответ

Предпочтительный вариант

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

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

Об этом ответе

Я сознательно игнорирую строку в Вашем вопросе:

"не закрывая эти приложения к системному лотку"

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

Объяснение

  • Сценарий запускает приложение, выполняя команду, которую Вы дали как первый аргумент.
  • Затем сценарий проверяет список окна (с помощью wmctrl) для окон с pid приложения Вы запустили.
  • Если окно появляется, оно сразу закрывается корректно, с помощью wmctrl команда:

    wmctrl -ic <window_id>
    
  • Результат:

    enter image description here

    без передачи (в этом примере) окно вообще. Очевидно, изображение от Единицы, но это работает то же над lxde.

Предотвратить бесконечный цикл, если окно не могло бы появиться по некоторым причинам, методы сценария ограничение по времени 30 секунд для окна для появления.

Примечание:

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

Сценарий

#!/usr/bin/env python3
import subprocess
import sys
import time

command = sys.argv[1]
command_check = command.split("/")[-1]

subprocess.Popen(["/bin/bash", "-c", command])

t = 1
while t < 30:
    try:
        w_list = [l.split() for l in subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8").splitlines()]
        proc = subprocess.check_output(["pgrep", "-f", command_check]).decode("utf-8").strip().split()
        match = sum([[l[0] for l in w_list if p in l] for p in proc], [])
        subprocess.Popen(["wmctrl", "-ic", match[0]])
        break
    except (IndexError, subprocess.CalledProcessError):
        pass
    t += 1
    time.sleep(1)

Как использовать

  • Потребности сценария wmctrl:

    sudo apt-get wmctrl
    
  • Скопируйте сценарий в пустой файл, сохраните его как run_intray.py

  • Тестовый прогон сценарий с приложением как аргумент, например, в transmission пример:

    python3 /path/to/run_intray.py transmission-gtk
    
  • Если все хорошо работает, можно добавить его для Запущения Приложения, но отметить, что, скорее всего, необходимо будет добавить маленькое повреждение перед командой, чтобы рабочий стол рос абсолютно сначала:

    /bin/bash -c "sleep 15 && python3 /path/to/run_intray.py transmission-gtk"
    
0
ответ дан 24 July 2019 в 10:26

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

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