Je me demande s'il existe un moyen d'obtenir l'effet des raccourcis Ctrl-Alt-Clavier dans Unity en utilisant des commandes de terminal à la place? Je veux une commande qui définit une fenêtre graphique à la moitié de la taille de l'écran, alignée à gauche ou à droite.
En guise d'arrière-plan, j'écris un script qui s'exécute après la connexion. Il utilise Zenity pour me demander si je souhaite ouvrir mon environnement de développement (GVim et IPython côte à côte). Je suis en train de réaliser deux fenêtres de taille égale pour ces programmes en utilisant set lines= columns=
dans mon .gvimrc
et c.IPythonWidget.width =
et c.IPythonWidget.height =
dans mon ipython_qtconsole_config.py
. Cependant, cette approche pose des problèmes.
Réponses:
Dans quoi vous rencontrerez
Si vous souhaitez d'abord appeler une application et, par la suite, placer sa fenêtre sur une position et une taille spécifiques, le temps entre l' appel de l'application et le moment où la fenêtre apparaît réellement est imprévisible. Si votre système est occupé, il peut être considérablement plus long que s'il est inactif.
Vous avez besoin d'un moyen "intelligent" pour vous assurer que le positionnement / redimensionnement est effectué (immédiatement) après l' apparition de la fenêtre .
Script pour appeler une application, attendez qu'elle apparaisse et positionnez-la sur l'écran
Avec le script ci-dessous, vous pouvez appeler une application et définir la position et la taille sur lesquelles elle doit apparaître avec la commande:
Quelques exemples:
Pour appeler
gnome-terminal
et redimensionner sa fenêtre à 50% et la placer sur la moitié droite:Pour appeler
gedit
, placez sa fenêtre à gauche et appelezgnome-terminal
, placez-la à droite (en réglant sesv-size
46% pour lui donner un peu d'espace entre les fenêtres):Pour appeler Inkscape, placez sa fenêtre dans le quart gauche / supérieur de l'écran:
Le script et comment l'utiliser
installez les deux
xdotool
etwmctrl
. J'ai utilisé les deux, car le redimensionnement avecwmctrl
peut entraîner certaines particularités (en particulier)Unity
.setwindow
(sans extension) dans~/bin
; créez le répertoire si nécessaire.~bin
, exécutez:source ~/.profile
Testez le script avec la commande (par exemple)
En d'autres termes:
Si tout fonctionne bien, utilisez la commande partout où vous en avez besoin.
Le script
Ce qu'il fait
Lorsque le script est appelé, il:
wmctrl -lp
)ps -ef ww
, en comparant le pid de la fenêtre au pid de l'application)Problème mineur
Dans Unity, lorsque vous (re) positionnez et (re) dimensionnez une fenêtre avec
wmctrl
ouxdotool
, la fenêtre gardera toujours une petite marge aux bords de votre écran, sauf si vous la définissez à 100%. Vous pouvez le voir dans l'image (3) ci-dessus; tandis que lainkscape
fenêtre était placée enx
position 0, vous pouvez toujours voir une marge mineure entre le lanceur Unity et lainkscape
fenêtre.la source
wmctrl
installé, la commande:wmctrl -lG | grep <windowname>
vous montrer comme une sortie:0x03600e4f 0 723 197 1114 563 jacob-System-Product-Name dimkeyboard.sh (~/Bureaublad) - gedit
. Dans cette sortie, la 3ème à la 6ème colonne affiche les dimensions, x, y, largeur, largeur, hauteur.appAndParams = sys.argv[1] app = appAndParams[0].split(' ', 1)[0] get = lambda x: subprocess.check_output(["/bin/bash", "-c",x]).decode("utf-8") ws1 = get("wmctrl -lp"); t = 0 subprocess.Popen(["/bin/bash", "-c", appAndParams])
</pre> <edit> il refuse de formater ce code. </edit>La commande réelle que vous voulez est quelque chose comme
Cela fera que la fenêtre actuelle occupe la moitié de l'écran (changez
$HALF
les dimensions de votre écran) et s'accroche sur le côté gauche. Pour accrocher vers la droite, utilisezVous pouvez également jouer avec
wmctrl
pour obtenir l'ID des fenêtres qui vous intéressent au lieu d'utiliser:ACTIVE:
. Je ne peux pas vous aider, car cela dépend des fenêtres en question. Jetez un oeil àman wmctrl
plus.J'ai écrit un script pour ça. Je n'utilise pas Unity, je ne peux donc pas garantir qu'il fonctionnera avec, mais je ne vois aucune raison de ne pas le faire. Il a besoin
wmctrl
,xdpyinfo
etdisper
à installer:Ensuite, enregistrez le script ci-dessous sous
~/bin/snap_windows.sh
, rendez-le exécutable avecchmod a+x ~/bin/snap_windows.sh
et vous pouvez exécuterPour accrocher sur le côté droit. Utilisation
l
pour le côté gauche et aucun argument pour maximiser la fenêtre. Notez qu'il s'exécute sur la fenêtre actuelle, vous devrez donc lui attribuer un raccourci si vous souhaitez qu'il s'exécute sur autre chose que le terminal.Le script est un peu plus compliqué que ce que vous demandez, car je l'ai écrit pour fonctionner sur des configurations à un ou deux moniteurs.
la source
Vous pouvez le faire en utilisant
xdotool
.Pour installer,
xdotool
vous pouvez exécuter:Ensuite, pour envoyer une touche Ctrl+ Alt+ <keypad_key>à la
X
fenêtre du terminal , vous pouvez exécuter:* <keypad_key_value> = valeur de la clé du clavier dans la liste ci-dessous
Pour exécuter un programme GUI et envoyer la séquence de touches à sa
X
fenêtre (qui dans ce cas est la fenêtre active au moment de l'xdotool
exécution de la commande), vous pouvez exécuter:* <command> = commande qui ouvre la fenêtre à laquelle vous souhaitez envoyer la frappe; <delay> = temps d'attente en millisecondes avant d'envoyer la séquence de touches; <keypad_key_value> = valeur de la clé du clavier dans la liste ci-dessous
Notez que dans la plupart des cas, vous devrez exécuter la commande que vous émettez en tant que processus autonome (par exemple en exécutant à la
nohup <command> &
place de<command>
dans l'exemple ci-dessus), sinonxdotool
ne sera pas exécutée avant<command>
l'exécution n'est pas terminée.Vous devrez également définir un délai, sinon la frappe sera envoyée avant que la fenêtre cible ne soit complètement chargée
X
(un délai500ms
devrait suffire).Les valeurs possibles pour
<keypad_key_value>
sont:90
87
88
89
83
84
85
79
80
81
En règle générale, pour connaître la valeur de n'importe quelle touche du clavier dans l'
X
environnement, on peut exécuterxev
et appuyer sur la touche pour afficher sa valeur à l'intérieur du terminal.la source
J'ai construit une application nommée Worksets (sur github ) pour Unity qui vous permet de le faire facilement via une interface utilisateur graphique - C'est gratuit et open source.
Il s'agit essentiellement d'un wrapper pour les solutions wmctrl et xdotool répertoriées comme réponses ici, et fournit un moyen facile de créer et d'enregistrer rapidement de telles configurations.
la source
Je n'ai pas le représentant pour commenter directement l'excellent post de Jacob Vlijm, mais j'ai modifié le script pour permettre de démarrer une application avec des arguments (nécessaire pour l'utiliser
setwindow
avecgedit --new-window
). Changement:à:
la source
J'ai joué avec le script de Terdon d'en haut et j'ai ajouté de nouvelles choses (possibilité de sélectionner le moniteur et de régler la hauteur pour chaque moniteur). Il serait extensible d'ajouter plus de moniteurs je pense. J'espère que d'autres le trouveront utile.
Syntaxe de base:
Où prog_name est tout ce que vous avez enregistré ce code sous; moniteur est le numéro du moniteur, par exemple 1 ou 2; l / r / m est gauche ou droite ou max; et window_name est le nom (ou une fraction de son nom) de la fenêtre cible.
Par exemple:
Script bash
la source