web-dev-qa-db-fra.com

Centrer une fenêtre via la ligne de commande

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

Cela doit être fait en ligne de commande.

17
EpsilonVector

wmctrl L'outil fournit un accès en ligne de commande à presque toutes les fonctionnalités définies dans la spécification EWMH (Conseils étendus du gestionnaire de fenêtres) . 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 commuter et redimensionner les bureaux, pour rendre les fenêtres plein écran , toujours au-dessus de ou collantes , et pour activer , fermer , déplacer , redimensionner , maximisez et réduisez-les .

Vous pouvez l'installer par

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'option -G vous indique 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 lui donner une largeur de 1000 sur 700, vous devez utiliser 0,0,0,1000,700.

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

enter image description here

Pour le déplacer/le redimensionner. Pour cela, j’ai utilisé la solution de contournement consistant à "annuler la maximisation" en utilisant l’option -b

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

enter image description here

Les choses que vous devez comprendre en premier

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

enter image description here

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

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

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

Aligner 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 screen 1360/4 = 340

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

enter image description here

Manipulez-le à partir des paramètres de votre écran

Pour plus d'aide 124

29
One Zero

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"
5
A.B.

Si quelqu'un veut qu'un extrait de code soit copié/collé pour le 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

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


Explication (décomposition sous la forme d'un exemple de session de 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éplacement de 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
3
Doorknob

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 geometry a cette forme:

WIDTHxHEIGHT+XOFF+YOFF

Vous pouvez laisser des parties inutiles:

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

Pour plus de détails:

man X

puis appuyez sur "/" et recherchez SPÉCIFICATIONS DE GÉOMÉTRIE

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

0
roadmr