Ocultar a GUI do programa após o lançamento automático na inicialização

Ocultar a GUI do programa após o lançamento automático na inicialização

Depois de sofrer umbug no Redshift, encontrei um ótimo substituto,Íris.

Coloquei a Irispasta em meu homediretório e adicionei o seguinte comando a Startup Applications sh /home/arun/Iris/Iris.sh.

Tudo isso funciona perfeitamente, mas na inicialização, a janela da GUI de configurações também é iniciada. Tudo que eu realmente preciso é do pequeno ícone indicador do painel. Mais ou menos como a função "Ocultar" nos "Itens de login" do OS X.

Isso pode ser alcançado?

Responder1

A janela de configurações da íris

Se fecharmos a janela de configurações do Iris com o X, éaparentementefechado.

Se fizermos o mesmo, com a ajuda de wmctrl( wmctrl -ic <window_id>), porém, verifica-se que não apenas ojanelaestá fechado, mas o aplicativo completo.

Minha conclusão é então que a janela não é realmentefechado, masnão mapeadoquando pressionamos o X.

Podemos fazer o mesmo com a ajuda de xdotool. Com uma versão editada desta resposta:Como posso executar um programa na inicialização, minimizado?, podemos então inicializar Irissem que a janela de configurações apareça.

Iniciando a írissema janela de configurações (script)

  1. O script usa ambos wmctrle xdotool:

    sudo apt-get install wmctrl xdotool
    
  2. Copie o script abaixo em um arquivo vazio e salve-o emo mesmo diretório do seu Iris.sharquivo(então eles estão juntos no mesmo diretório), como 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. Agora execute o seguinte comando em vez do comando original para iniciar Iris:

    python3 /path/to/start_iris.py
    

A janela de configurações não aparecerá mais!

Explicação

  • O roteiro analisaprópriodiretório para o arquivo Iris.she o inicia.
  • Posteriormente, observa a criação de novas janelas de WM_CLASS Iris(sua janela de configurações).
  • Se encontrou a janela de destino,desmapeara janela com o xdotoolcomando:

    xdotool windowunmap <window_id>
    

Notas

  1. Obviamente, clicar na Xjanela de configurações também desmapeia a janela.
    Aparentemente, isso é feito de uma maneira diferente do xdotool. A consequência é que você não pode acessar a janela de configurações (no menu do indicador) sem reiniciar Iris.

    Você mencionou, no entanto, que normalmente não precisa da janela de configuraçõesde forma alguma.

  2. Observe que ao iniciar aplicativos GUI a partir de aplicativos de inicialização (especialmente quando envolve configurações de tela), pode ser necessário fazer uma pequena pausa para que funcione bem. Se não funcionar nos aplicativos de inicialização, altere o comando para adicionar aos aplicativos Stratup para:

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

informação relacionada