Я хочу Смелый и Передача автоматически запустить на системном лотке, когда я вхожу в систему, Если я просто добавляю их для автозапуска, они запускают открытый, и я должен закрыть их вручную. Как я делаю это?
Я думаю, что Это ясно из описания вопроса, проблема не закрывает эти приложения к системному лотку или автоматически запускает их. Я хочу, чтобы они автоматически запустились как значки на моем системном лотке, когда я вхожу в систему.
Почему мой вопрос был отмечен как дубликат вопроса, который не является тем, что я спросил?
Если приложение предлагает опцию запустить в лотке, несомненно который является предпочтительным вариантом.
Если не однако, любой необходимо отредактировать код приложения и перекомпилировать (не самая очевидная опция), или необходимо "восстановить" поведение процедуры запуска. Немного отредактированная версия этого сценария может сделать задание в этом случае.
Я сознательно игнорирую строку в Вашем вопросе:
"не закрывая эти приложения к системному лотку"
Начиная с закрытия окна после того, как это появилось, оставив значок в лотке, просто единственная опция, которую мы имеем. Эффективно Вы не заметите различия как бы то ни было.
wmctrl
) для окон с pid приложения Вы запустили.Если окно появляется, оно сразу закрывается корректно, с помощью wmctrl
команда:
wmctrl -ic <window_id>
Результат:
без передачи (в этом примере) окно вообще. Очевидно, изображение от Единицы, но это работает то же над 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"