Скрыть графический интерфейс программы после автоматического запуска при старте

Скрыть графический интерфейс программы после автоматического запуска при старте

После перенесенногоошибка в Redshift, я нашел отличную замену,Ирис.

Я поместил Irisпапку в свой homeкаталог и добавил следующую команду в Startup Applications sh /home/arun/Iris/Iris.sh.

Все это работает великолепно, но при запуске также запускается окно настроек GUI. Все, что мне действительно нужно, это маленькая иконка индикатора панели. Что-то вроде функции "Скрыть" в "Элементах входа" OS X.

Можно ли этого достичь?

решение1

Окно настроек Iris

Если мы закроем окно настроек Iris с помощью X, то онопо-видимомузакрыто.

Если мы сделаем то же самое, но с помощью wmctrl( wmctrl -ic <window_id>), то окажется, что не толькоокнозакрыто, но приложение полное.

Мой вывод таков, что окно на самом деле незакрыто, нонеотображенныйкогда мы нажимаем X.

Мы можем сделать то же самое с помощью xdotool. С отредактированной версией этого ответа:Как запустить программу при запуске, свернув ее?, то мы можем выполнить запуск Irisбез появления окна настроек.

Запуск ирисабезокно настроек (скрипт)

  1. В скрипте используются оба wmctrlварианта xdotool:

    sudo apt-get install wmctrl xdotool
    
  2. Скопируйте скрипт ниже в пустой файл, сохраните его вв том же каталоге, что и ваш Iris.shфайл(поэтому они находятся вместе в одном каталоге), как start_iris.py.

    #!/usr/bin/env python3
    import subprocess
    import time
    import sys
    import os
    
    command = os.path.dirname(sys.argv[0])+"/Iris.sh"
    subprocess.Popen(["/bin/bash", "-c", command])
    
    def get(cmd):
        return subprocess.check_output(cmd).decode("utf-8").strip()
    
    t = 0
    
    while t < 12:
        time.sleep(1)
        try:
            w_list = [l.split()[0] for l in get(["wmctrl", "-l"]).splitlines() if "Iris" in l]
            for w in w_list:
                check = [l for l in get(["xprop", "-id", w]).splitlines()\
                         if "WM_CLASS(STRING)" in l][0]
                if "Iris" in check:
                    subprocess.Popen(["xdotool", "windowunmap", w])
                    break
            break
        except (IndexError, subprocess.CalledProcessError):
            pass
        t += 1
    
  3. Теперь вместо исходной команды для запуска выполните следующую команду Iris:

    python3 /path/to/start_iris.py
    

Окно настроек больше не будет появляться!

Объяснение

  • Сценарий рассматриваетсвой собственныйкаталог для файла Iris.shи запускает его.
  • Затем он следит за созданием новых окон WM_CLASS Iris(вашего окна настроек).
  • Если он нашел целевое окно, онне отображаетокно с xdotoolкомандой:

    xdotool windowunmap <window_id>
    

Примечания

  1. Очевидно, что нажатие на Xокно настроек также отменяет отображение окна.
    По-видимому, это делается другим способом, чем xdotool. Следствием этого является то, что вы не можете попасть в окно настроек (из меню индикатора), не перезапустив Iris.

    Однако вы упомянули, что обычно вам не нужно окно настроек.совсем.

  2. Обратите внимание, что при запуске приложений GUI из Startup APplications (особенно когда это касается настроек экрана) вам может потребоваться встроить небольшой перерыв, чтобы все работало нормально. Если это не работает из Startup Applications, измените команду для добавления в Stratup Applications на:

    /bin/bash -c "sleep 10 && python3 /path/to/start_iris.py"
    

Связанный контент