Centrer une fenêtre via la ligne de commande


19

Existe-t-il un moyen de placer une fenêtre au centre de l'écran après son ouverture ou de la faire s'ouvrir au centre de l'écran?

Cela doit être fait en utilisant la ligne de commande.

Réponses:


33

L' outil wmctrl fournit un accès en ligne de commande à presque toutes les fonctionnalités définies dans laspécification EWMH (Extended Window Manager Hints) . Il peut être utilisé, par exemple, pour obtenir des informations sur le gestionnaire de fenêtres, pour obtenir une liste détaillée des bureaux et des fenêtres gérées, pour basculer et redimensionner les bureaux, pour rendre les fenêtres en plein écran , toujours au-dessus ou collantes , et pour activer , les fermer , les déplacer , les redimensionner , les maximiser et les minimiser .

Vous pouvez l'installer en

sudo apt-get install wmctrl

Vous pouvez obtenir des informations sur vos bureaux virtuels (espaces de travail) avec wmctrl -d

one@onezero:~$ wmctrl -d
0  * DG: 2720x1536  VP: 0,0  WA: 0,24 1360x744  N/A

Et listez les fenêtres ouvertes avec wmctrl -l. L' -Goption vous montre la géométrie des fenêtres:

one@onezero:~$ wmctrl -l
0x02000004  0 onezero Desktop
0x02e00002  0     N/A DNDCollectionWindow
0x02e00003  0     N/A launcher
0x01e00004  0 onezero cairo-dock
0x02e00004  0     N/A panel
0x04800061  0 onezero Transmission
0x02e0000a  0     N/A Dash
0x03a00044  0 onezero arranging windows from the gnu/linux command line with wmctrl ~ Moving to Freedom - Chromium
0x04400006  0 onezero one@onezero: ~
0x04c000e9  0 onezero Google - Mozilla Firefox

wmctrl -lG

one@onezero:~$ wmctrl -lG
0x02000004  0 0    0    1360 768  onezero Desktop
0x02e00002  0 -1460 -868 1360 768      N/A DNDCollectionWindow
0x02e00003  0 0    24   58   744      N/A launcher
0x01e00004  0 290  653  780  115  onezero cairo-dock
0x02e00004  0 0    0    1360 24       N/A panel
0x04800061  0 408  95   732  500  onezero Transmission
0x02e0000a  0 -1402 -844 1302 744      N/A Dash
0x03a00044  0 0    24   1360 744  onezero Center a window via command line - Ask Ubuntu - Stack Exchange - Chromium
0x04400006  0 127  94   983  434  onezero one@onezero: ~
0x04c000e9  0 5    47   1349 715  onezero Google - Mozilla Firefox

Vous pouvez spécifier une fenêtre en référençant son titre ou un titre partiel après -r. -e est pour déplacer et redimensionner

wmctrl -r "Mozilla Firefox" -e <G>,<X>,<Y>,<W>,<H>

<G>: Gravity specified as a number. The numbers are defined in the EWMH specification. The value of zero is particularly
     useful, it means "use the default gravity of the window".
<X>,<Y>: Coordinates of new position of the window.
<W>,<H>: New width and height of the window.

Donc, pour déplacer une fenêtre dans le coin supérieur gauche et la faire 1000 pixels de large par 700 de haut, vous utiliseriez 0,0,0,1000,700

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700

entrez la description de l'image ici

Pour le déplacer / le redimensionner. Pour cela, j'ai utilisé la solution de contournement de "démaximiser" d'abord, en utilisant l' -boption

wmctrl -r "Mozilla Firefox" -b add, maximized_vert, maximized_horz

wmctrl -r "Mozilla Firefox" -b supprimer, maximized_vert, maximized_horz

one@onezero:~$ wmctrl -r "Mozilla Firefox" -b add,maximized_vert,maximized_horz

entrez la description de l'image ici

Les choses que vous devez comprendre en premier

