Donc, j'ai 8 bureaux virtuels dans Unity (avec Compiz) parce que j'ai de nombreux projets sur lesquels je travaille simultanément.
Le problème est que, chaque fois que je dois redémarrer ou fermer accidentellement Chrome (ce qui constitue une grande partie des fenêtres dont j'ai besoin pour travailler), je dois manuellement ouvrir à nouveau ces fenêtres, puis les configurer (ouvrir les fichiers, aller dans la bonne URL, etc.).
Comment feriez-vous pour écrire un script qui fera tout cela pour moi? C'est-à-dire: 1) Ouvrez les fenêtres 2) Mettez-les dans les bonnes coordonnées sur les bons écrans virtuels
(1) est évident, pour Google Chrome, vous exécutez simplement «google-chrome». Mais alors comment le mettre au bon endroit? (2)
Ou existe-t-il déjà un script / logiciel qui le ferait pour moi?
wmctrl
, qui est comme un logiciel pour contrôler les fenêtres via un script ou un terminal. Mais comme pour le redémarrage d'une fenêtre, cela pourrait être un peu plus difficileRéponses:
Cela peut être très bien fait, mais vous avez besoin de comprendre Unity / viewports. J'espère que l'histoire ci-dessous est compréhensible, sinon, veuillez laisser un commentaire.
Le script ci-dessous peut être utilisé pour ouvrir une fenêtre de n'importe quelle application sur n'importe laquelle de vos fenêtres, à n'importe quelle position, si vous l'exécutez avec les bons arguments. Le script est une version modifiée de celui-ci , mais maintenant prêt à placer des fenêtres sur le bureau virtuel couvrant .
1. Comprendre les fenêtres et les coordonnées des fenêtres
Espaces de travail dans Unity
Dans Unity, contrairement à d'autres gestionnaires de fenêtres, vous n'avez en fait qu'un seul espace de travail s'étendant, qui est divisé en fenêtres. Dans votre cas, votre espace de travail est divisé en huit fenêtres.
Comment la position des fenêtres est définie
La position de la fenêtre, en sortie de la commande:
est décrit comme la position, par rapport au coin supérieur gauche de la fenêtre courante :
Donc, si vous êtes sur la fenêtre d'affichage
1
:une fenêtre sur la fenêtre d'affichage 2 pourrait être positionnée par exemple sur 1700 (x-sage) x 500 (y-sage)
(mon écran est 1680x1050)
Cependant, si vous êtes sur la fenêtre 6:
la même fenêtre serait positionnée sur 20 (x), -550 (y)
Il est important d'utiliser correctement ces coordonnées pour exécuter le script avec les bons arguments, comme décrit ci-dessous:
2. Comment utiliser le script
Le script ci-dessous peut être utilisé pour placer une nouvelle fenêtre d'une application sur votre espace de travail virtuel (s'étendant).
Assurez-vous qu'il
wmctrl
est installé:Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous
setwindow
(sans extension) dans~/bin
. Créez le répertoire s'il n'existe pas encore. Rendez le script exécutable .~/bin
, exécutez la commandesource ~/.profile
ou déconnectez-vous pour rendre le répertoire disponible dans$PATH
.Testez la commande:
par exemple
Une fenêtre gedit devrait apparaître dans la fenêtre courante.
Remarques:
gedit
fenêtre sur mon système est par exemple env. 470 px.<x_position>
pour placer les fenêtres à gauche de la ou des fenêtres actuelles<y_position>
pour placer les fenêtres au-dessus des fenêtres actuellesPour ouvrir simultanément de nouvelles fenêtres sur différentes fenêtres, vous pouvez simplement enchaîner les commandes. En regardant la configuration de la fenêtre dans l'exemple "Longue histoire", si je suis sur la fenêtre 1, je peux ouvrir des fenêtres gedit sur les fenêtres 1, 2, 3 et 4 avec la commande:
Le scénario
EDIT: la version paresseuse
Dans le cas où vous préférez simplement entrer les coordonnées et la taille, tout comme si vous ouvriez une fenêtre sur la fenêtre actuelle et donniez la fenêtre cible comme argument (sans avoir à calculer quoi que ce soit), utilisez la version ci-dessous ...
Si vous le configurez comme la première version du script, vous pouvez l'exécuter avec la commande:
Un exemple: pour ouvrir une
Google-Chrome
fenêtre positionnée sur20, 20
, taille300x300
, sur fenêtre5
:La configuration est à peu près la même que la première version du script.
Notez également que ce script ne fonctionne correctement que si la fenêtre définie (position / taille) s'intègre complètement dans la fenêtre cible.
Le scénario:
Ouverture de fenêtres d'application avec des arguments
Pour terminer le travail, en répondant complètement à votre question:
Si vous exécutez le script comme par exemple:
il ouvrira une fenêtre par défaut sur le (s) bureau (s) ciblé (s).
Cependant, avec la dernière version du script, vous pouvez ajouter un argument supplémentaire pour ouvrir la fenêtre de l'application, par exemple
url
:par exemple:
Si l'argument (extra) contient des espaces, utilisez des guillemets. L'exemple ci-dessus ouvrira une
google-chrome
fenêtre dans la fenêtre 3, ouvrant leurl
http://askubuntu.com
.Vous pouvez chaîner des commandes pour ouvrir plusieurs fenêtres / URL sur différents espaces de travail en une seule commande, par exemple:
la source
Cela se développe sur la grande réponse de @Jacob Vlijim ci-dessus avec un
setwindow
script légèrement modifié :Une description des changements:
python3
àpython
(juste une préférence personnelle)sys.argv
pourargparse
une meilleure interface de ligne de commandewhile
boucle 0,5 seconde à 1 seconde de sommeilxrandr
dépendanceNOTE: Ceci est juste une version légèrement améliorée que j'ai écrite pour un usage personnel sur Debian Jessie LXDE. Vos résultats peuvent varier.
la source
Pour ceux qui sont intéressés, j'ai implémenté Desktopen: github.com/snitko/desktopen
Il vous permet d'écrire un script pour ouvrir des fenêtres sur différentes fenêtres et affichages d'une manière très conviviale.
la source