So rufen Sie automatisch eine Anwendung auf, die über eine benutzerdefinierte Verknüpfung gestartet wird

1

Ich habe eine Tastenkombination Ctrl+ Alt+ C, für gnome-calculator. Dies funktioniert einwandfrei, aber wenn gerade eine andere Anwendung ausgeführt wird, wird der Rechner hinter der anderen Anwendung geöffnet.

Wie aktiviere ich den Taschenrechner beim Start mit dieser Verknüpfung?

Ramana Reddy
quelle
@JacobVlijm, das ist ein Job für Sie :)
Sergiy Kolodyazhnyy
@ Serg Aha, großartig, daran zu arbeiten :)
Jacob Vlijm

Antworten:

1

Wenn Sie das folgende Skript ausführen, wird das gnome-calculatorProgramm (oder eine andere Anwendung, siehe "Hinweise") gestartet. Warten Sie, bis das entsprechende Fenster angezeigt wird, und starten Sie es.

Das Drehbuch

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

Wie benutzt man

  1. Das Skript muss wmctrldie Fensterliste lesen und das Fenster öffnen:

    sudo apt-get install wmctrl
    
  2. Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter raise_window.py
  3. Teste es mit dem Befehl:

    python3 /path/to/raise_window.py
    
  4. Wenn alles funktioniert, fügen Sie den Befehl einer Tastenkombination hinzu: Wählen Sie: Systemeinstellungen> "Tastatur"> "Tastenkombinationen"> "Benutzerdefinierte Tastenkombinationen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:

    python3 /path/to/raise_window.py
    

Anmerkungen

  • Um eine Endlosschleife zu verhindern (z. B. wenn die Anwendung aus irgendeinem Grund nicht ausgeführt wird), wartet das Skript zehn Sekunden und wird dann trotzdem beendet. Wenn Sie die Zeit verlängern möchten, ändern Sie den Wert in der Zeile:

    while t < 20
    

    ( 20= 20* 0.5Sekunden)

  • Wie bereits erwähnt, können Sie das Skript verwenden, um das Verhalten einer Anwendung, die nicht von selbst ausgelöst wird, zu "korrigieren", indem Sie die Zeile ändern:

    app = "gnome-calculator"
    

    eine andere Anwendung ausführen ( app = "<application>") oder:

    Alternativ können Sie das Skript für verschiedene Anwendungen verwenden:

    Ersetzen Sie die Zeile:

    app = "gnome-calculator"
    

    durch:

    app = sys.argv[1]
    

    und füge im Kopfteil des Skripts (direkt unter dem shebang) hinzu:

    import sys
    

    Führen Sie dann das Skript mit dem folgenden Befehl aus:

    python3 raise_window.py <application>
    

Erläuterung

Um ein Fenster zu öffnen, können Sie den folgenden Befehl verwenden:

wmctrl -ia <window_id> 

oder

wmctrl -a <window_name>

(vorausgesetzt es wmctrlist installiert)

Da der Fenstername möglicherweise nicht eindeutig ist, ist die ID zu verwenden , bevorzugt. Der Trick besteht dann darin, zu warten, bis die PID der Anwendung angezeigt wird, und dies mit dem folgenden Befehl zu testen:

pgrep -f <application>

Wenn der Befehl eine Ausgabe hat, bedeutet dies, dass die Anwendung eine PID hat und ausgeführt wird. Als Nächstes müssen Sie mit dem folgenden Befehl überprüfen, ob die Anwendung (bereits) ein Fenster hat:

wmctrl -lp

die eine Liste von Fenstern, deren Fenster-ID und die entsprechende (Anwendungs-) PID ausgibt.

Wenn es eine Übereinstimmung zwischen der gefundenen PID und den Fenstern in der Liste gibt, müssen wir unser Fenster erhöhen. Wir können die Fenster-ID aus der Fensterzeile in der Liste analysieren, die wir anschließend verwenden, um das Fenster mit dem folgenden Befehl zu öffnen:

wmctrl -ia <window_id>
Jacob Vlijm
quelle
Hallo Jacob, es hat erfolgreich geklappt. Entschuldigung für die verspätete Antwort, da ich dies bis heute nicht gesehen habe. Vielen Dank
Ramana Reddy
@ RamanaReddy Perfekt, froh, dass es funktioniert :)
Jacob Vlijm