The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"

entrez la description de l'image ici

c'est ma résolution d'écran donc x = 1360 & y = 786

Alignement d'une fenêtre sur la moitié gauche de l'écran

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,0,0,680,768

Alignement d'une fenêtre sur la moitié droite de l'écran

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,680,0,680,768

Alignement d'une fenêtre sur center of screen1360/4 = 340

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768

entrez la description de l'image ici

Manipulez-le à partir de vos paramètres d'écran

Pour plus d'aide 1 2 3 4


7

qui fonctionne avec la fenêtre actuellement active

IFS='x' read screenWidth screenHeight < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)

width=$(xdotool getactivewindow getwindowgeometry --shell | head -4 | tail -1 | sed 's/[^0-9]*//')
height=$(xdotool getactivewindow getwindowgeometry --shell | head -5 | tail -1 | sed 's/[^0-9]*//')

newPosX=$((screenWidth/2-width/2))
newPosY=$((screenHeight/2-height/2))

xdotool getactivewindow windowmove "$newPosX" "$newPosY"

Cela a besoin bashou zshpour fonctionner, plain shne fonctionnera pas.
wingedsubmariner

Fonctionne 👍, sauf sous Unity pour les fenêtres en mosaïque 1/2 ou 1/4 (par exemple, faites glisser une fenêtre vers la droite, elle occupera la moitié droite de votre écran). Ces fenêtres semblent être spéciales, et je ne sais pas quelle xdotoolaction appeler pour en faire des fenêtres "normales" avant d'appeler windowmove. Des idées?
Ronan Jouchet

Trouvé une solution à mon problème sur ce thread askubuntu . Implique wmctrlaussi l' appel , de meilleures solutions sont les bienvenues. TL; DR: appel wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horzavant l' xdotool getactivewindow windowmoveappel final .
Ronan Jouchet

4

Si quelqu'un veut copier / coller un extrait de code pour ce faire, en voici un:

winname='foo'
IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
read wx wy ww wh < <(wmctrl -lG | grep $winname | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
wmctrl -r $winname -e 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh

Remplacer foo par le nom de la fenêtre que vous souhaitez centrer sur la première ligne, bien sûr.


Explication (ventilation sous la forme d'un exemple de session console):

Obtenir les dimensions de l'écran

llama@llama:~$ xdpyinfo | grep dimensions
  dimensions:    1920x1080 pixels (508x285 millimeters)
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*'
1920x1080
x
508x285
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1
1920x1080
llama@llama:~$ IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
llama@llama:~$ echo $sw $sh
1920 1080

Obtention des informations de géométrie de la fenêtre

llama@llama:~$ wmctrl -lG | grep foo
0x00a0000c  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]*//;'
  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]*//;'
 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;'
1143 505  722  475  
llama@llama:~$ read wx wy ww wh < <(wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
llama@llama:~$ echo $wx $wy $ww $wh
1143 505 722 475

Déplacer la fenêtre

llama@llama:~$ echo 0,foo,bar,$ww,$wh
0,foo,bar,722,475
llama@llama:~$ echo 0,$(($sw/2)),bar,$ww,$wh                                    
0,960,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),bar,$ww,$wh
0,599,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh
0,599,303,722,475

0

La plupart des applications doivent respecter le paramètre --geometry au démarrage (certaines préfèrent -geometry, essayez la seconde si la première ne fonctionne pas pour vous):

gnome-terminal --geometry 80x25+100+100

Le paramètre de géométrie a cette forme:

WIDTHxHEIGHT+XOFF+YOFF

Vous pouvez laisser de côté les pièces inutiles:

gnome-terminal --geometry +20+50 #No size, just offsets

Pour plus de détails:

man X

puis appuyez sur "/" et recherchez les SPÉCIFICATIONS GÉOMÉTRIQUES

ou voir ici: http://www.cotse.com/dlf/man/xwindows/geometry.htm

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.