Je rencontre un problème qui fait que, lorsque la machine revient en veille, un moniteur connecté via displayport (MST) ne se rallume pas, mais les fenêtres se trouvent toujours dans la zone qu’il recouvre s’il s’est allumé.
La seule façon de récupérer de ce court redémarrage est de désactiver et de réactiver l'affichage maintenant que je peux le faire via la ligne de commande très bien, mais lorsque l'affichage est désactivé, toutes les fenêtres sont réorganisées sur l'écran restant.
Est-il possible de conserver les positions de la fenêtre et de les restaurer afin que mon script puisse effectuer cette séquence:
Je peux faire les étapes 2 et 3, mais je suis perdu pour les étapes 1 et 4
Je sais que je peux forcer une position par application, mais ce n'est pas ce que je veux, car je peux faire différentes choses et avoir les mêmes applications dans différentes positions. J'ai également plusieurs terminaux ouverts. J'ai besoin que les positions actuelles soient stockées et restaurées.
Toute aide serait appréciée!
Le script ci-dessous peut être utilisé pour obtenir les positions actuelles de toutes les fenêtres "normales" (exécutées avec l'argument -get
), ou pour restaurer le dernier agencement de fenêtres (exécuté avec l'argument -restore
).
Comme expliqué ici , en utilisant wmctrl
i.c.w. L'unité a quelques problèmes. Si c'est satisfaisant dans votre situation, c'est à vous de décider.
Le script utilise wmctrl
:
Sudo apt-get install wmctrl
Ensuite:
window_arrange.py
Exécutez-le par:
python3 /path/to/window_arrange.py -get
"enregistrer" la disposition actuelle des fenêtres, et
python3 /path/to/window_arrange.py -restore
pour restaurer le dernier agencement de fenêtre "enregistré"
#!/usr/bin/env python3
import subprocess
import os
import sys
wfile = os.environ["HOME"]+"/.windowlist"
arg = sys.argv[1]
def get(command):
return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
def check_window(w_id):
w_type = get("xprop -id "+w_id)
if " _NET_WM_WINDOW_TYPE_NORMAL" in w_type:
return True
else:
return False
def read_windows():
w_list = [l.split()[:6] for l in get("wmctrl -lG").splitlines()]
relevant = [(" ").join(w) for w in w_list if check_window(w[0]) == True]
with open(wfile, "wt") as out:
for item in relevant:
out.write(item+"\n")
def restore_windows():
try:
wlist = [l.split() for l in open(wfile).read().splitlines()]
except FileNotFoundError:
pass
else:
for w in wlist:
try:
cmd = "wmctrl -ir "+w[0]+" -e 0,"+(",").join(w[2:])
subprocess.Popen(["/bin/bash", "-c", cmd])
except:
pass
if arg == "-restore":
restore_windows()
Elif arg == "-get":
read_windows()
Si vous préférez NodeJs: J'ai écrit un petit outil de bibliothèque/ligne de commande qui permet de sauvegarder et de restaurer des sessions et qui prend en charge différentes configurations de moniteurs ainsi que des bureaux virtuels. Vous voudrez peut-être vérifier l'implémentation des fonctionnalités liées à la fenêtre: https://github.com/johannesjo/linux-window-session-manager/blob/master/lib/x11-wrapper.js
Vous pouvez trouver le tout ici: https://github.com/johannesjo/linux-window-session-manager
Si vous installez wmctrl, vous pouvez utiliser "wmctrl -Gl" pour obtenir une liste de toutes les fenêtres avec leurs positions et tailles actuelles. Vous pouvez ensuite utiliser ces informations à l'étape 4 pour appeler wmctrl avec l'option -e afin de restaurer la taille et la position. Par exemple:
wmctrl -ir <id> -e 0,<x>,<y>,<w>,<h>