Como eu inicio automaticamente um aplicativo na bandeja do sistema?

0

Eu quero que o Audacious e o Transmission se iniciem automaticamente na bandeja do sistema quando eu fizer o login. Se eu apenas adicioná-los para iniciar automaticamente, eles serão abertos e eu tenho que fechá-los manualmente. Como eu faço isso?

Acho que a descrição da questão deixa claro que o problema não é fechar esses aplicativos na bandeja do sistema ou inicializá-los automaticamente. Eu quero que eles automaticamente iniciem como ícones na minha bandeja do sistema quando eu fizer o login.

Por que minha pergunta foi marcada como uma duplicata de uma pergunta que não é o que eu perguntei?

    
por lll 24.02.2016 / 22:02

1 resposta

0

A opção preferida

Se um aplicativo oferece a opção de inicializar na bandeja, sem dúvida essa é a opção preferida.

Se não, no entanto, você precisa editar o código do aplicativo e recompilar (não a opção mais óbvia), ou você precisa "reparar" o comportamento do procedimento de inicialização. Uma versão ligeiramente editada de este script pode fazer o trabalho nesse caso.

Sobre esta resposta

Estou deliberadamente ignorando a linha em sua pergunta:

"não fechar esses aplicativos na bandeja do sistema"

Desde o fechamento da janela depois que ela surgiu , deixar o ícone na bandeja é simplesmente a única opção que temos. Efetivamente você não notará a diferença no entanto.

Explicação

  • O script inicializa o aplicativo, executando o comando que você forneceu como primeiro argumento.
  • Em seguida, o script verifica a lista de janelas (com a ajuda de wmctrl ) para janelas, com o pid do aplicativo iniciado.
  • Se a janela aparecer, ela é imediatamente fechada com graciosidade, com a ajuda do comando wmctrl :

    wmctrl -ic <window_id>
    
  • O resultado:

    semumajaneladetransmissão(nesteexemplo).Obviamente,aimagemédaUnity,masfuncionadamesmaformaemlxde.

Paraevitarumloopinfinitoseajanelanãoaparecerporalgummotivo,oscriptpraticaumlimitedetempode30segundosparaqueajanelaapareça.

Nota

Nãohánecessidadedemencionarqueoscriptsóinicializaráoaplicativonabandejadosistemaseoaplicativotiverumíconenabandejadosistema,senãoelesimplesmentefecharáoaplicativocompletamentesesóajanelaestáfechada.

Oscript

#!/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)

Como usar

  • O script precisa de wmctrl :

    sudo apt-get wmctrl
    
  • Copie o script em um arquivo vazio, salve-o como run_intray.py

  • Teste: execute o script com o aplicativo como argumento, por exemplo, no exemplo transmission :

    python3 /path/to/run_intray.py transmission-gtk
    
  • Se tudo funcionar bem, você pode adicioná-lo ao Aplicativo de Inicialização, mas observe que provavelmente precisará adicionar uma pequena quebra antes do comando, para a área de trabalho para construir completamente primeiro:

    /bin/bash -c "sleep 15 && python3 /path/to/run_intray.py transmission-gtk"
    
por Jacob Vlijm 25.02.2016 / 11:19