Como fazer um comando de ativação definir o foco para uma instância de aplicativo já em execução no Ubuntu / Linux?

4

Estou usando um programa chamado easystroke para invocar comandos de gestos do mouse - normalmente para iniciar um aplicativo. 'gnome-terminal', por exemplo. Se eu já tiver uma janela do gnome-terminal aberta, e eu invoco o gesto do gnome-terminal, gostaria de definir o foco para a instância já em execução, em vez de gerar uma nova instância, o que é claro o que acontece agora. (Na verdade, estou mais interessado nisso para o atalho do aplicativo gmail chrome e outros aplicativos maiores.)

Eu sou muito novo no Ubuntu e no Linux em geral, mas eu esperava que houvesse um comando bacana que eu pudesse colocar em torno do meu comando de inicialização que produziria esse comportamento. (Estou imaginando algum tipo de programa gerenciador de lista de aplicativos singleton que consome minha linha de comando, verifica se ele já está na lista, transfere o foco para o processo em execução se estiver (e se esse processo ainda está em execução) ou cria um novo processo e, em seguida, adiciona-lo à sua lista usando a linha de comando como uma chave.)

    
por David 11.02.2010 / 07:06

4 respostas

1

Um script de shell que usa pidof e wmctrl . Não tem certeza de como funciona o seu programa de gestos do mouse - você pode definir um script de shell para ser executado como resultado de um gesto?

Se sim, então tal script poderia usar o pidof para determinar se o programa está rodando e, se estiver, use o wmctrl para ativá-lo, caso contrário, inicie-o. pidof existe no ubuntu por padrão, mas você terá que adicionar o wmctrl youself. Procure por wmctrl no gerenciador de pacotes Synaptic.

    
por 12.02.2010 / 01:34
1

xwit "nome do programa" trará uma janela para frente pelo nome. Qualquer coisa no Linux que possa usar um executável pode usar um script #! / Bin / sh com executar priveledges ativado. O xwit também pode mover o ponteiro do mouse, mover a janela, redimensionar a janela, fornecer uma lista de nomes de janela que correspondam a um padrão, obter um windowid exclusivo para uma janela específica ou fechar uma janela ... tudo o que você puder fazer em uma janela fazer através do xwit.

    
por 12.02.2010 / 02:29
1

Eu escrevi um pequeno programa chamado jumpapp exatamente para esse propósito. Ele permite que você use um comando para abrir um novo aplicativo na primeira vez que ele é executado, e para alternar para a janela já aberta sempre que você executá-lo depois disso. Como bônus, se você tiver várias janelas abertas para o aplicativo, a execução repetida do comando passará por todas as janelas do aplicativo.

Usage: jumpapp [OPTION]... COMMAND [ARG]...

Jump to (focus) the first open window for an application, if it's running.
Otherwise, launch COMMAND (with opitonal ARGs) to start the application.

No under-the-hood, jumpapp localiza as janelas do aplicativo usando dois métodos: 1) obtém todos os pids em execução para COMMAND e procura janelas com um _NET_WM_PID correspondente e 2) procura janelas com WM_CLASS que corresponde ao comando.

Se você quiser experimentá-lo, é fácil instalar a partir da origem ou pode instalá-lo a partir de meu PPA:

sudo add-apt-repository ppa:mkropat/ppa
sudo apt-get update
sudo apt-get install jumpapp
    
por 29.03.2014 / 17:47
0

Há alguns anos, criei um pequeno aplicativo chamado mcgr exatamente para essa finalidade. Originalmente funcionava apenas com o gerenciador de janelas do Metacity, mas depois o adaptei para o Gnome.

    
por 27.10.2015 / 21:27