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

1

Depois de sofrer um erro no bug no Redshift , encontrei um Ótimo substituto, Íris.

Coloquei a pasta Iris no meu diretório home e incluí o seguinte comando em Aplicativos de inicialização sh /home/arun/Iris/Iris.sh .

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

Isso pode ser alcançado?

    
por Revetahw 31.03.2016 / 18:55

1 resposta

1

A janela de configurações Iris

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

Se fizermos o mesmo, com a ajuda de wmctrl ( wmctrl -ic <window_id> ), no entanto, não apenas a janela está fechada, mas a aplicação completa.

Minha conclusão é que a janela não está realmente fechada , mas não mapeada quando pressionamos 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 iniciar Iris sem a janela de configurações para aparecer.

Iniciando o íris sem a janela de configurações (script)

  1. O script usa wmctrl e xdotool :

    sudo apt-get install wmctrl xdotool
    
  2. Copie o script abaixo em um arquivo vazio, salve-o no mesmo diretório que o seu Iris.sh file (para que eles estejam 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 script examina o seu próprio diretório para o arquivo Iris.sh e o inicia.
  • Posteriormente, ele observa a criação de novas janelas de WM_CLASS Iris (sua janela de configurações).
  • Se encontrou a janela de segmentação, desmapeará a janela com o comando xdotool :

    xdotool windowunmap <window_id>
    

Notas

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

    Você mencionou que normalmente não precisa da janela de configurações .

  2. Observe que, ao inicializar aplicativos GUI a partir de aplicativos de inicialização (especialmente quando envolve configurações de tela), talvez seja necessário criar uma pequena pausa para que funcione bem. Se ele não funcionar nos Aplicativos de inicialização, altere o comando para adicionar aos aplicativos da Stratup em:

    /bin/bash -c "sleep 10 && python3 /path/to/start_iris.py"
    
por Jacob Vlijm 31.03.2016 / 21:03