Nach dem Leiden an einerFehler in Redshift, ich habe einen tollen Ersatz gefunden,Iris.
Ich habe den Iris
Ordner in mein home
Verzeichnis 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, Iris
ohne dass das Einstellungsfenster erscheint.
Iris startenohnedas Einstellungsfenster (Skript)
Das Skript verwendet sowohl
wmctrl
als auchxdotool
:sudo apt-get install wmctrl xdotool
Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es indas gleiche Verzeichnis wie Ihre
Iris.sh
Datei(damit sie zusammen im selben Verzeichnis sind), alsstart_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
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.sh
und 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
xdotool
Befehl:xdotool windowunmap <window_id>
Anmerkungen
Offensichtlich wird durch Klicken auf das
X
des Einstellungsfensters auch das Fenster aufgehoben.
Dies geschieht offensichtlich auf eine andere Weise alsxdotool
. Die Folge ist, dass Sie das Einstellungsfenster (aus dem Indikatormenü) nicht erreichen können, ohne neu zu startenIris
.Sie haben jedoch erwähnt, dass Sie das Einstellungsfenster normalerweise nicht benötigenüberhaupt.
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"