Est-il possible de déplacer toutes les fenêtres (ou toutes les fenêtres non réduites) d'un espace de travail à un autre?
Je sais que je peux déplacer une fenêtre vers un autre espace de travail avec Shift+ Ctrl+ Alt+ arrow, mais cela ne déplacera que cette fenêtre focalisée.
unity
compiz
workspaces
viewports
betatester07
la source
la source
Réponses:
Unity: Que sont les fenêtres?
Ubuntu Unity utilise des fenêtres - essentiellement un système de coordonnées (avec la coordonnée 0,0 étant le coin supérieur gauche), où un bureau géant se subdivise en morceaux qui correspondent à la résolution de votre écran. Les coordonnées gagnent en valeur lorsque vous vous déplacez vers la droite et vers le bas.
Le système de coordonnées est relatif. Si ma fenêtre actuelle est en haut à gauche, tout ce qui concerne cette fenêtre sera des valeurs positives par incréments de largeur et de hauteur. Par exemple, si ma fenêtre actuelle est en haut à gauche, la fenêtre Firefox dans l'espace de travail du milieu supérieur que vous voyez ci-dessus est positionnée à la valeur x 1366 et à la valeur y 0 par rapport à la fenêtre supérieure la plus à gauche. Si ma fenêtre active est en haut au milieu, la fenêtre du terminal dans la fenêtre en haut à gauche est positionnée à la valeur x -1327 60. C'est le problème clé pour
xdotool
, carxdotool
il ne traite pas des nombres négatifs.Notez également que le coin supérieur gauche de votre fenêtre actuelle sera toujours assumé par xdotool comme coordonnées 0 0. Cela signifie que nous ne pouvons déplacer les choses que de droite à droite.
Faire fonctionner xdotool pour Unity
Maintenant, nous savons que les
xdotool
fenêtres ne peuvent être déplacées que par rapport à notre coin supérieur gauche (c'est-à-dire que vous pouvez toujours déplacer les fenêtres vers le bas et la droite, mais jamais vers le haut et la gauche). Comment pouvons-nous faire en sorte que cela fonctionne pour l'unité. Eh bien, l'idée de base serait deSolution de script
Le script ci-dessous exécute exactement la procédure décrite ci-dessus. Il peut être appelé avec l'un des
-v
drapeaux pour spécifier manuellement les coordonnées ou vous pouvez utiliser le-g
drapeau pour afficher la boîte de dialogue de l'interface graphique.-f
flag indiquera également au script de changer de fenêtre; si ce drapeau n'est pas utilisé - vous resterez sur la fenêtre courante et seules les fenêtres seront déplacéesObtention du script
On peut copier le code source de ce post directement ou via github en utilisant les étapes suivantes:
sudo apt-get install git
cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
sudo chmod -R +x sergrep
Le fichier de script sera
/opt/sergrep/move_viewport_windows.sh
Pour lier le script au raccourci, reportez-vous à Comment lier des fichiers .sh à une combinaison de touches?
Notez que
wmctrl
etxdotool
sont requis pour que ce script fonctionne correctement. Vous pouvez les installer via sudo apt-get install xdotool et wmctrlCode source
Démo
Enregistrement Webm du script en action:
https://www.youtube.com/watch?v=cJMlC41CWWo
Problèmes
En raison du
grid
plugin d'Unity qui est responsable de l'alignement des fenêtres, le script ne peut pas déplacer les fenêtres agrandies ou les fenêtres alignées droite / gauche. Il sera tenté d'ajouter le désarmement et la réinitialisation momentanés de ce plugin pour que le script fonctionne avec toutes les fenêtres, mais comme la réinitialisation et la réinitialisation ont un délai, elle pourrait être abandonnée en tant qu'idée. Si vous souhaitez que le script fonctionne avec toutes les fenêtres, installezunity-tweak-tool
et désactivez l'accrochage aux fenêtres sous les options du gestionnaire de fenêtres.la source
Environnements de bureau non basés sur Compiz (XFCE, LXDE, GNOME, KDE ...)
Vous pouvez utiliser une combinaison de
wmctrl
etxdotool
pour cela. Assurez-vous d'abord que ces deux utilitaires sont installés:Une fois les dépendances satisfaites, vous devriez pouvoir utiliser le one-liner suivant pour déplacer toutes les fenêtres du bureau actuel vers un autre:
Une ventilation rapide des commandes utilisées:
wmctrl -l | awk -v var=$(xdotool get_desktop) '{if ($2 == var) print $0;}' | cut -d' ' -f1
Lister toutes les fenêtres, filtrer celles qui ne se trouvent pas dans l'espace de travail actuel et extraire leur ID de fenêtre
wmctrl -i -t 2 -r "$i"
Déplacer la fenêtre avec l'ID de fenêtre
$i
vers l'espace de travail 2.tout cela est emballé dans une
while read ... do; done
boucle simple qui itère sur toutes les fenêtres du bureau actuelEnvironnements de bureau basés sur Compiz (par exemple Unity)
Trouver une solution pour les environnements de bureau comme Unity est rendu difficile par le fait que Compiz (le gestionnaire de fenêtres d'Unity) n'utilise pas les bureaux dans un sens traditionnel .
la source