web-dev-qa-db-fra.com

Comment forcer une fenêtre d'application à être automatiquement maximisée après le démarrage de l'application?

J'ai essayé d'utiliser Docky, puis je l'ai enlevé et après cela, mon navigateur (Chromium) ne peut plus être ouvert à la hauteur maximale, à chaque fois que je devrais le maximiser moi-même. (Bureau XFCE)

3
R S

Comment démarrer une application (n'importe laquelle) maximisée

En démarrant une application via le script ci-dessous, vous pouvez forcer n’importe quel application* au démarrage maximisé. Si vous remplacez soit la commande main dans (une copie de-) votre fichier .desktop par la commande permettant d'exécuter le script (voir ci-dessous). comment le faire) ou ajoutez-le comme raccourci à la liste rapide, vous pouvez obtenir exactement ce que vous voulez.

(* Certaines applications ont une taille de fenêtre fixe et non modifiable, certaines fenêtres ouvrent un nouvel onglet dans une fenêtre éventuellement déjà ouverte )

A propos du script

Le script s'exécute avec la commande:

python3 /path/to/script <application>

Le scénario:

  • lance d'abord la commande pour ouvrir l'application
  • pour éviter les problèmes de synchronisation, il attend ensuite que la (nouvelle) fenêtre de l'application apparaisse (en trouvant une correspondance entre sa pid et la id de la fenêtre correspondante) dans la sortie du wmctrl -lp -command (pour seulement 15 secondes, pour empêcher une boucle infinie)
  • Une fois que la fenêtre apparaît, il maximise la fenêtre avec la commande:

    xdotool windowsize <window_id> 100% 100%
    

Le code

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

app = sys.argv[1]

user = getpass.getuser()
get = lambda x: subprocess.check_output(x).decode("utf-8")
ws1 = get(["wmctrl", "-lp"]); t = 0
subprocess.Popen(app)
while t < 30:      
    ws2 = [(w.split()[2], w.split()[0]) for w in get(["wmctrl", "-lp"]).splitlines() if not w in ws1]
    procs = sum([[(w[1], p) for p in get(["ps", "-u", user]).splitlines() \
              if app[:15].lower() in p.lower() and w[0] in p] for w in ws2], [])
    if len(procs) > 0:
        subprocess.call(["xdotool", "windowsize", "-sync", procs[0][0] , "100%", "100%"])
        break
    time.sleep(0.5)
    t = t+1

Comment utiliser

  1. Le script nécessite à la fois wmctrl et xdotool

    Sudo apt-get install wmctrl xdotool
    
  2. Copiez le script ci-dessus dans un fichier vide, enregistrez-le sous le nom run_maximized.py

  3. Maintenant, éditez votre fichier .desktop:

    • Copiez le fichier global .desktop _ localement:

      cp /usr/share/applications/chromium-browser.desktop ~/.local/share/applications
      

Version XFCE:

  1. ouvrez le fichier avec gedit:

    gedit ~/.local/share/applications/chromium-browser.desktop
    

    Naviguez jusqu'à la ligne:

    Exec=chromium-browser %U
    

    (qui est la première ligne, commençant par Exec=

    Changez-le en:

    Exec=python3 /path/to/script.py chromium-browser
    

    où vous devez remplacer /path/to/script.py par le chemin réel.

  2. Déconnectez-vous et reconnectez-vous. Votre lanceur Chromium ouvrira désormais Chromium maximized.

Version Unity:

  1. ouvrez le fichier avec gedit:

    gedit ~/.local/share/applications/chromium-browser.desktop
    

    Naviguez jusqu'à la ligne:

    Actions=NewWindow;Incognito;TempProfile;
    

    Changez-le en:

    Actions=NewWindow;Incognito;TempProfile;divider1;Open maximized;
    

    Ajoutez au bas du fichier la section ci-dessous:

    [Desktop Action Open maximized]
    Name=Open maximized
    Exec=python3 /path/to/script.py chromium-browser
    OnlyShowIn=Unity;
    
    [Desktop Action divider1]
    Name=.....................................
    OnlyShowIn=Unity;
    

    où vous devez remplacer /path/to/script.py par le chemin réel.

  2. Déconnectez-vous et reconnectez-vous. Votre lanceur Chromium se présente désormais comme suit:

    enter image description here

Note importante

Dans un fichier .desktop, vous devez utiliser des chemins absolus; ~ ne fonctionnera pas par exemple. Cela compte pour les fichiers .desktop dans /usr/share/applications, ~/.local/share/applications ainsi que les commandes dans les applications de démarrage (qui sont en réalité appelées par les fichiers .desktop dans ~/.config/autostart).

3
Jacob Vlijm