Limite um programa gui no Linux para apenas uma instância

1

Existem alguns programas de gui onde, se você selecioná-los no menu, se ele já estiver aberto, em vez de abrir uma nova instância, essa janela se tornará a principal. No entanto, existem alguns programas que abrirão várias instâncias deles mesmos.

Existe um certo programa que exibe o último comportamento, mas eu quero que ele faça o primeiro. Como isso pode ser feito?

    
por tony_sid 02.08.2010 / 16:00

3 respostas

5

Eu recomendaria a substituição do link para o programa por um link para um script de shell que verifica se o programa está sendo executado e, se estiver, ele usa o função do gerenciador de janelas para colocar o programa em primeiro lugar e, se não for, inicia-o.

    
por 02.08.2010 / 16:28
3

Geralmente, o código-fonte do aplicativo deve ser modificado. Não é algo feito pelo sistema operacional.

    
por 02.08.2010 / 16:20
3

Eu encontrei este tópico e o implementei, compartilhando minha versão.

Eu criei um arquivo executável /usr/local/bin/run_once.sh contendo

#! /bin/bash
application=$1
if wmctrl -xl | grep "${application}" > /dev/null ; then
    # Already running, raising to front
    wmctrl -x -R "$application"
else
    # Not running: starting
    $@
fi

Isso verifica usando wmctrl se o aplicativo que você está tentando iniciar já tiver uma janela aberta (alguns programas GUI mantêm os funcionários sem um GUI em execução) em vez de usar ps , usando -x para usar o WM_CLASS do nome da barra de título.

Para cada programa em que eu quero apenas uma janela, copiei o arquivo .desktop do sistema para ~/.local/share/applications e alterei o campo exec de exec=program --arguments para exec=/usr/local/bin/run_once.sh program --arguments

    
por 03.10.2017 / 16:59