Como levantar automaticamente uma aplicação, iniciada por um atalho definido pelo usuário

1

Eu criei um atalho de teclado, Ctrl + Alt + C , para gnome-calculator . Isso funciona bem, mas se outro aplicativo estiver sendo executado, a Calculadora será aberta atrás do outro aplicativo.

Como tornar a calculadora ativa ao iniciar este atalho?

    
por Ramana Reddy 02.09.2015 / 07:20

1 resposta

1

A execução do script abaixo iniciará gnome-calculator (ou qualquer outro aplicativo, consulte "Notas"), aguarde a exibição da janela e aumente: it.

O script

#!/usr/bin/env python3
import subprocess
import time

app = "gnome-calculator"
subprocess.Popen([app])

t = 0
while t < 20:
    try:
        # wait for the application's pid
        pid = subprocess.check_output(["pgrep", "-f", app]).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass
    else:
        try:
            # read the window list
            w_data = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8").splitlines()
            # find the window of the found pid
            window = [w.split()[0] for w in w_data if pid in w][0]
            # raise it and terminate the script
            subprocess.Popen(["wmctrl", "-ia", window])
            break
        except IndexError:
            pass
    time.sleep(0.5)
    t = t + 1

Como usar

  1. O script precisa de wmctrl para ler a lista de janelas e aumentar a janela:

    sudo apt-get install wmctrl
    
  2. Copie o script em um arquivo vazio, salve-o como raise_window.py
  3. Teste - execute-o pelo comando:

    python3 /path/to/raise_window.py
    
  4. Se tudo funcionar bem, adicione o comando a um atalho de teclado: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/raise_window.py
    

Notas

  • Para evitar um loop infinito (por exemplo, caso o aplicativo não seja executado por algum motivo), o script aguardará dez segundos e, em seguida, terminará de qualquer maneira. Se você quiser aumentar o tempo, altere o valor na linha:

    while t < 20
    

    ( 20 = 20 * 0.5 segundos)

  • Como mencionado, você pode usar o script para "corrigir" o comportamento de qualquer aplicativo que não seja gerado sozinho, alterando a linha:

    app = "gnome-calculator"
    

    para executar outro aplicativo ( app = "<application>" ) ou:

    alternativamente, para usar o script para vários aplicativos:

    substitua a linha:

    app = "gnome-calculator"
    

    por:

    app = sys.argv[1]
    

    e adicione a seção head do script (diretamente abaixo da shebang):

    import sys
    

    Em seguida, execute o script pelo comando:

    python3 raise_window.py <application>
    

Explicação

Para levantar uma janela, você pode usar o comando:

wmctrl -ia <window_id> 

ou

wmctrl -a <window_name>

(assumindo que wmctrl está instalado)

Como a janela nome possivelmente não é única, é preferível usar o ID. O truque é esperar o pid do aplicativo aparecer, testando com o comando:

pgrep -f <application>

Se o comando tiver uma saída, significa que o aplicativo tem um pid e é executado. A próxima coisa é ver se o aplicativo tem uma janela (já), usando o comando:

wmctrl -lp

, o qual irá mostrar uma lista de janelas, seu ID de janela e o pid correspondente (do aplicativo).

Se houver uma correspondência entre o pid encontrado e as janelas da lista, temos nossa janela que precisamos aumentar. Podemos analisar o ID da janela a partir da linha da janela na lista, que usaremos subseqüentemente para levantar a janela com o comando:

wmctrl -ia <window_id>
    
por Jacob Vlijm 02.09.2015 / 07:59