GUI des Programms nach dem automatischen Start beim Systemstart ausblenden

GUI des Programms nach dem automatischen Start beim Systemstart ausblenden

Nach dem Leiden an einerFehler in Redshift, ich habe einen tollen Ersatz gefunden,Iris.

Ich habe den IrisOrdner in mein homeVerzeichnis gelegt und den folgenden Befehl zu „Startup Applications“ hinzugefügt sh /home/arun/Iris/Iris.sh.

Das funktioniert alles wunderbar, aber beim Start wird auch das GUI-Einstellungsfenster geöffnet. Alles, was ich wirklich brauche, ist das kleine Panel-Indikatorsymbol. So ähnlich wie die „Ausblenden“-Funktion in den „Anmeldeobjekten“ von OS X.

Kann dies erreicht werden?

Antwort1

Das Iris-Einstellungsfenster

Wenn wir das Einstellungsfenster von Iris mit schließen X, ist esscheinbargeschlossen.

Wenn wir das Gleiche tun, mit Hilfe von wmctrl( wmctrl -ic <window_id>), stellt sich jedoch heraus, dass nicht nur dieFensterist geschlossen, jedoch die komplette Bewerbung.

Meine Schlussfolgerung ist dann, dass das Fenster nicht wirklichgeschlossen, Abernicht zugeordnetwenn wir die Taste drücken X.

Das Gleiche können wir mit Hilfe von tun xdotool. Mit einer bearbeiteten Version dieser Antwort:Wie kann ich ein Programm beim Start minimiert ausführen?, können wir dann starten, Irisohne dass das Einstellungsfenster erscheint.

Iris startenohnedas Einstellungsfenster (Skript)

  1. Das Skript verwendet sowohl wmctrlals auch xdotool:

    sudo apt-get install wmctrl xdotool
    
  2. Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es indas gleiche Verzeichnis wie Ihre Iris.shDatei(damit sie zusammen im selben Verzeichnis sind), als start_iris.py.

    #!/usr/bin/env python3
    import subprocess
    import time
    import sys
    import os
    
    command = os.path.dirname(sys.argv[0])+"/Iris.sh"
    subprocess.Popen(["/bin/bash", "-c", command])
    
    def get(cmd):
        return subprocess.check_output(cmd).decode("utf-8").strip()
    
    t = 0
    
    while t < 12:
        time.sleep(1)
        try:
            w_list = [l.split()[0] for l in get(["wmctrl", "-l"]).splitlines() if "Iris" in l]
            for w in w_list:
                check = [l for l in get(["xprop", "-id", w]).splitlines()\
                         if "WM_CLASS(STRING)" in l][0]
                if "Iris" in check:
                    subprocess.Popen(["xdotool", "windowunmap", w])
                    break
            break
        except (IndexError, subprocess.CalledProcessError):
            pass
        t += 1
    
  3. Führen Sie nun zum Starten den folgenden Befehl anstelle des ursprünglichen Befehls aus Iris:

    python3 /path/to/start_iris.py
    

Das Einstellungsfenster wird nicht mehr angezeigt!

Erläuterung

  • Das Skript untersuchtseine eigeneVerzeichnis für die Datei Iris.shund startet sie.
  • Anschließend überwacht es die Erstellung neuer Fenster WM_CLASS Iris(Ihres Einstellungsfensters).
  • Wenn das Zielfenster gefunden wurde,hebt Zuordnungen aufdas Fenster mit dem xdotoolBefehl:

    xdotool windowunmap <window_id>
    

Anmerkungen

  1. Offensichtlich wird durch Klicken auf das Xdes Einstellungsfensters auch das Fenster aufgehoben.
    Dies geschieht offensichtlich auf eine andere Weise als xdotool. Die Folge ist, dass Sie das Einstellungsfenster (aus dem Indikatormenü) nicht erreichen können, ohne neu zu starten Iris.

    Sie haben jedoch erwähnt, dass Sie das Einstellungsfenster normalerweise nicht benötigenüberhaupt.

  2. Beachten Sie, dass Sie beim Starten von GUI-Anwendungen aus Startup-Anwendungen (insbesondere wenn es um Bildschirmeinstellungen geht) möglicherweise eine kleine Pause einbauen müssen, damit es einwandfrei funktioniert. Wenn es aus Startup-Anwendungen nicht funktioniert, ändern Sie den Befehl zum Hinzufügen zu Startup-Anwendungen in:

    /bin/bash -c "sleep 10 && python3 /path/to/start_iris.py"
    

verwandte Informationen