Inicie qualquer programa na bandeja do sistema
Sabe aquele programa que você gostaria de iniciar junto com seu login?
Aquele mesmo, que tem a opção de exibir um ícone na bandeja do sistema, mas que por algum motivo não inicia minimizado nem sob decreto? Pois seus problemas acabaram!
No meu caso é o aplicativo de mensagens Session Desktop. Ao que parece ele tem essa opção em sua versão para Windows e MacOS, mas no Linux não teve jeito de fazer funcionar. Mesmo com o comando fornecido pelo perfil oficial do aplicativo no twitter.
A solução encontrada, depois de deixar para lá a questão e voltar a pesquisá-la recentemente, se deu com um pequeno aplicativo de linha de comando chamado wmctrl. Basicamente ele pode manipular janelas do gerenciador do Linux, permitindo movê-las de ambiente desktop, maximizá-las, minimizá-las ou, no nosso caso, fechá-las para que o ícone na bandeja do sistema assuma sua função.
Que é o que já acontece com, por exemplo, o ícone do cliente Nextcloud, que inicia maximizado (exibindo rapidamente sua interface) e depois fecha para a bandeja do sistema. Embora algumas vezes ele simplesmente abra e fique no desktop.
Com o comando wmctrl podemos fazer coisa semelhante, respeitando algumas limitações.
Minha intensão é iniciar o Session com o desktop, mas a janela precisa esperar um intervalo mínimo para ser fechada, caso contrário o programa se encerra.
No meu caso este intervalo é de 2 segundos. Me incomoda o fato de ficar com uma janela aberta por 2 segundos (por mais que possa parecer rápido, ao londo do uso se torna irritante) e a solução que encontrei foi quebrar o comando em dois.
Primeiro executo o aplicativo, jogando-o para o background, na sequência aguardo 1 segundo e o envio para uma segunda área de trabalho, onde ele aguarda mais 1 segundo para só então receber o último comando para fechar a janela. Tempo suficiente para o ícone ser exibido na bandeja do sistema indicando que ele se manterá carregado caso a janela seja fechada.
Isso se reflete no seguinte comando:
/caminho/do/programa & sleep 1 && \
wmctrl -r "Nome da Janela" -t "2" && \
sleep 1 && wmctrl -c "Nome da Janela"
Na primeira linha o comando que inicia o programa e o joga para o background.
Na sequência o wmctrl é usado para jogar a janela em uma outra área de trabalho.
E por fim a janela é fechada.
Repare que há dois intervalos de 1 segundo introduzidos pelo comando sleep, onde o primeiro aguarda o programa ser carregado, permitindo apenas que ele "pisque" no desktop antes do segundo comando jogar a janela para outro desktop.
Pude perceber que, para o meu caso com o Session, este é o tempo ideal para o programa ser carregado para abandeja do sistema e ter sua janela fechada, mas de forma que continue aberto no background.
Este pequeno artifício pode ser usado para qualquer outro programa, mesmo que não exista uma opção para mantê-lo na bandeja, ele pode ser aberto, enviado a uma outra área de trabalho e lá minimizado. Ficando aberto, mas ainda assim sem ocupar espaço no desktop ou na barra de tarefas como uma janela minimizada.
:)