web-dev-qa-db-fra.com

Masquer l'interface graphique du programme après le lancement automatique au démarrage

Après avoir souffert d'un bug dans Redshift , j'ai trouvé un excellent remplaçant, Iris.

J'ai placé le dossier Iris dans mon répertoire home et ajouté la commande suivante aux applications de démarrage sh /home/arun/Iris/Iris.sh.

Tout fonctionne à merveille, mais au démarrage, la fenêtre de l'interface graphique des paramètres se lance également. Tout ce dont j'ai vraiment besoin, c'est de l'icône du petit panneau indicateur. Un peu comme la fonction "Masquer" dans les "éléments de connexion" d'OS X.

Peut-on y parvenir?

1
Revetahw

La fenêtre de réglages Iris

Si nous fermons la fenêtre des paramètres d'Iris avec le X, il est apparemment fermé.

Si nous faisons de même, avec l'aide de wmctrl (wmctrl -ic <window_id>) cependant, il s'avère que non seulement la fenêtre est fermée, mais l'application complète.

Ma conclusion est alors que la fenêtre n'est pas réellement fermée , mais non mappée lorsque nous appuyons sur X.

Nous pouvons faire de même avec l'aide de xdotool. Avec une version modifiée de cette réponse: Comment puis-je exécuter un programme au démarrage, minimisé? , nous pouvons alors démarrer Iris sans que la fenêtre des paramètres apparaisse.

Démarrage d'iris sans la fenêtre des paramètres (script)

  1. Le script utilise à la fois wmctrl et xdotool:

    Sudo apt-get install wmctrl xdotool
    
  2. Copiez le script ci-dessous dans un fichier vide, enregistrez-le dans le même répertoire que votre Iris.sh fichier (donc ils sont ensemble dans le même répertoire), comme 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. Exécutez maintenant la commande suivante au lieu de la commande d'origine pour démarrer Iris:

    python3 /path/to/start_iris.py
    

La fenêtre des paramètres n'apparaîtra plus!

Explication

  • Le script examine son propre répertoire pour le fichier Iris.sh, et le lance.
  • Par la suite, il attend la création de nouvelles fenêtres de WM_CLASSIris (votre fenêtre de paramètres).
  • S'il a trouvé la fenêtre ciblée, il démappe la fenêtre avec la commande xdotool:

    xdotool windowunmap <window_id>
    

Remarques

  1. Évidemment, cliquer sur le X de la fenêtre des paramètres démappe également la fenêtre.
    Apparemment, cela se fait d'une manière différente de xdotool. La conséquence est que vous ne pouvez pas accéder à la fenêtre des paramètres (à partir du menu indicateur), sans redémarrer Iris.

    Vous avez mentionné cependant que vous n'avez normalement pas besoin du tout de la fenêtre des paramètres .

  2. Notez que lors du démarrage des applications GUI à partir des applications de démarrage (en particulier lorsque cela implique des paramètres d'écran), vous devrez peut-être ajouter une petite pause pour que cela fonctionne correctement. Si cela ne fonctionne pas à partir des applications de démarrage, modifiez la commande à ajouter aux applications Stratup en:

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